11

GCC 4.5ではこれができません:

class foo {
public:
    foo() = default;

private:
    foo(foo const&) = default;
    foo& operator=(foo const&) = default;
};

それは次のように不平を言っています:

エラー: 非パブリック アクセスで宣言された 'foo::foo(const foo&)' は、クラス本体でデフォルト設定できません
エラー: 非パブリック アクセスで宣言された 'foo& foo::operator=(const foo&)' は、クラス本体でデフォルト設定できませんクラス本体

しかし、GCC 4.6 ではそれが可能です。どちらが正しいですか?

4

1 に答える 1

11

N3291 には、何かprivateを宣言できないと言っているものは何もありませんdefault。これは、セクション 8.4.2、パラグラフ 2 の仕様に対する変更であることに注意してください。以前のバージョンでは、公開する必要があると述べていました。

于 2011-08-29T00:30:53.513 に答える