Предупреждение компилятора (уровень 1) C4382
создание типа : тип с деструктором __clrcall или конструктором копирования можно поймать только в модуле /clr:pure.
Замечания
Параметр компилятора /clr:pure не рекомендуется использовать в Visual Studio 2015 и не поддерживается в Visual Studio 2017.
При компиляции с /clr (не /clr:pure) обработка исключений ожидает, что функции-члены в собственном типе будут __cdecl и не __clrcall. Собственные типы с функциями-членами с помощью __clrcall
соглашения о вызовах не могут быть пойманы в модуле, скомпилированном с помощью /clr.
Если исключение будет поймано в модуле, скомпилированном с / clr:pure, можно игнорировать это предупреждение.
Дополнительные сведения см. в разделе /clr (компиляция 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
}