В C++ Primer Plus (2001, чешский перевод) я нашел такие разные синтаксисы специализации шаблонов:
function template
template <typename T> void foo(T);
specialization syntax
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?