以下代码在 gcc 4.8.1 上编译没有问题:
#include <utility>
struct foo
{
};
int main()
{
foo bar;
foo() = bar;
foo() = std::move( bar );
}
似乎隐式生成的赋值运算符 forfoo
没有&
引用限定,因此可以在右值上调用。根据标准,这是否正确?如果是这样,有什么理由不要求隐式生成的赋值运算符被重新&
限定?
为什么标准不要求生成以下内容?
struct foo
{
foo & operator=( foo const & ) &;
foo & operator=( foo && ) &;
};