Рассмотрим этот пример, в котором базовый класс имеет некоторые члены данных, а производный один предоставляет только дополнительный метод:
struct TestBase
{
int x;
TestBase() : x(5) {}
};
struct TestDerived : public TestBase
{
void myMethod()
{
x=8;
}
};
int main()
{
TestBase b;
TestDerived& d=static_cast<TestDerived&>(b);
d.myMethod();
}
Это понижение до неправильного типа, поэтому AFAIU имеет поведение undefined. Но могут ли быть некоторые исключения для таких случаев, как это, где макет производного класса идентичен шаблону базового класса?