我正在为一些没有编译的代码做一些测试,我发现这段代码:
struct A {
A(int) {};
virtual void foo() = 0;
};
struct B : public virtual A {
virtual void bar() = 0;
};
struct C : public B {
C() : A(1) {}
virtual void foo() override {}
virtual void bar() override {}
};
int main() {
C c;
return 0;
}
在C ++ 11中,使用‘B::B()’ is implicitly deleted because the default definition would be ill-formed
无法编译(在g ++ 7.0.1上),而在C ++ 14中编译成功。
我试图找出C ++ 14的哪个新功能允许它工作,但无济于事。 cppreference中的description没有提到任何类似的东西。
为什么这段代码可以用C ++ 14编译而不能用C ++ 11编译?
答案 0 :(得分:1)
明确地说这是gcc 7中的一个错误,因为当我在使用gcc 7+的在线编译器中检出你的代码时,它完美地工作而没有任何问题。
所以在这里我给你在线IDE,在那里你可以设置你最喜欢的编译器并尝试进行测试,如果你愿意的话。
很抱歉,我无法帮助您,但我无法重现您的错误。