コンパイラの警告 (レベル 1) C4382
'type' をスローします: __clrcall デストラクターを伴う型、またはコピー コンストラクターは /clr:pure モジュールでのみキャッチできます
解説
/clr:pure コンパイラ オプションは Visual Studio 2015 では非推奨とされており、Visual Studio 2017 ではサポートされていません。
(/clr:pure ではなく) /clr でコンパイルされている場合、例外処理では、ネイティブ型のメンバー関数が __clrcall ではなく __cdecl であることが想定されます。 __clrcall
呼び出し規約が使用されているメンバー関数を持つネイティブ型は、/clr でコンパイルされたモジュール内ではキャッチできません。
/clr:pure を指定してコンパイルされたモジュールで例外がキャッチされる場合は、この警告を無視してもかまいません。
詳細については、「/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
}