с шаблоны синтаксис специализации


В грунтовки с плюсом (2001, чешский перевод) я нашел эти различные шаблон синтаксис специализации:

function template
template <typename T> void foo(T);
specialization syntax
void foo(int param); // 1void foo<int>(int param); // 2template <> void foo<int>(int param); // 3template <> void foo(int param); // 4template void foo(int param); // 5

Немного погуглив, я нашел только № 3 примеры. Есть ли разница (в вызове, составление, использование) среди них? Некоторые из них устарели/устаревшие? Почему бы просто не использовать № 1?