Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 312
R. Martinho Fernandes Avatar asked Aug 29 '11 00:08

R. Martinho Fernandes


1 Answers

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.

like image 100
Nicol Bolas Avatar answered Sep 27 '22 15:09

Nicol Bolas