I can have AA and AA & and the compiler will know to use AA &
Yes, in the case of movetest (AA ()) , only movetest (AA) is viable, since a reference (lvalue) to a non-constant cannot be tied to an r-value. However, the rvalue reference is said to be directly related to the temporary. Thus, for the purpose of resolving function overload
void movetest(AA) void movetest(AA&&)
are equal, since the implicit conversion sequences used to convert AA () to AA and AA & < , respectively, are equal. The first is not better, because direct link binding is also considered an identity conversion.
source share