다음을 통해 공유


컴파일러 경고(수준 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
}