David Abrahams <[EMAIL PROTECTED]> writes:

| Gabriel Dos Reis <[EMAIL PROTECTED]> writes:
| 
| > David Abrahams <[EMAIL PROTECTED]> writes:
| >
| > | Gabriel Dos Reis <[EMAIL PROTECTED]> writes:
| > | 
| > | > "David B. Held" <[EMAIL PROTECTED]> writes:
| > | >
| > | > | Does this have any merit whatsoever?
| > | > | 
| > | > | template <typename T, typename U>
| > | > | T* dangerous_cast(U* p)
| > | > | {
| > | > |     return static_cast<T*>(static_cast<void*>(p));
| > | > | }
| > | >
| > | > Is it any different from reinterpret_cast<T*>(p) ?
| > | 
| > | It might be, depending on your compiler. The behavior of
| > | reinterpret_cast<T*> is implementation-defined.
| >
| > The mapping used by reinterpret_cast<> is implementation defined,
| > thus an implementation is required to document it.
| >
| >  1) Do you have any corresponding guarantee for converting a void* to
| >     T* when the source is *not* a T* nor the address obtained from a T?
| >
| >  2) Isn't the mapping U* -> void* -> T* at best
| >     implementation-defined if not undefined behaviour? 
| 
| template <class T>
| struct holder
| {
|    union {
|       aligned_POD<T>::type aligner;
|       char storage[sizeof(T)];
|    };
| };
| 
| holder<Foo> h;
| new (h.storage) Foo;
|    ...
| T* u = dangerous_cast<T*>(h.storage); // can't do this with reinterpret_cast

Hmm, I have a couple of questions answers to which will help me
get your point.

 1) Why can't you do that with reinterpret_cast?
 2) Why is that supposed to be better than reinterpret_cast<>?

-- Gaby
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to