テンプレート・パラメーターは、デフォルトの引き数を持つことができます。
デフォルトのテンプレート引き数のセットは、任意のテンプレートの宣言すべてに累積していきます。
次の例は、このことを示しています。
template<class T, class U = int> class A; template<class T = float, class U> class A; template<class T, class U> class A { public: T x; U y; }; A<> a;
メンバー a.x の型は float で、a.y の型は int です。
デフォルトの引き数を、同じスコープ内の異なる宣言にある、 同じテンプレート・パラメーターに与えることはできません。 例えば、コンパイラーは、次の表記を許可しません。
template<class T = char> class X; template<class T = char> class X { };
あるテンプレート・パラメーターが、デフォルトの引き数を持つ場合、 それに続くテンプレート・パラメーターも、すべてデフォルトの引き数を持つはずです。 例えば、コンパイラーは、次の表記を許可しません。
template<class T = char, class U, class V = int> class X { };
テンプレート・パラメーター U は、デフォルトの引き数が必要です。 あるいは T のデフォルトを除去する必要があります。
テンプレート・パラメーターのスコープは、その宣言のポイントからそのテンプレート定義の終了までです。 つまり、他のテンプレート・パラメーター宣言内のテンプレート・パラメーターの名前、 およびそれらのデフォルトの引き数を使用できるということです。 次の例は、このことを示しています。
template<class T = int> class A; template<class T = float> class B; template<class V, V obj> class C; // a template parameter (T) used as the default argument // to another template parameter (U) template<class T, class U = T> class D { };
関連参照