Dans C++ Primer Plus (2001, traduction tchèque), j'ai trouvé ces différentes syntaxes de spécialisation de modèle :
modèle de fonction
template <typename T> void foo(T);
syntaxe de spécialisation
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
En cherchant un peu sur Google, je n'ai trouvé que des exemples n ° 3. Y a-t-il une différence (en appel, compilation, utilisation) entre eux ? Certains d'entre eux sont-ils obsolètes/dépréciés ? Pourquoi ne pas simplement utiliser No.1 ?