Avertissement du compilateur (niveau 4) C4843

'type1' : un gestionnaire d’exceptions de référence au type de tableau ou de fonction n’est pas accessible, utilisez plutôt 'type2'

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]) {}
}