在为MSVC和Clang之间具有默认初始化程序的类成员扩展模板时,似乎有所不同,这有时可能导致代码在MSVC中成功编译但在Clang中失败。
有问题的问题代码相当复杂,并且分布在多个文件中,但是我认为以下玩具示例显示出相同的差异:
#include <memory>
class Impl;
class A {
std::unique_ptr<Impl> ptr = nullptr;
public:
A();
~A();
};
int main() {}
Run Code Online (Sandbox Code Playgroud)
从编译器资源管理器中可以看出,Clang给出了此代码的错误。如果= nullptr删除,则两个编译器都将运行而不会出现错误。
显然,该代码不会执行任何操作,即使执行了此操作也没= nullptr必要。不过我很好奇,关于标准中是否有任何说明这种情况下的一个或多个编译器正确的?