主テンプレートは、
テンプレート引き数リストを持っていません。このリストは、テンプレート・パラメーター・リストに含まれています。
テンプレート・パラメーターを主テンプレートでは指定しているが、部分的特殊化で使用していなければ、 それを部分的特殊化のテンプレート・パラメーター・リストから省略できます。 部分的特殊化の引き数リストの順序は、 主テンプレートの暗黙の引き数リストの順序と同じです。
部分的テンプレート・パラメーターのテンプレート引き数リストでは、 式が ID のみとなる場合を除いて、非型引き数を含む式を持つことはできません。 次の例では、コンパイラーは、最初の部分的特殊化を許可しませんが、2 番目のものは許可します。
template<int I, int J> class X { }; // Invalid partial specialization template<int I> class X <I * 4, I + 3> { }; // Valid partial specialization template <int I> class X <I, I> { };
「非型」テンプレート引き数の型は、部分的特殊化のテンプレート・パラメーターに依存できません。 コンパイラーは、次の部分的特殊化を許可しません。
template<class T, T i> class X { }; // Invalid partial specialization template<class T> class X<T, 25> { };
部分的特殊化のテンプレート引き数リストは、主テンプレートによる暗黙のリストと同じにすることはできません。
部分的特殊化のテンプレート・パラメーター・リストに、デフォルト値を持つことができません。
関連参照