Это правило no name ". Внутри bar
, x
имеет имя ... x
. Так что теперь это lvalue. Передача чего-либо функции в качестве ссылки rvalue не делает ее rvalue внутри функции.
Если вы не видите, почему так должно быть, спросите себя: что x
после foo
возвращается? (Помните, что foo
свободно перемещается x
.)