Explizite Spezialisierung von Funktionsvorlagen

In einer Funktionsschablonenspezialisierung ist ein Schablonenargument optional, wenn der Compiler es aus dem Typ der Funktionsargumente ableiten kann. Das folgende Beispiel veranschaulicht dies:
template<class T> class X { };
template<class T> void f(X<T>);
template<> void f(X<int>);
Die explizite Spezialisierung template<> void f(X<int>) ist äquivalent zu template<> void f<int>(X<int>).
Sie können keine Standardfunktionsargumente in einer Deklaration oder einer Definition für Folgendes angeben:
  • Explizite Spezialisierung einer Funktionsschablone
  • Explizite Spezialisierung einer Memberfunktionsschablone
Der Compiler lässt beispielsweise den folgenden Code nicht zu:
template<class T> void f(T a) { };
template<> void f<int>(int a = 5) { };

template<class T> class X {
  void f(T a) { }
};
template<> void X<int>::f(int a = 10) { };
Referenzinformationen