С++ 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 предлагал ограничить большинство операторов присваивания в стандартной библиотеке lvalue-мишенями (т.е. добавить ссылочные квалификаторы &
"к операторам присваивания), но было отклонено. Так что это был потенциальный случай использования, когда комитет решил не пойти с ним. Итак, опять же, что разумно использовать?