我不確定它是否是GCC編譯器或預期行爲noexcept
的錯誤。
考慮下面的例子: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
是不是一個不完整的類型,但繼承構造都參與了聲明,看起來編譯器實際上正在考慮比D
更多的基礎結構B
的完整性。
這是預期行爲還是合法代碼?
爲了清楚起見:使用鐺3.7.1
見this link到編譯失敗
- here編譯成功爲GCC編譯器提供bugzilla以獲取更多詳細信息。
目前,該錯誤仍未得到證實。我會盡快更新問題。
嗯,鏗3.7.1接受此代碼。我敢打賭這是一個GCC錯誤。 – thirtythreeforty
我已經添加了編譯器抱怨的位置,以及未來Google員工的最終版本(本文撰寫時最新的穩定GCC)。 – thirtythreeforty