小编Gre*_*reg的帖子

默认成员值和不完整类型的模板扩展中的编译器差异

在为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)

https://godbolt.org/z/3s5Drh

从编译器资源管理器中可以看出,Clang给出了此代码的错误。如果= nullptr删除,则两个编译器都将运行而不会出现错误。

显然,该代码不会执行任何操作,即使执行了此操作也没= nullptr必要。不过我很好奇,关于标准中是否有任何说明这种情况下的一个或多个编译器正确的?

c++ compiler-errors language-lawyer

8
推荐指数
1
解决办法
135
查看次数

标签 统计

c++ ×1

compiler-errors ×1

language-lawyer ×1