私は次のコードがコンパイルエラーを与えることを知っています:
class A{ public : virtual void name(){cout<<typeid(this).name()<<endl;}; };
class B:protected A{public : virtual void name(){cout<<typeid(this).name()<<endl;};};
void foo(B* b)
{
A * a = dynamic_cast<A*>(b); //Error : 'A' is an inaccessible base of 'B'
return;
}
しかし、なぜC ++ Stroustrupの本(15.4.1)で彼はこう書いています
class BB_ival_slider:public Ival_slider,protected BBslider{ //...
};
void f(BB_ival_slider*p)
{
// ok
BBslider* pbb2 = dynamic_cast<BBslider*>(p); // ok: pbb2 becomes 0
}
行はコンパイルエラーではありませんか?したがって、私のgccがコンパイルエラーとしてフラグを立てるのが間違っているか、考えられない、stroustrupのタイプミスか、おそらく私は何かを見逃しています...