C++03 では、右辺値に対して左辺値用のメンバ関数を呼べてしまいます。 class X { public: X& operator=(const X&) { ... } }; int main() { X x; X() = x; // エラーになるべきだが、コンパイルが通ってしまう } この問題を解決するため、 C++0x ではメンバ関数を & 、 && で修飾することができるようになり、そのオブジェクトが左辺値の場合だけ呼べる関数、右辺値の場合だけ呼べる関数を判別できるようになります。 class X { public: X& operator=(const X&) & // 左辺値修飾 { ... } }; int main() { X x; X() = x; // エラー! } また、オブジェクトが左辺値なのか右辺値なのかでメンバ関数をオーバーロードできるので、 左辺値だったらco