R. Martinho Fernandes
R. Martinho Fernandes

Reputation: 234424

Can I default a private constructor in the class body or not?

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

Answers (1)

Nicol Bolas
Nicol Bolas

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

Related Questions