В С++ Primer Plus (2001, чешский перевод) Я нашел эти различные синтаксисы специализации шаблонов:
шаблон функции
template <typename T> void foo(T);
синтаксис специализации
void foo(int param); // 1
void foo<int>(int param); // 2
template <> void foo<int>(int param); // 3
template <> void foo(int param); // 4
template void foo(int param); // 5
Попутно, я нашел только примеры №3. Есть ли разница между ними (в вызове, компиляции, использовании)? Некоторые из них устарели/устарели? Почему бы просто не использовать No.1?