В кавычке не указано, что можно оставить только один параметр.
Конечный аргумент шаблона можно не указывать в идентификаторе шаблона с указанием явной специализации шаблона функции при условии, что он может быть выведен из типа аргумента функции.
Означает, что (любой) параметр может быть пропущен, если он может быть выведен. Так что в
template<>
void f(int, double*) { }
Нам не нужно указывать T1
, потому что он может быть выведен из int
, и нам не нужно указывать T2
, потому что он может быть выведен из double*
.
Если бы стандарт позволял не указывать только один параметр, он выглядел бы так:
Один конечный аргумент шаблона можно не указывать в идентификаторе шаблона с указанием явной специализации шаблона функции при условии, что он может быть выведен из типа аргумента функции.