|
Boost Users : |
Subject: Re: [Boost-users] [Review] Formal Review: Boost.Move
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2010-05-23 08:06:44
On 23/05/2010 11:15, Neil Groves wrote:
> I convinced myself that with static_casts do not break strict aliasing
> rules since the conversion from rv<T>* to T* is valid. I believe that
> section 5.2.9 para 2 applies:
The problem is not downcasting, but the fact that T is not rv<T> (the
dynamic type of T is T, not rv<T>):
"If the object of type cv1 B is actually a subobject of an object of
type D, the result refers to the enclosing object of type D. Otherwise,
the result of the cast is undefined."
When we use static_cast<rv<T>>, the object T is not actually a subobject
of rv<T>, so I think we're in undefined behaviour. Imagine this:
class B
{
int filler;
};
class D : public B
{ int filler2;}
B b;
D *dp = static_cast<D*>(&b);
//dp is now pointing to garbage
Best,
Ion
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net