Boost logo

Boost :

From: Steven Watanabe (steven_at_[hidden])
Date: 2007-10-10 15:38:40


Martin Bonner <Martin.Bonner <at>> writes:

> From: Simonson, Lucanus J
> > There are cases where reading
> > the C++ standard will inform a developer that reinterpret_cast is safe
> > [snip]. Specifically, I submit that inheritance and
> > composition are such cases
> As I said in my previous email, I don't think so. BUT...
> > provided that additional data members are not
> > added in the subtype or composed type.
> ... I missed this.
> I still don't think the standard makes the guarantees you think it does,
> but in practise, you are much less likely to run into problems with that
> limitation.
> If the types are inherited (rather than composed) I still think you have
> problems if the derived class overrides virtuals in the base.

Even without overriding virtuals, technically such a cast is wrong.

"If a nonstatic member function of a class X is called for an object
that is not of type X, or of a type derived from X, the behavior is
undefined." (9.3.1/1)

In other words, you can do the reinterpret_cast to and from
the derived class, and that is guaranteed to work, but you
cannot call a member function and cast the this pointer
back to the base.

While what you are doing will probably work I can imagine
a case where the compiler helpfully inserts code for
detecting such a cast (Since for non-aggregates the compiler is
permitted to add extra hidden members)

In Christ,
Steven Watanabe

Boost list run by bdawes at, gregod at, cpdaniel at, john at