C ++ 11 частный конструктор по умолчанию

Следующий код C ++ 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;?

20

Решение

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

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

17

Другие решения


По вопросам рекламы [email protected]