Bezpieczeństwo nieprawidłowego downcastu przy użyciu static_cast (lub reinterpret_cast) do dziedziczenia bez dodanych członków

Zastanawiałem się, co mówi standard o bezpieczeństwie następującego kodu:

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

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

Oczywiście typ runtimea jestA, nieB, więc obsada naprawdę nie jest bezpieczna. Ponieważ jednak nie dodano żadnego członka i nic nie jest wirtualne, IMO układ pamięci klas powinien być taki sam i to powinno działać (może lepiej byłoby napisaćreinterpret_cast aby wskazać to zachowanie?). Domyślam się, że jest to UB, ale działa z każdym kompilatorem. Czy jest to właściwie dobrze zdefiniowane? Albo raczej niebezpieczne?

Czy cokolwiek by się zmieniło, gdyby?B miał kilka dodatkowych nie wirtualnych metod członkowskich? Ponownie intuicyjnie powiedziałbym „nie”, ale zastanawiam się, co standard ma na ten temat do powiedzenia.

questionAnswers(1)

yourAnswerToTheQuestion