Да, может. Такие шаблоны называются вариативными.
Они используют синтаксис упаковки и распаковки параметров:
typename... Args или T... args. Многоточие ... указывает, что за ним следует пак параметров шаблона или пак аргументов функции.func(args...) или Template<Args...> в теле другого шаблона. Многоточие ... здесь означает распаковку пака в отдельные элементы.Примером может служить реализация функции печати с переменным числом аргументов, схожей с printf:
cpp
В данном примере шаблон print рекурсивно обрабатывает аргументы: первый аргумент value обрабатывается, а оставшиеся аргументы Args... args передаются рекурсивным вызовом функции print(args...). Базовый случай void print() останавливает рекурсию, когда аргументы заканчиваются.