On Friday 15 November 2002 04:45 pm, Gennaro Prota wrote: > Now, let me say that there's an explicit > contradiction (as usual in such scenarios where a "special" case is assumed > to be specified separately) between 5.2.10/10 and 5.2.10/7, because the > latter says that in > > reinterpret_cast<T*>(&x) > > you can only cast back the result to the source type, whereas 5.2.10/10 > defines the reference-cast in terms of pointer-cast and says it's ok to > *dereference* the resulting value.
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. 5.2.10/10 says that reinterpret_cast does the same for references (by specifying the semantics of reinterpret_cast on references in terms of reinterpret_cast on pointers). The dereference (and address-of, for that matter) operators are only there to perform the pointer/reference conversions to that the semantic equivalent can be specified. If there's a contradiction between these two paragraphs, then there has to be some piece of code that can be interpreted in two different ways. Do we have such an example? > However the real issue is that we have > first > > T -> cv char& -> char & > > and then > > char * -> T* > > The latter is a reinterpret_cast from an rvalue of type char*, so except > that I can cast it back to a char* the result is unspecified. By 5.2.10/10, the first part of that is semantically equivalent to: T* -> cv char* ->char* > In short, I agree with you that probably the intent is for it to work. But > I think that should be clarified. > > Genny. I've given probably the closest thing to a proof that one can get without having a formal specification. It uses only semantic equivalences given in the three paragraphs it cites. Is there a problem with it? Doug _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost