J'ai récemment mis à niveau mon projet de Visual Studio 2008 vers Visual Studio 2010.Pourquoi est-ce que je reçois CA1806 quand j'attrape une exception dans C++/CLI?
En activant l'analyse de code et la compilation dans Release, j'obtiens l'avertissement CA1806: N'ignorez pas les résultats de la méthode.
J'ai réussi à réduire le code qui produit l'avertissement à ce code:
.h:
public ref class Foo
{
public:
void Bar();
};
fichier .cpp:
void Foo::Bar()
{
try
{
}
catch (const std::exception&) // here I get the warning
{
}
}
l'avertissement:
CA1806: Microsoft.Utilisation: 'Foo :: Bar (void)' appelle 'Global :: __ CxxRegisterExceptionObject (void *, void *)' mais n'utilise pas le code HRESULT ou le code d'erreur renvoyé par la méthode. Cela peut entraîner un comportement inattendu dans des conditions d'erreur ou des situations à faible ressource. Utilisez le résultat dans une instruction conditionnelle , affectez le résultat à une variable ou passez-le comme argument à une autre méthode.
Si je tente d'utiliser la valeur d'exception ou faire catch(...)
l'avertissement encore apparaît. Si j'attrape les exceptions gérées à la place ou si je compile dans Debug, je n'obtiens pas l'avertissement.
Pourquoi j'obtiens cet avertissement?
MISE À JOUR
J'ai décidé d'ouvrir a bug report on Microsoft Connect.
Cela ressemble à un bug. – SLaks