
I've just upgraded my compiler to gcc 4.1.2 and tried the latest implementation of tr1 included with gcc. I've discovered the gcc array implementation is not what I expect: #include <boost/array.hpp> #include <tr1/array> #include <iostream> int main(int , char **) { boost::array<char, 6> barray; std::cout << sizeof(barray) << std::endl; std::tr1::array<char, 6> tr1array; std::cout << sizeof(tr1array) << std::endl; } When run this code produces: g++ foo.cpp && ./a.out 6 16 That is, the boost array is exactly the size I require 6 bytes, but the tr1 array is larger, 16 bytes. I believe this is due to the following declaration in 4.1.2/tr1/array: // Support for zero-sized arrays mandatory. value_type _M_instance[_Nm ? _Nm : 1] __attribute__((__aligned__)); The boost version is not aligned, but the gcc version is. Does the tr1 implementation require the alignment? If so, it appears that tr1::array is definitely not a suitable wrapper for C-style arrays since they aren't the same size! What's the scoop? Thanks, -- Robert