"If P is an rvalue reference to a cvunqualified
template parameter and the argument is an lvalue, the type “lvalue reference to A” is used in
place of A for type deduction." [ Example:
template <class T> int f(T&&);
template <class T> int g(const T&&);
int i;
int n1 = f(i); int n2 = f(0); int n3 = g(i);
----- ISO (N3690) 14.8.2.1
So,in this question ,T is deducted as int&,so the function is of argument int& && ,which is equivalent of int& (if you take a reference to a reference to a type ,you got a reference to that type)
modified version of codes in the initial question can demonstrate that :
template<typename t="">
void foo(T&& rr){
rr++;
}
int main(){
int i = 11;
foo(i);
cout << i << endl; }
</typename>