C++11 Auto&& Variables – Not Rvalue References

autoc++c++11forwarding-reference

Why auto&& is not rvalue reference?

Widget&& var1 = Widget(); // rvalue reference
auto&& var2 = var1; //var2 not rvalue reference

below are rvalue reference example

void f(Widget&& param); // rvalue reference
Widget&& var1 = Widget(); // rvalue reference

Why var2 is not rvalue reference but f and var2 are rvalue references?

Best Answer

auto&& is a declaration's equivalent of forwarding references (with identical deduction rules). As such, it will be deduced to an lvalue reference when the initializer is an lvalue. However, var is an lvalue (as it is the name of a variable), hence var2 is an lvalue reference.