11

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?

Kerrek SB
  • 464,522
  • 92
  • 875
  • 1,084
R. Martinho Fernandes
  • 228,013
  • 71
  • 433
  • 510

1 Answers1

11

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.

Nicol Bolas
  • 449,505
  • 63
  • 781
  • 982