【发布时间】:2017-09-10 15:18:13
【问题描述】:
我正在对一些没有编译的代码做一些测试,我发现这段代码:
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 中不能编译?
【问题讨论】:
-
在 Clang 中以 C++11(和 C++03)模式工作。那么可能是 GCC 中的一个错误?
-
@JosephThomson 我想到了这一点 - 诚然我没有在 Clang 中测试它,我的错。实际上它也适用于 C++03 模式下的
g++。所以也许我应该打开一个错误报告.. -
取决于是否有人可以回答您的问题!
标签: c++ c++11 c++14 default-constructor