Всякий раз, когда компилятор может вывести аргументы шаблона из аргументов функции, можно не указывать их. Это также хорошая практика, поскольку она облегчит чтение вашего кода.
Кроме того, вы можете оставить только аргументы шаблона конца, а не начала или середины:
template<typename T, typename U> void f(T t) {}
template<typename T, typename U> void g(U u) {}
int main() {
f<int>(5); // NOT LEGAL
f<int, int>(5); // LEGAL
g<int>(5); // LEGAL
g<int, int>(5); // LEGAL
return 0;
}