다음을 통해 공유


컴파일러 경고(수준 4) C4347

업데이트: 2007년 11월

오류 메시지

동작 변경: 'function template'이(가) 'function' 대신 호출되었습니다.
behavior change: 'function template' is called instead of 'function'

Visual Studio .NET에서는 템플릿 함수가 있고 이 템플릿 함수와 이름이 같은 비템플릿 함수가 있으면 컴파일러에서 비템플릿 함수를 템플릿 함수의 특수화로 잘못 간주합니다.

모든 버전의 Visual C++에서 코드가 똑같은 방식으로 작동하도록 하려면 비템플릿 함수 위에 template<>를 추가하여 실질적인 명시적 특수화로 만드십시오.

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

이 경고는 기본적으로 해제되어 있습니다. 자세한 내용은 기본적으로 해제되어 있는 컴파일러 경고를 참조하십시오.

예제

다음 샘플에서는 C4347 오류가 발생하는 경우를 보여 줍니다.

// C4347.cpp
// compile with: /W4 /EHsc
#pragma warning (default : 4347)

template <typename T>
void f(T t) { T i = t; i = 0; }

void f(int i) { i++; }

// OK
template <typename T>
void f2(T t) { T i = t; i = 0; }

template <>
void f2(int i) { i++; }

int main() {
   f(5);   // regular function call
   f<int>(5);   // C4347 calls implicit instantiation

   f2(5);
   f2<int>(5);
}