C++11 では、参照修飾子に基づいてメンバー関数をオーバーロードできます。
class Foo {
public:
void f() &; // for when *this is an lvalue
void f() &&; // for when *this is an rvalue
};
Foo obj;
obj.f(); // calls lvalue overload
std::move(obj).f(); // calls rvalue overload
これがどのように機能するかは理解していますが、その使用例は何ですか?
N2819は、標準ライブラリのほとんどの代入演算子を左辺値ターゲットに制限する (つまり、 " &
" 参照修飾子を代入演算子に追加する) ことを提案しましたが、これは拒否されました。そのため、委員会が採用しないことを決定した潜在的なユースケースでした。繰り返しになりますが、合理的なユースケースとは何ですか?