Согласно строгим правилам псевдонима:
struct B { virtual ~B() {} };
struct D : public B { };
D d;
char *c = reinterpret_cast<char*>(&d);
A char *
для любого объекта другого типа действителен. Но теперь вопрос в том, укажет ли он на тот же адрес & d? какова гарантия C ++ Standard, что он вернет тот же адрес?