Casting a pointer does not produce an lvalue. Why?
An even better example, unary + yields an rvalue, as does x+0. The underlying reason is that all these things, including your cast, create a new value. Casting a value to the type it already is, likewise creates a new value, never mind whether pointers to different types have the same representation or not. In … Read more