Это возможно, потому что C ++ не является безопасным языком; он ожидает, что вы будете знать, что делаете. Если вы берете ссылочный параметр rvalue, он ожидает, что вы знаете, что вы делаете с ним. Если вы сохраните это как ссылочный член объекта, он ожидает, что вы обеспечите, чтобы объект, на который ссылаются, продолжали существовать до тех пор, пока этот объект нуждается в этом.
И если вы нарушите эти ожидания , вы страдаете от последствий.
Ссылка на значение не обязательно является «временным объектом». Это может быть ссылка на любой объект, с которого можно двигаться. Вот почему std::move
выходит: для обозначения того, что можно перейти от невременного объекта, возвращая на него ссылку на значение.