Почему ссылочные переменные rvalues не являются rvalue?
Допустим, у меня есть две перегрузки функцииf
. f(T&&)
а такжеf(T&)
, Тогда в телеg
: g(T&& t) { f(t);}
перегрузкаf(T&)
будет вызван, потому что т считается lvalue.
Это очень удивительно для меня. Как работает функция с подписьюf(T&&)
не может соответствовать вызову с типомT&&
? Что меня удивляет еще больше, так это то, что звонокf(static_cast<T&&>(t))
будет на самом деле вызвать перегрузку Rvaluef(T&&)
.
Какие правила C ++ делают это возможным? ЯвляетсяT&&
больше, чем тип?