Reputation: 234424
GCC 4.5 doesn't let me do this:
class foo {
public:
foo() = default;
private:
foo(foo const&) = default;
foo& operator=(foo const&) = default;
};
It complains that:
error: 'foo::foo(const foo&)' declared with non-public access cannot be defaulted in the class body
error: 'foo& foo::operator=(const foo&)' declared with non-public access cannot be defaulted in the class body
However, GCC 4.6 lets me do it. Which one is correct?
Upvotes: 11
Views: 378
Reputation: 473322
There is nothing in N3291 that says you cannot declare something private
and default
. Note that this was a change to the specification, in section 8.4.2, paragraph 2; earlier versions said that they must be public.
Upvotes: 11