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 中没有任何内容表明您不能声明某些内容privatedefault. 请注意,这是对规范的更改,在第 8.4.2 节第 2 段中;早期版本说它们必须是公开的。

于 2011-08-29T00:30:53.513 回答