C私有虚拟继承问题

在下面的代码中,似乎C类没有访问A的构造函数,这是由于虚拟继承而需要的。然而,代码仍然编译并运行。为什么它工作?

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,using dmd 0.125)”编译的代码,但是已经被证实与其他编译器的行为一样。

最佳答案
根据C++ Core Issue #7类与虚拟私有基地不能派生。这是编译器中的一个错误。

转载注明原文:C私有虚拟继承问题 - 代码日志