Отличий нет вообще.Если у вас нет причин предоставлять информацию о типе функции, последняя является лучшей.Но вы можете захотеть, чтобы ваша функция обрабатывала аргументы, как если бы они были заданного типа, только тогда, если вам нужно <>.Например,
T Divide(T a, T b)
{
return a/b;
}
Если вы позвоните в Divide (5,2), вы получите 2. Только такие случаи, если вы укажете тип:
Divide<float>(5,2);
Возвращает 2,5.