Хороший вопрос. Я думаю, есть две вещи, на которые стоит обратить внимание: 1) как вы указали на неклассовое rvalue thingy и 2) как работает разрешение перегрузки:
Критерии отбора лучших
функция - количество аргументов,
насколько хорошо аргументы соответствуют
параметр-тип-список кандидата
функция, [...]
Я не видел в стандарте ничего, что говорило бы о том, что не классовые значения обрабатываются специально при разрешении перегрузки.
Ваш вопрос описан в проекте стандарта, который у меня есть (N-4411):
Однако вступает в игру параллельное чтение привязки ссылок, последовательностей неявного преобразования, ссылок и разрешения перегрузки в целом:
13.3.3.1.4 Ссылочная привязка
2 Когда параметр ссылочного типа
не связан напрямую с аргументом
выражение, последовательность преобразования
это тот, который требуется для преобразования выражения аргумента в базовый
тип ссылки в соответствии
13.3.3.1.
и
13.3.3.2 Ранжирование последовательностей неявного преобразования
3 Две последовательности неявного преобразования
одинаковые формы неразличимы
последовательности преобразования, если один из
применяются следующие правила:
- Стандартная последовательность преобразования S1 является лучшей последовательностью преобразования, чем
стандарт
последовательность преобразования S2, если
- S1 и S2 являются ссылочными привязками (8.5.3), и ни одна из них не относится к
неявный параметр объекта
нестатический
функция-член объявлена без квалификатора ref, и S1 связывает
lvalue ссылка
для lvalue и S2 связывает ссылку rvalue или S1 связывает ссылку rvalue
ссылка на rvalue и S2
связывает ссылку lvalue.
[Пример:
int i;
int f();
int g(const int&);
int g(const int&&);
int j = g(i); // calls g(const int&)
int k = g(f()); // calls g(const int&&)