
On Fri, Dec 18, 2009 at 11:07 AM, Felipe Magno de Almeida <felipe.m.almeida@gmail.com> wrote:
On Fri, Dec 18, 2009 at 4:57 PM, Emil Dotchevski <emildotchevski@gmail.com> wrote:
On Fri, Dec 18, 2009 at 5:46 AM, Felipe Magno de Almeida <felipe.m.almeida@gmail.com> 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. http://www.revergestudios.com/reblog/index.php?n=ReCode