Насколько я понимаю, причина, по которой опасно возвращать ссылки rvalues на функции from, связана со следующим кодом:
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-значения не предполагаются, грубо говоря, «временными», то есть не должны становиться недействительными в конце выражения? Мне кажется глупым иметь возможность назначать их.