次のようなダイヤモンドの継承状況があるとします。
class A{
public: virtual void foo(){};
};
class B: public virtual A{
public: virtual void foo(){};
};
class C: public virtual A{
public: virtual void foo(){};
};
class D: B, C{};
最後の行では、あいまいさを理由にコンパイル エラーが発生します。私が理解しているように、問題は、コンパイラが D の vtbl に配置する foo を認識していないことですが、独自の仮想関数を定義していない場合、なぜ D の vtbl があるのでしょうか?