다음을 통해 공유


컴파일러 오류 C2912

업데이트: 2007년 11월

오류 메시지

명시적 특수화. 'declaration'이(가) 함수 템플릿의 특수화가 아닙니다.
explicit specialization; 'declaration' is not a specialization of a function 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에서 수행한 컴파일러 규칙 작업의 결과로 발생할 수도 있습니다. 모든 명시적 특수화에 대해 기본 템플릿의 매개 변수와 일치하도록 명시적 특수화의 매개 변수를 선택해야 합니다.

자세한 내용은 컴파일 타임의 주요 변경 내용 요약을 참조하십시오.

// 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) {}
};