Я не понимаю, почему следующий код компилируется в GCC 8.0:
decltype(auto) foo(int&& r) {
return r;
}
В foo тип объявления r равен int&&, поэтому возвращаемый тип foo также int&&. Но r сам является lvalue, а lvalue не может связываться с ссылкой rvalue.
Я что-то пропустил?