#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?