Boost logo

Boost :

Subject: Re: [boost] [optional] Strict Aliasing Warnings on Trunk
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2009-12-18 15:19:45

On Fri, Dec 18, 2009 at 11:07 AM, Felipe Magno de Almeida
<felipe.m.almeida_at_[hidden]> wrote:
> On Fri, Dec 18, 2009 at 4:57 PM, Emil Dotchevski
> <emildotchevski_at_[hidden]> wrote:
>> On Fri, Dec 18, 2009 at 5:46 AM, Felipe Magno de Almeida
>> <felipe.m.almeida_at_[hidden]> wrote:
> [snip]
>>> But nothing else is guaranteed. The compiler might very well increment
>>> it by one byte when casting to T2 and then decrement it when casting
>>> it back. It is perfectly valid behavior for reinterpret_cast.
>> It is perfectly portable as well.
> 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.

>>> IMO we should be using static_cast<T2*>(static_cast<void*>(x)) which
>>> is not implementation-defined.
>> 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.

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

Emil Dotchevski
Reverge Studios, Inc.

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