Имеется следующий код:
class A
{
public:
bool flag;
};
class B : public A
{
public:
int data;
};
struct S
{
B b;
};
A S::*p = &S::b; // Тут ошибка
Собственно, почему ошибка?
Я пытаюсь получить указатель со статическим типом "поле типа А" и с динамическим типом "поле типа B" у одной и той же структуры, где B публично наследуется от А.
ИМХО, тут нарушается принцип подстановки. Никто не знает, почему так сделано? Классики как-то объясняют сий казус или это просто недосмотрели?