Например, вы можете перегрузить операторы как свободные функции ссылками на rvalue, если хотите:
Foo operator+(Foo&& a, const Foo& b)
{
a += b;
return std::move(a);
}
Чтобы добиться того же эффекта с помощью функции-члена, вам нужно процитированное предложение:
Foo Foo::operator+(const Foo& b) && // note the double ampersand
{
*this += b;
return *this;
}
Двойной амперсанд говорит, что «эта функция-член может быть вызвана только для значений r».
Вопрос о том, нужно ли вам явно перейти от *this
в такой функции-члене, обсуждается здесь .