Ваше предположение, что эталонный параметр rvalue подразумевает "вступление во владение", совершенно неверно. Ссылка Rvalue - это просто особая ссылка, которая поставляется с собственными правилами инициализации и правилами разрешения перегрузки. Не больше, не меньше. Формально он не имеет особого сходства с «перемещением» или «захватом» объекта, на который имеется ссылка.
Это правда, что поддержка семантики перемещения считается одной из основных целей ссылок на rvalue, но все же не следует предполагать, что это их цель only и что эти функции как-то неразделимы. Как и любая другая языковая функция, она может позволить значительное количество хорошо разработанных альтернативных идиоматических применений.
Пример цитаты, похожей на ту, которую вы только что цитировали, фактически присутствует в самой стандартной библиотеке. Это дополнительные перегрузки, введенные в C ++ 11 (и C ++ 17, в зависимости от некоторых нюансов)
template< class CharT, class Traits, class T >
basic_ostream< CharT, Traits >& operator<<( basic_ostream<CharT,Traits>&& os,
const T& value );
template< class CharT, class Traits, class T >
basic_istream<CharT,Traits>& operator>>( basic_istream<CharT,Traits>&& st, T&& value );
Их основная цель - «преодолеть» разницу в поведении перегрузок между членами и не членами operator <<
#include <string>
#include <sstream>
int main()
{
std::string s;
int a;
std::istringstream("123 456") >> a >> s;
std::istringstream("123 456") >> s >> a;
// Despite the obvious similarity, the first line is well-formed in C++03
// while the second isn't. Both lines are well-formed in C++11
}
Он использует тот факт, что ссылка на rvalue может связываться с временными объектами и по-прежнему видеть их как изменяемые объекты. В этом случае ссылка rvalue используется в целях, которые не имеют ничего общего с семантикой перемещения. Это совершенно нормально.