Exceptions
Some low-level system-specific programming might force you to use reinterpret_cast to stream bits in and out some port, or to transform integers in addresses. Use unsafe casting as rarely as you can and only in well-hidden functions that abstract it away, so as to make your code ready for porting with minimal changes. If you need to cast among unrelated pointer types, prefer casting via void* instead of using reinterpret_cast directly. That is, instead ofT1* p1 = ... ;
T2* p2 = reinterpret_cast <T2*>( p1 );
writeT1* p1 = ... ;
void* pV = p1;
T2* p2 = static_cast <T2*>( pV );