С++ 11 частный конструктор по умолчанию
Следующий код С++ 11 успешно компилируется на моем GCC 4.8:
struct NonStack
{
private:
NonStack() = default;
public:
static NonStack* Create(){
return new NonStack;
}
};
NonStack a;
int main() { }
Однако следующее приводит к ошибке компиляции:
struct NonStack
{
private:
NonStack(){}
};
NonStack a;
int main() { }
Почему первый успех? Не должен ли частный конструктор по умолчанию запретить создание объекта через NonStack a;
?
Ответы
Ответ 1
Это ошибка gcc 54812, компилятор не учитывает спецификаторы доступа для явно заданных специальных функций-членов. Ошибка 56429, которая отмечена как дубликат предыдущей, имеет тестовый пример, который почти идентичен примеру в вопросе.
Решения должны обновиться до gcc4.9, что решает проблему. Или создайте пустое тело для конструктора, вместо того, чтобы явно выполнить его по умолчанию, как это было сделано во втором примере.