#include <iostream>
struct A
{
A(int a) : a(a) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
int a;
};
struct B : virtual public A
{
B() : A('b') { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
struct C : virtual public A
{
C() : A('c') { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
struct D : public B, public C
{
// Note: virtual base class initialied *here*
D() : A('d') { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
int main()
{
B b;
C c;
D d;
std::cout << b.a << ',' << c.a << ',' << d.a << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEKewogICAgQShpbnQgYSkgOiBhKGEpIHsgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgc3RkOjplbmRsOyB9CiAgICBpbnQgYTsKfTsKCnN0cnVjdCBCIDogdmlydHVhbCBwdWJsaWMgQQp7CiAgICBCKCkgOiBBKCdiJykgeyBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBzdGQ6OmVuZGw7IH0KfTsKCnN0cnVjdCBDIDogdmlydHVhbCBwdWJsaWMgQQp7CiAgICBDKCkgOiBBKCdjJykgeyBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBzdGQ6OmVuZGw7IH0KfTsKCnN0cnVjdCBEIDogcHVibGljIEIsIHB1YmxpYyBDCnsKICAgIC8vIE5vdGU6IHZpcnR1YWwgYmFzZSBjbGFzcyBpbml0aWFsaWVkICpoZXJlKgogICAgRCgpIDogQSgnZCcpIHsgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgc3RkOjplbmRsOyB9Cn07CgppbnQgbWFpbigpCnsKICAgIEIgYjsKICAgIEMgYzsKICAgIEQgZDsKICAgIHN0ZDo6Y291dCA8PCBiLmEgPDwgJywnIDw8IGMuYSA8PCAnLCcgPDwgZC5hIDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiAwOwp9