The virtual base is built using the most derived object. Therefore, the AB constructor calls the Base constructor, but since you did not specify a constructor for AB , its default constructor simply calls the default constructor of Base .
You can call the string constructor from AB as follows:
struct AB : A, B { AB() : Base("hello"), A(), B() { } };
Note that the constructors A::A() and B:B() do not call the Base constructor in this setting!
source share