Avertissement du compilateur (niveau 4) C4843
« type1 » : un gestionnaire d'exception de référence à un type tableau ou fonction n'est pas accessible, utilisez « type2 »à la place
Notes
Les gestionnaires de référence au type tableau ou fonction ne sont plus mis en correspondance pour les objets exception. À compter de Visual Studio 2017 version 15.5, le compilateur respecte cette règle et déclenche un avertissement de niveau 4. De plus, il ne met plus en correspondance un gestionnaire de char*
ou wchar_t*
avec un littéral de chaîne quand /Zc:strictStrings
est utilisé.
Cet avertissement est nouveau dans Visual Studio 2017 version 15.5. Pour plus d’informations sur la désactivation des avertissements par version du compilateur, consultez avertissements du compilateur par version du compilateur.
Exemple
Cet exemple montre plusieurs catch
instructions qui provoquent l’erreur C4843 :
// C4843_warning.cpp
// compile by using: cl /EHsc /W4 C4843_warning.cpp
int main()
{
try {
throw "";
}
catch (int (&)[1]) {} // C4843 (This should always be dead code.)
catch (void (&)()) {} // C4843 (This should always be dead code.)
catch (char*) {} // This should not be a match under /Zc:strictStrings
}
Le compilateur génère ces avertissements :
warning C4843: 'int (&)[1]': An exception handler of reference to array or function type is unreachable, use 'int*' instead
warning C4843: 'void (__cdecl &)(void)': An exception handler of reference to array or function type is unreachable, use 'void (__cdecl*)(void)' instead
Le code suivant permet d’éviter cette erreur :
// C4843_fixed.cpp
// compile by using: cl /EHsc /W4 C4843_fixed.cpp
int main()
{
try {
throw "";
}
catch (int (*)[1]) {}
}