在设计可移动但未复制的类时,将复制构造函数声明为私有是很自然的。当只有可移动和平凡的可复制对象作为实例成员时,允许编译器隐式生成移动构造函数是有意义的。
然而,当支持VS11和G ++ 4.7时,我发现了不兼容性:
正如你所看到的,这让我陷入了困境。我的班级不得复制。我必须支持 VS11和MinGW / GCC。我需要我的班级才能移动。
我是否误解了某些问题,或者是否有解决这个小问题的方法?如果生成对复制构造函数的调用,是否可以使编译失败?对这个问题有什么更好的解决方案吗?
答案 0 :(得分:4)
如果将其添加到源文件
#ifdef _MSC_VER
#define noexcept
#endif
您可以在GCC上将其定义为noexcept
,但VC ++将忽略noexcept
。