Попытка вывода аргументов шаблона определить аргументы шаблона (типы для параметров шаблона типа Ti, шаблоны для параметров шаблона шаблона TTi и значения для параметров шаблона, не относящихся к типу Ii), которые можно подставить в каждый параметр P для получения выведенного типа A
Об этом страница, у нас есть этот пример:
Если P является ссылкой rvalue на неквалифицированный параметр шаблона cv (так называемые ссылки пересылки), и соответствующая функция аргументом вызова является lvalue, ссылка типа lvalue на A используется вместо A для вывода (Примечание: это основа для действия std::forward. Примечание: в выводе аргумента шаблона класса параметр шаблона шаблона класса никогда не является ссылкой для пересылки (поскольку C++17)):
Код: Выделить всё
template
int f(T&&); // P is an rvalue reference to cv-unqualified T (forwarding reference)
template
int g(const T&&); // P is an rvalue reference to cv-qualified T (not special)
int main()
{
int i;
int n1 = f(i); // argument is lvalue: calls f(int&) (special case)
int n2 = f(0); // argument is not lvalue: calls f(int&&)
// int n3 = g(i); // error: deduces to g(const int&&), which
// cannot bind an rvalue reference to an lvalue
}
РЕДАКТИРОВАТЬ
Во-первых, нам нужно решить T&&=int для T, 0 равно не lvalue, поэтому нам не нужно заменять int на int&, тогда при выводе мы отбрасываем ссылку в левой части и получаем T=int.< /п>
Подробнее здесь: https://stackoverflow.com/questions/793 ... ument-in-c
Мобильная версия