Здравствуйте, 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>
А это ничего, что у нас два разных примера?