Я немного растерялся, читая вывод аргумента шаблона для спецификации функции .
Я ищу некоторое представление о том, как работает сопоставление с образцом.Например:
template <typename T>
void foo(T& t);
// **--------P (T&)
const int& a = ...;
foo(a);
// *----- A (const int&)
Как указывает следующий ответ :
(i) Если A
является ссылкой, игнорируйте ссылочную часть (ii)затем сопоставьте шаблон A
с P
, чтобы определить T
.
Но как это делается и работает ли это.Я ссылаюсь на этот раздел :
Если P имеет одну из форм, включающую список параметров шаблона или, затем каждый элемент Pi этого списка аргументов шаблона сопоставляется с соответствующим аргументом шаблона Ai его A .Если последний Pi является расширением пакета, то его шаблон сравнивается с каждым оставшимся аргументом в списке аргументов шаблона A .
что мне совершенно не понятно ...