В следующем коде кажется, что класс C не имеет доступа к конструктору, который требуется из-за виртуального наследования. Тем не менее, код все еще компилируется и запускается. Почему это работает?
class A {};
class B: private virtual A {};
class C: public B {};
int main() {
C c;
return 0;
}
Кроме того, если я удаляю конструктор по умолчанию из A, например
class A {
public:
A(int) {}
};
class B: private virtual A {
public:
B() : A(3) {}
};
затем
class C: public B {};
будет (неожиданно) компилироваться, но
class C: public B {
public:
C() {}
};
не будет компилироваться, как и ожидалось.
Код, скомпилированный с помощью "g++ (GCC) 3.4.4 (cygming special, gdc 0.12, с использованием dmd 0.125)", но было проверено, что оно ведет себя аналогично с другими компиляторами.