Я читаю Шаблоны C ++ (2-е издание), и это фрагмент из книги:
template<typename... Ts, int N>
void f(double (&)[N+1], Ts... ps) {return;}
В книге указано, что приведенное выше объявление бесполезно, поскольку N не может быть указано или выведено.
Я пытаюсь понять, почему что-то вроде следующего является ошибкой:
double arr[2];
f<int, double, 1>(arr, 1, 2.0);
Когда я компилирую фрагмент выше, я получаю сообщение об ошибке, что не существует соответствующей функции для вызова f,
Это прекрасно компилируется
template<typename... Ts, typename T>
void func(T value){};
func(1);
, хотя у меня есть дополнительный параметр после пакета параметров.
Почему мое указание аргументов шаблона явно не соответствует предоставленным аргументам?Пожалуйста, помогите мне понять это.