Re[5]: MSVC: A non-const reference may only be bound to an l
От: so5team https://stiffstream.com
Дата: 26.07.23 12:56
Оценка: +1
Здравствуйте, Sm0ke, Вы писали:

S>>Когда мы имеем дело с rvalue reference, то rvalue reference должно оставаться валидным в течении жизни выражения, в котором эта ссылка появилась. Т.е.:

S>>
S>>T && operator<<(T && d, int v) { ...; return std::move(d); }

S>>(T{} << 0) << 1;
S>>

S>>сперва у нас создается временный объект T и rvalue reference на него передается в первый вызов operator<<. Он эту же самую ссылку возвращает. И эта ссылка остается валидной, т.к. выражение у нас не завершилось. Когда вызывается второй operator<<, то эта ссылка отдается туда же. И там она опять же валидна, т.к. выражение все еще не завершилось.

S>Вы ошибаетесь. Рассмотрим пример:


S>
S>  obj_t && tmp = some_fn( obj_t{} ); // tmp битая ссылка
S>


А это ничего, что у нас два разных примера?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.