struct A
{
A(int x)
: n(x)
{}
A(A&&)
{}
A& operator =(A&&)
{
return *this;
}
int n;
};
int main()
{
A a(1), b(2);
a = b;
if (2 == a.n)
{
// It SHOULD go here!
}
}
根据 C++ 标准 12.8.7:
如果类定义声明了移动构造函数或移动赋值运算符,则隐式声明的复制构造函数定义为已删除;
和 12.8.18
如果类定义声明了移动构造函数或移动赋值运算符,则隐式声明的复制赋值运算符被定义为删除;
该语句a = b;
应触发编译器错误。但是,我的编译器 (VC++ 2013 RC) 接受它并改为调用隐式定义的复制分配。
这是编译器的错误吗?
更新:
我已将此问题作为错误提交给microsoft。