Следующий код 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;
?
Это ошибка GCC 54812, компилятор не учитывает спецификаторы доступа для специальных функций-членов по умолчанию. ошибка 56429, который помечен как дубликат предыдущего, имеет контрольный пример, который почти идентичен примеру в вопросе.
Решением является обновление до gcc4.9, что решает проблему. Или создайте пустое тело для конструктора, вместо того, чтобы явно задавать его по умолчанию, как вы сделали во втором примере.