Ответ 1
В соответствии с [dcl.spec.auto]/5 тип возврата выводится так, как если операндом оператора return
был операнд of decltype
. И [dcl.type.simple]/(4.2) четко заявляет, что, поскольку операнд не заключен в скобки, тип объекта является типом (t21), т.е. int&&
. И действительно, r
является lvalue ([expr.prim.id.unqual]).
К счастью, это было обнаружено и зарегистрировано как ошибка 64892 два года назад. (Интересно, почему никто не мог найти время, чтобы исправить это?)