--On Tuesday, September 02, 2003 2:00 PM -0400 Douglas Gregor <[EMAIL PROTECTED]> wrote:

On Tuesday 02 September 2003 01:36 pm, Mat Marcus wrote:
We're trying to use optional from 1.30.0 (sorry legal hasn't
approved our use of 1.30.2 yet). However on one compiler
(Metrowerks 8.3 PPC CFM) we're getting static asserts from the
alignment calculation metafunctions. Below is an abstracted example
of the problem. I'm curious about what's going on and what
workarounds might be possible.

Thanks,
Mat

Looks like the code was unable to find an 8-byte aligned type. Could you check the results of: std::cout << boost::alignment_of<double> << '\n'; std::cout << boost::alignment_of<long double> << '\n';

I suspect they are both '4', but that leaves me even more confused
as to why  the alignment of std::pair<double, double> would be 8
(and how to get a POD  type with alignment 8 for ourselves!).

Doug

Yes, they are both 4. I suspect that the problem may have to do with some unusual alignment rules on this platform. I believe that the rule is something like: a double at the beginning of a struct forces 8 byte alignment, but a double in the middle does not. That is, given


struct A {
        double d;
        int i;
};

struct B {
        int i;
        double d;
};

then:
sizeof(A) == 16;
sizeof(B) == 12;
alignment_of<A>::value == 8;
alignment_of<B>::value == 4;

Fun, eh? I can double check the compiler release notes for the exact rule if you like.

- Mat


_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to