#include <iostream>
using namespace std;
struct V {
V( int i) {
std:: cout << "initialized v" << '\n ' ;
}
} ;
struct A {
A( ) {
std:: cout << "initialized a" << '\n ' ;
}
} ;
struct B : virtual V, virtual A {
B( int i) : V{ i} {
std:: cout << "initialized b" << '\n ' ;
}
} ;
class C : virtual V, virtual A {
public :
C( int i) : V{ i} {
std:: cout << "initialized c" << '\n ' ;
}
} ;
class D : virtual public B, virtual public C {
public :
D( int i, int j) : V{ i} , B{ i} , C{ j} {
std:: cout << "initialized d" << '\n ' ;
}
} ;
int main( ) {
D* d = new D{ 3 ,3 } ; //ok
B* b = new D{ 3 ,3 } ; //ok
C* c = new D{ 3 ,3 } ; //undefined
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFYgewogICAgVihpbnQgaSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiaW5pdGlhbGl6ZWQgdiIgPDwgJ1xuJzsKICAgIH0KfTsKCnN0cnVjdCBBIHsKICAgIEEoKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbml0aWFsaXplZCBhIiA8PCAnXG4nOwogICAgfQp9OwoKc3RydWN0IEIgOiB2aXJ0dWFsIFYsIHZpcnR1YWwgQSB7CiAgICBCKGludCBpKSA6VntpfSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbml0aWFsaXplZCBiIiA8PCAnXG4nOwogICAgfQp9OwoKY2xhc3MgQyA6IHZpcnR1YWwgViwgdmlydHVhbCBBIHsKcHVibGljOgogICAgQyhpbnQgaSkgOiBWe2l9IHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImluaXRpYWxpemVkIGMiIDw8ICdcbic7CiAgICB9Cn07CgpjbGFzcyBEIDogdmlydHVhbCBwdWJsaWMgQiwgdmlydHVhbCBwdWJsaWMgQyB7CnB1YmxpYzoKICAgIEQoaW50IGksIGludCBqKSA6VntpfSwgQntpfSwgQ3tqfSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbml0aWFsaXplZCBkIiA8PCAnXG4nOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBEKiBkID0gbmV3IER7MywzfTsgLy9vawogICAgQiogYiA9IG5ldyBEezMsM307IC8vb2sKICAgIEMqIGMgPSBuZXcgRHszLDN9OyAvL3VuZGVmaW5lZAogICAgcmV0dXJuIDA7Cn0=