クラステンプレートの中に入れ子でクラステンプレートを宣言して,クラススコープの外から内側のクラステンプレートの定義を書く書き方.関数テンプレートについても同様.
template<typename T1> class C1 { template<typename T2> class C2; template<typename T2> void f(T2 arg); }; template<typename T1> template<typename T2> class C1<T1>::C2 { // C2の定義 }; template<typename T1> template<typename T2> void C1<T1>::f(T2 arg) { // fの定義 }
ただし,この記法に対応していないコンパイラも多いです.