#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 не имеют общего интерфейса.
Это законно? Если да - в каком стандарте? С++ 98/03/11?
Оба, msvc и gcc скомпилировали его в порядке.
Раньше я думал, что я должен использовать некоторый общий интерфейс для такого случая (возможное виртуальное наследование).
Имеет ли такая ситуация какое-то особое имя?
Как это работает в деталях, пожалуйста? Может быть, некоторые ссылки ISO?