In C++11 having the compiler automatically deduce template parameters (as you must do with a templated constructor) and applying &&
to the type creates a universal reference, which matches any type with any cv qualification, whether it's an lvalue or rvalue reference.
So in your case you're passing in an A
, and therefore Args...
=A &
, Args &&...
=A & &&
, which is A &
thanks to reference-collapsing rules, which is a better match than const A &
, since the compiler doesn't have to add constness to a non-const variable.