C ++ 11: Почему разрешено присваивать значения?

Из того, что я понимаю, причина, по которой опасно возвращать ссылки на rvalues из функций, обусловлена следующим кодом:

T&& f(T&& x) { do_something_to_T(x); return static_cast<T&&>(x); }
T f(const T& x) { T x2 = x; do_something_to_T(x2); return x2; }
T&& y = f(T());

Это оставляетy как неопределенная свисающая ссылка.

Однако я не понимаю, почему приведенный выше код даже компилируется? Есть ли когда-либо законная причина присвоить ссылку на rvalue другой ссылке на rvalue? Разве r-значения не должны быть, грубо говоря, «временными», то есть станут недействительными в конце выражения? Возможность назначать их мне кажется глупой.

Ответы на вопрос(1)

Ваш ответ на вопрос