Aviso do compilador (nível 1) C4382
lançando 'type': um tipo com destruidor ou construtor de cópia __clrcall só pode ser capturado em módulo /clr:pure
Comentários
A opção do compilador /clr:pure foi preterida no Visual Studio 2015 e está sem suporte no Visual Studio 2017.
Quando compilado com /clr (não /clr:pure), o tratamento de exceção espera que as funções membro em um tipo nativo sejam __cdecl e não __clrcall. Tipos nativos com funções membro usando a convenção de chamada __clrcall
não podem ser capturados em um módulo compilado com /clr.
Se a exceção for capturada em um módulo compilado com /clr:pure, você poderá ignorar esse aviso.
Para obter mais informações, consulte /clr (compilação de Common Language Runtime).
Exemplo
O exemplo a seguir gera o erro 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
}