3嘗試使用ICC編譯下面的代碼返回此錯誤: 錯誤#453:受保護函數「A :: A()」(在第10行聲明)無法通過「A 「指針或對象。繼承保護缺省構造函數不可訪問
class A
{
protected:
constexpr A() = default;
~A() = default;
A(const A&) = delete;
};
class B
: protected A
{
public:
B() = default;
};
int main()
{
B b;
}
我發現3個怪異的辦法讓它編譯:
- 使得公共
- 的構造函數刪除的
- 更換缺失的拷貝構造函數「=默認值;」由「{}」在A的Ctor
我的意思是,爲什麼?..?
謝謝你的答案:)
http://coliru.stacked-crooked.com/view?id=a9cc8a16eaca2659a30defdaa3e68869-f674c1a6d04c632b71a62362c0ccfc51 –
這看起來像一個編譯器錯誤,因爲代碼是完全有效的,並在其他編譯器上編譯。如果還沒有發生,你可能需要提交一份錯誤報告。似乎有幾個功能涉及混淆編譯器足以產生錯誤。爲了完整性,您可以嘗試以下方法來縮小bug:** 1 **刪除constexpr,** 2 **嘗試公共和私有繼承,** 3 **將'= default'替換爲{ }在B's ctor ** 3b **中顯式初始化B的ctor中的A。國際刑事法院的有趣行爲:-) –
1,2和3也不編譯,但是3b有效。 – ThiSpawn