컴파일러 경고 C5037

'member-function': 클래스 템플릿의 멤버에 대한 아웃 오브 라인 정의는 기본 인수를 가질 수 없습니다.

설명

기본 인수는 템플릿 클래스에 있는 멤버 함수의 확장 정의에서 허용되지 않습니다. 컴파일러는 아래 /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 기본 인수를 제거합니다.