Compartilhar via


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
}