Are char*, int*, long* or even long long* of same size (on a given platform)?
There is no such guarantee in either C or C++ ISO standards, but in practice, I've yet to see a platform where this doesn't hold.
Note that regardless of this, reinterpret_cast'ing one pointer to another will more often than not lead to U.B., with a few exceptions (void*, and unsigned char* for PODs). So would any union tricks. So the obvious question is: why would you care?