以下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() { }

为什么第一个成功?私有(private)默认构造函数是否应禁止通过NonStack a;创建对象?

最佳答案

这是gcc错误54812,编译器未能遵守明确指定的特殊成员函数的访问说明。 Bug 56429被标记为较早版本的副本,其测试用例与问题中的示例几乎相同。

解决方案是升级到gcc4.9,从而解决了该问题。或者为构造函数创建一个空的主体,而不是像在第二个示例中所做的那样显式地默认它。

10-08 08:58