
On Sun, Nov 9, 2008 at 7:42 AM, Jon Biggar <jon@biggar.org> wrote:
David Abrahams wrote:
on Sat Nov 08 2008, Mathias Gaunard <mathias.gaunard-AT-ens-lyon.org> wrote:
Jon Biggar wrote:
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.
I personally never understood why gcc's alignof returns that. It doesn't even make sense, since the size of double is not a multiple of 8, so multiple doubles right after each other can't possibly be 8-byte aligned.
We could easily either specialize our way around it or limit the result of alignment_of<T> to sizeof(T). The latter seems like a smart thing to do anyway.
Thoughts?
I'm becoming convinced that we just shouldn't us the __alignof__() builtin from gcc because it lies.
I wouldn't say it likes; from gcc __alignof__ docs: " Some machines never actually require alignment; they allow reference to any data type even at an odd address. For these machines, `__alignof__' reports the _recommended_ alignment of a type." x86 is one of those machines (no alignment ever required except for some XMM instructions). The recommended alignment for double is 8 bytes, even if the ABI, for historical reason only requires 4. -- gpd