考虑以下代码:

class SILPassPipelinePlan final {
public:
  SILPassPipelinePlan() = default;
  ~SILPassPipelinePlan() = default;
  SILPassPipelinePlan(const SILPassPipelinePlan &) = default;
  SILPassPipelinePlan(SILPassPipelinePlan &&) = delete;

  SILPassPipelinePlan x() {
    SILPassPipelinePlan P;

    return P;
  }
};

int main() {
  return 0;
}
MSVC报告以下错误:

Clang和GCC不会。
从规范的角度来看,哪个编译器正确?这是MSVC错误还是Clang错误?
MSVC来自最新的Visual Studio 2015 Update 3,Clang是版本3.9.0。

最佳答案

C++ 11在某些情况下引入了隐式移动,即yours included:



Clang(唯一接受的实现,顺便说一句)要么误解“失败”以包括对已删除函数的选择,要么过于随意地应用[over.match.funcs]/8。参见bug 31025

关于c++ - 删除的构造函数-MSVC报告错误,Clang不报告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41283712/

10-11 22:44