隐式删除默认的构造函数工作在C++ 14
问题描述:
我做了一些代码,没有编译一些测试,我发现这个代码:隐式删除默认的构造函数工作在C++ 14
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编译失败(上g ++ 7.0.1)与‘B::B()’ is implicitly deleted because the default definition would be ill-formed
,而在C++ 14编译成功。
我试图找出C++ 14的哪个新功能允许这个工作,无济于事。在cppreference中的description没有提到它看起来的那种东西。
为什么这个代码可以用C++ 14编译,但不能用C++ 11编译?
答
明确地说,这是gcc 7中的一个错误,因为当我用gcc 7+在线编译器检出代码时,它已经完美运行,没有任何问题。
所以在这里我给你在线IDE,你可以设置你最喜欢的编译器,并尝试做测试,如果你想。
对不起,我不能帮你更好,但我无法重现你的错误。
在Clang中使用C++ 11(和C++ 03)模式。那么GCC中的一个bug呢? –
@JosephThomson我想到了那个 - 我承认我没有在铿锵中测试它,我的不好。实际上,它也可以在C++ 03模式下运行在'g ++'中。所以,也许我应该打开一个错误报告.. – Svalorzen
取决于如果有人可以给你的问题的答案! –