我不确定这是GCC编译器的错误还是noexcept
.
考虑以下示例:
struct B {
B(int) noexcept { }
virtual void f() = 0;
};
struct D: public B {
using B::B;
D() noexcept(noexcept(D{42})): B{42} { }
void f() override { }
};
int main() {
B *b = new D{};
}
如果noexcept
被删除,它会编译。
无论如何,就像在示例中一样,我从 GCC v5.3.1 中得到了这个错误:
test.cpp:8:31: error: invalid use of incomplete type ‘struct D’
D() noexcept(noexcept(D{42})): B{42} { }
^
据我所知,struct D
不是一个不完整的类型,但是语句中涉及到继承构造函数,看起来编译器实际上是在考虑基础结构的完整性而B
不是D
.
这是预期的行为还是法律法规?
为清楚起见:
有关更多详细信息,请参阅此链接到 GCC 编译器的bugzilla。
目前,该错误仍未得到证实。我会尽快更新问题。