Можно ли по умолчанию использовать закрытый конструктор в теле класса или нет? - PullRequest
11 голосов
/ 29 августа 2011

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 позволяет мне сделать это.Какой из них правильный?

1 Ответ

11 голосов
/ 29 августа 2011

В N3291 нет ничего, что говорило бы, что вы не можете объявить что-то private и default.Обратите внимание, что это было изменение к спецификации, в разделе 8.4.2, пункт 2;В более ранних версиях говорилось, что они должны быть публичными.

...