Поскольку, когда пакет параметров функции не является последним параметром, пакет параметров шаблона не может быть выведен из него, и он будет проигнорирован путем вычитания аргумента шаблона.
Таким образом, два аргумента 0, 0
сравниваются с , int
, что дает несоответствие.
Правила дедукции, подобные этой, должны охватывать множество особых случаев (например, что происходит, когда два пакета параметров появляются рядом друг с другом). Поскольку пакеты параметров являются новой функцией в C ++ 11, авторы соответствующего предложения разработали правила консервативно.
Обратите внимание, что пакет параметров шаблона завершающего шаблона будет пустым, если он иначе не выводится. Поэтому, когда вы вызываете конструктор с одним аргументом, все будет работать (обратите внимание на разницу в пакете параметров шаблона и в пакете параметров функции здесь. Первый заголовок, последний - нет).