次のコードは、gcc 4.8.1 で問題なくコンパイルされます。
#include <utility>
struct foo
{
};
int main()
{
foo bar;
foo() = bar;
foo() = std::move( bar );
}
暗黙的に生成された代入演算子は参照修飾されfoo
ていない&
ため、右辺値で呼び出すことができるようです。これは標準に従って正しいですか?もしそうなら、暗黙的に生成された代入演算子を参照修飾する必要がない理由は何ですか?&
標準では、以下を生成する必要がないのはなぜですか?
struct foo
{
foo & operator=( foo const & ) &;
foo & operator=( foo && ) &;
};