Могу ли я по умолчанию использовать частный конструктор в классе или нет?

GCC 4.5 не позволяет мне делать это:

class foo {
public:
    foo() = default;

private:
    foo(foo const&) = default;
    foo& operator=(foo const&) = default;
};

Он жалуется, что:

error: 'foo:: foo (const foo &)', объявленный с непубличным доступом, не может быть дефолт в классе класса
error: 'foo & foo:: operator = (const foo &) ', объявленный с непубличным доступом, не может быть установлен по умолчанию в классе класса

Однако GCC 4.6 позволяет мне это делать. Какой из них правильный?

Ответ 1

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