В C ++ 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 примера. Есть ли разница между ними (в вызове, компиляции, использовании)? Некоторые из них устарели / устарели? Почему бы просто не использовать № 1?