C ++ 11: Por que é permitido atribuir rvalues?

Pelo que entendi, a razão pela qual é perigoso retornar referências de valores de valor a partir de funções é devido ao seguinte código:

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());

Isto deixay como uma referência indefinida pendent

No entanto, eu não entendo por que o código acima compila? Existe alguma razão legítima para atribuir uma referência rvalue a outra referência rvalue? Rvalues não devem ser, grosso modo, "temporários", isto é, serão invalidados no final da expressão? Ser capaz de atribuí-los me parece bobage

questionAnswers(2)

yourAnswerToTheQuestion