コンパイラーは、クラス・テンプレート特殊化のテンプレート引き数と、
主テンプレートおよび部分的特殊化のテンプレート引き数リストを突き合わせて、
主テンプレートを使用するのか、その部分的特殊化の 1 つを使用するのかを判別します。
- コンパイラーが特殊化を 1 つだけ検出する場合、コンパイラーは、その特殊化から定義を生成します。
- コンパイラーが複数の特殊化を検出する場合、コンパイラーは、
どの特殊化が最も特殊化されているのかを判別します。
X からの特殊化と一致する引き数リストは、どれも Y
からの特殊化と一致するが、その逆では一致しないという場合は、テンプレート X は、テンプレート
Y よりもさらに特殊化されています。コンパイラーが最も特殊化された特殊化を検出できない場合は、
クラス・テンプレートの使用は、あいまいになります。
つまり、コンパイラーは、プログラムを許可しません。
- コンパイラーがどのような一致も検出しない場合、
コンパイラーは、主テンプレートから定義を生成します。
関連参照
