次の例のstatic_castで、「エラー:「A」は「B」のアクセスできないベースです」というメッセージが表示されます。
template<typename Derived>
class A {
protected:
void funA() { static_cast<Derived *> (this)->funB(); }
};
class B: protected A<B> {
public:
void funB() {}
void funC() { funA(); }
};
int main() {
B().funC();
return 0;
}
ただし、代わりにreinterpret_castまたはCスタイルの型キャスト((Derived *)this)-> funB()を使用すると、コンパイル/動作します。この動作は正しいですか?
使用したコンパイラ:gccバージョン4.5.1 20100924(Red Hat 4.5.1-4)(GCC)。
ありがとう。