以下のコードでは、次の警告とエラーが表示されます。
test.cpp:15: warning: direct base 'B' inaccessible in 'D' due to ambiguity
test.cpp:15: error: no unique final overrider for 'virtual void A::f()' in 'D'
しかし、A から B の仮想継承を削除すると (つまりstruct B : public A
)、警告のみが表示され、エラーは発生しません。
struct A
{
virtual void f() = 0;
};
struct B : public virtual A
{
void f() {}
};
class C : public B
{};
struct D : public C, virtual B
{};
int main()
{
return 0;
}
なんで?これは恐ろしいダイヤモンドですか?