Seguridad de downcast no válido utilizando static_cast (o reinterpret_cast) para herencia sin miembros agregados

Me preguntaba qué dice la norma sobre la seguridad del siguiente código:

class A { int v; };
class B: public A { }; // no added data member

A a;
B& b = static_cast<B&>(a);

Obviamente el tipo de tiempo de ejecución dea esAnoB, por lo que el elenco no es realmente seguro. Sin embargo, dado que no se agregó ningún miembro y nada es virtual, OMI, el diseño de la memoria de las clases debería ser el mismo y esto debería funcionar (quizás sería mejor escribir)reinterpret_cast para indicar este comportamiento?). Mi conjetura sería que esto es UB, pero funcionaría con cualquier compilador. ¿O es esto realmente bien definido? ¿O más bien peligroso?

Además, ¿cambiaría algo siB ¿Tenía algunos métodos adicionales de miembros no virtuales? De nuevo, intuitivamente diría que no, pero me pregunto qué tiene que decir el estándar sobre esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta