Boost logo

Boost :

From: Sebastian Redl (sebastian.redl_at_[hidden])
Date: 2007-09-22 07:14:26


Marco Servetto wrote:
> The question is: C++ grants that
> A a;
> a.a2=8.8;
> assert(reinterpret_cast<B*>(&a)->b2==8.8);
>
Please note that my reply is based on the final public review document
and thus not authoritative.
Yes, it grants this, according to the rules of layout-compatible PODs.
> it is even true for classes with inheritance?
>
No. The layout-compatibility rules only apply to PODs. POD-structs are
defined by their lack of member pointer members, reference members,
object members of non-POD type (recursively), user-defined copy
assignment and user-defined destructor.
But there is one more requirement: they must be aggregate classes.
Aggregate classes are defined in 8.5.1:

"An aggregate is an array or a class with no user-declared constructors,
no private or protected non-static data members, no base classes, and no
virtual functions."

Sebastian Redl


Boost list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk