Вам необходимо передать значение r для первого параметра.Обе следующие функции выдают «forward function».
Translate(0, &out);
// or
Translate(std::move(in), &out);
При Translate(in, out)
вторая перегрузка не может последовательно выводить тип A
: первый параметр выводится как int&
, а второй параметрвыводится как int
.
main.cpp:12:6: note: candidate: 'template<class A> void Translate(A&&, A*)'
void Translate(A&& a, A* b) {
^~~~~~~~~
main.cpp:12:6: note: template argument deduction/substitution failed:
main.cpp:19:21: note: deduced conflicting types for parameter 'A' ('int&' and 'int')
Translate(in, &out);
Таким образом, компилятор прибегает к первой перегрузке.