Avertissement du compilateur (niveau 1) C4382
lève 'type' : un type avec __clrcall destructeur ou constructeur de copie ne peut être intercepté que dans /clr :pure module
Notes
L’option /clr :pure compiler est déconseillée dans Visual Studio 2015 et non prise en charge dans Visual Studio 2017.
Lorsqu’elle est compilée avec /clr (pas /clr :pure), la gestion des exceptions s’attend à ce que les fonctions membres d’un type natif soient __cdecl et non __clrcall. Les types natifs avec des fonctions membres utilisant __clrcall
la convention d’appel ne peuvent pas être interceptés dans un module compilé avec /clr.
Si l’exception est interceptée dans un module compilé avec /clr :pure, vous pouvez ignorer cet avertissement.
Pour plus d’informations, consultez l’article /clr (Compilation pour le Common Language Runtime).
Exemple
L’exemple suivant génère l’erreur 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
}