考虑以下代码:
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/