On Saturday 16 November 2002 12:24 pm, Gennaro Prota wrote: > Sorry for the late reply (it's just my timezone). > > You wrote: > >I don't see the contradiction here. 5.2.10/7 says that you can cast from a > > T pointer to a U pointer and back to a T pointer and get the original > > pointer back. > > Unfortunately the standard is a great piece of work but fails > miserably to support you when you want to "deduce" things that are not > written explicitly there in plain English, especially when generic > expressions like "it's the same as", "is equivalent to", etc. are > used.
I would generally agree that such an informal style doesn't allow any deduction, but I think we have to be realistic. We don't have a formal specification for C++, and it's unlikely that we will ever have one. We won't get anywhere if we require formal methods with an informal specification. > First of all the quotes: > > 5.2.10/7: "A pointer to an object can be explicitly converted > to a pointer to an object of different type.65) Except that > converting an rvalue of type "pointer to T1" to the type > "pointer to T2" (where T1 and T2 are object types and where > the alignment requirements of T2 are no stricter than those > of T1) and back to its original type yields the original pointer > value, the result of such a pointer conversion is unspecified." > > > Incidentally, what does "converting back" means? However that's not > the main point. Given T* tp, reinterpret_cast<T*>(reinterpret_cast<U*>(tp)) is semantically equivalent to tp. > > 5.2.10/10: An lvalue expression of type T1 can be cast to the type > "reference to T2" if an expression of type "pointer to T1" can be > explicitly converted to the type "pointer to T2" using a > reinterpret_cast. That is, a reference cast reinterpret_cast<T&>(x) > has the same effect as the conversion *reinterpret_cast<T*>(&x) > with the built-in & and * operators. > > > What does it mean "has the same effect of"? Would you prefer "is semantically equivalent to?" You can rewrite one expression as the other. (Not in actual C++ code, because you can't say "I want the built-in operator&", but it's fine for exploring the properties of an expression). > 5.2.10/7 says that the > result of reinterpret_cast<T*>(&x) is unspecified. What is the effect > of dereferencing it? > > *reinterpret_cast<T*>(&x) The effect is the same as dereferencing any pointer. You get the lvalue associated with the address stored in the pointer. Doug _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost