컴파일러 경고(수준 1) C4382
'type' throw: __clrcall 소멸자 또는 복사 생성자가 있는 형식은 /clr:pure 모듈에서만 catch할 수 있습니다.
설명
/clr:pure 컴파일러 옵션은 Visual Studio 2015에서 더 이상 사용되지 않으며 Visual Studio 2017에서는 지원되지 않습니다.
/clr:pure가 아닌 /clr로 컴파일된 경우 예외 처리에서는 네이티브 형식의 멤버 함수가 __clrcall 아니라 __cdecl 것으로 예상합니다. 호출 규칙을 사용하는 __clrcall
멤버 함수가 있는 네이티브 형식은 /clr로 컴파일된 모듈에서 catch할 수 없습니다.
/clr:pure로 컴파일된 모듈에서 예외가 catch되는 경우 이 경고를 무시할 수 있습니다.
자세한 내용은 /clr(공용 언어 런타임 컴파일)을 참조하세요.
예시
다음 샘플에서는 C4382를 생성합니다.
// C4382.cpp
// compile with: /clr /W1 /c
struct S {
__clrcall ~S() {}
};
struct T {
~T() {}
};
int main() {
S s;
throw s; // C4382
S * ps = &s;
throw ps; // OK
T t;
throw t; // OK
}