5
struct A
{
private:
A() = default; // Version 1.
};
struct B : public A
{};
struct C
{
private:
C() {}; // Version 2.
};
struct D : public C
{};
int main()
{
B b; // Compiles under g++ 4.7.2
D d; // Compilation error under g++ 4.7.2
}
而兩種情況(用gcc 4.7.2):
- 如果我編譯此代碼(與第1版A的構造函數),沒有問題。
- 如果我使用第二個構造函數,gcc對我說
D::D()
是私有的。
問題:如果我使用默認構造函數,爲什麼問題會消失?如果A
具有私有構造函數,那麼其他類永遠不會創建A
的實例,甚至不會創建其派生類,但不考慮其構造函數實現的「默認性」。
既沒有'X行'評論? – 2013-02-22 17:22:55
@ Peregring-lk:我更新了我的回答 – 2013-02-22 17:27:21
報告爲http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56429 – 2013-02-22 21:50:56