#include <vector>
using namespace std;
int main
{
    vector<int> coll;
    for (auto&  i : coll) {} // 1
    for (auto&& i : coll) {} // 2
}
According to cppref:
It is safe, and in fact, preferable in generic code, to use deduction to forwarding reference, for (auto&& var : sequence).
However, I think 2 is completely equivalent to 1; because i is still an lvalue even it is declared as auto&&. 
Why is it recommended to use auto&& rather than auto& in range-for loop?
