Синтаксис специализации шаблонов C++

В 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?

49
задан Jan Turoň 29 November 2011 в 23:08
поделиться