Boost logo

Boost :

Subject: Re: [boost] [optional] Strict Aliasing Warnings on Trunk
From: Felipe Magno de Almeida (felipe.m.almeida_at_[hidden])
Date: 2009-12-18 15:24:41

On Fri, Dec 18, 2009 at 6:19 PM, Emil Dotchevski
<emildotchevski_at_[hidden]> wrote:
> On Fri, Dec 18, 2009 at 11:07 AM, Felipe Magno de Almeida
> <felipe.m.almeida_at_[hidden]> wrote:


>> It is not portable if we dereference it, which optional does.
> I am going off of what Giovanni said earlier in this thread about how
> optional works, which seems to contradict your statement above.

I re-read what Giovanni said. And it seems to me it still dereferences it.
Indirectly, but does it.
If a perfectly valid implementation negates the bits in a a pointer
for a reintepret_cast and you pass it to placement new it will
probably fail.


>>> Casting to a pointer of unrelated type doesn't suite static_cast,
>>> reinterpret_cast is a better choice.
>> I don't understand why.
>> How is reinterpret_cast better than static_cast?
> In this case reinterpret_cast is a better choice because even with
> static_cast, the cast is just as unsafe, but may appear safer because
> static_cast is perceived as safer than reinterpret_cast.

It is not just as unsafe. static_cast is guaranteed to do what is
needed. reinterpret_cast doesn't. It is implementation-defined and can
do whatever it wants, as long as a reinterpret_cast back results in
the same pointer as before.

> You don't want to make it harder for the programmer to see that the
> operation is potentially dangerous, do you?

It is if you do reintepret_cast. Not if you do static_cast.

> Emil Dotchevski
> Reverge Studios, Inc.


Felipe Magno de Almeida

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