コンパイラ エラー C2912
更新 : 2007 年 11 月
エラー メッセージ
明示的な特殊化; 'declaration' は関数テンプレートの特殊化ではありません。
template 宣言がない関数は特化できません。
次の例では C2912 エラーが生成されます。
// C2912.cpp
// compile with: /c
void f(char);
template<> void f(char); // C2912
template<class T> void f(T); // OK
このエラーは、Visual Studio .NET 2003 で行ったコンパイラ準拠作業の結果として生成されることもあります。すべての明示的な特化で、そのパラメータとしてプライマリ テンプレートのパラメータと一致するパラメータを選択する必要があります。
詳細については、「Summary of Compile-Time Breaking Changes」を参照してください。
// C2912b.cpp
class CF {
public:
template <class A> CF(const A& a) {} // primary template
// attempted explicit specialization
template <> CF(const char* p) {} // C2912
// try the following line instead
// template <> CF(const char& p) {}
};