Подтвердить что ты не робот

С++ 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;?

4b9b3361

Ответ 1

Это ошибка gcc 54812, компилятор не учитывает спецификаторы доступа для явно заданных специальных функций-членов. Ошибка 56429, которая отмечена как дубликат предыдущей, имеет тестовый пример, который почти идентичен примеру в вопросе.

Решения должны обновиться до gcc4.9, что решает проблему. Или создайте пустое тело для конструктора, вместо того, чтобы явно выполнить его по умолчанию, как это было сделано во втором примере.