
John Maddock wrote:
In boost 1.36, boost::alignment_of<> was changed to use the builtin __alignof__() if gcc version was 4.3 or greater rather than using calculating alignement using:
template <typename T> struct alignment_of_hack { char c; T t; alignment_of_hack(); };
Unfortunately, this broke some code I had written that did structure introspection, because gcc's __alignof__() returns 8 for double on the x86 architecture, but actually only aligns doubles on 4 byte boundaries inside structures.
Hmmm, do you have a test case?
I ask because the type_traits tests compare the result of alignment_of<>::value with the actual alignment inside a struct... and the tests are all passing.
This is what the alignment_of test case outputs on my system: alignment_of_test.cpp:78: The expression: "::boost::alignment_of<double>::value" had an invalid value (found 8, expected 4) alignment_of_test.cpp:81: The expression: "::boost::alignment_of< ::boost::long_ long_type>::value" had an invalid value (found 8, expected 4) That's with this version of gcc from Fedora 9: gcc version 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC) -- Jon Biggar jon@floorboard.com jon@biggar.org jonbiggar@gmail.com