컴파일러 경고 C5037
'member-function': 클래스 템플릿 멤버의 out-of-line 정의에는 기본 인수가 포함될 수 없습니다.
설명
기본 인수는 템플릿 클래스에 있는 멤버 함수의 확장 정의에서 허용되지 않습니다. 컴파일러는 아래 /permissive
의 수준 3 경고와 아래의 오류를 /permissive-
실행합니다.
이 경고는 Visual Studio 2017 버전 15.3에서 도입되었습니다. Visual Studio 2017 버전 15.3 이전 버전의 컴파일러에서 경고 없이 컴파일된 코드는 이제 C5037을 생성할 수 있습니다. 특정 컴파일러 버전 이상에서 도입된 경고를 사용하지 않도록 설정하는 방법에 대한 자세한 내용은 컴파일러 버전별 컴파일러 경고를 참조하세요. 컴파일러 옵션 또는 #pragma warning(disable:5037)
.을 /wd:5037
사용하여 사용하지 않도록 설정할 수 있습니다.
예시
이전 버전의 Visual Studio에서는 다음과 같은 잘못된 코드로 인해 잠재적으로 런타임 크래시가 발생할 수 있었습니다. Visual Studio 2017 버전 15.3은 C5037 경고를 생성합니다.
// C5037.cpp
// compile using: cl /c /permissive- C5037.cpp
template <typename T>
struct A {
T f(T t, bool b = false);
};
template <typename T>
T A<T>::f(T t, bool b = false) // C5037: 'A<T>::f': an out-of-line definition of a member of a class template cannot have default arguments
{
// ...
}
오류를 해결하려면 = false
기본 인수를 제거합니다.