#include <iostream>
struct B1
{
virtual void method()=0;
virtual ~B1(){}
};
struct B2
{
virtual void method()=0;
virtual ~B2(){}
};
struct D: B1, B2
{
virtual void method()
{
std::cout << "D::method\n";
};
};
int main(int argc,char *argv[])
{
D d;
B1 &b1=d;
B2 &b2=d;
b1.method();
b2.method();
return 0;
}
B1 と B2 は共通のインターフェースを共有しないことに注意してください。
これは合法ですか?はいの場合 - どの規格で?C++98/03/11 ?
msvc と gcc の両方が正常にコンパイルされました。
以前は、そのような場合(仮想継承の可能性)には共通のインターフェースを使用する必要があると考えていました。
そのような状況には特別な名前がありますか?
詳細な仕組みを教えてください。多分いくつかのISO参照?