Compilerwarnung (Stufe 4) C4843

'type1': Ein Ausnahmehandler des Verweises auf Array oder Funktionstyp ist nicht erreichbar, verwenden Sie stattdessen 'type2'.

Hinweise

Handler, die auf ein Array oder einen Funktionstyp verweisen, stimmen niemals mit einem Ausnahmeobjekt überein. Ab Visual Studio 2017, Version 15.5, berücksichtigt der Compiler diese Regel und löst eine Warnung der Ebene 4 aus. Auch werden Handler von char* oder wchar_t* nicht mehr einem Zeichenfolgenliteral zugeordnet, wenn /Zc:strictStrings verwendet wird.

Diese Warnung ist neu in Visual Studio 2017, Version 15.5. Informationen zum Deaktivieren von Warnungen nach Compilerversion finden Sie unter Compilerwarnungen nach Compilerversion.

Beispiel

Dieses Beispiel zeigt mehrere catch Anweisungen, die C4843 verursachen:

// 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
}

Der Compiler generiert diese Warnungen:

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

Mit dem folgenden Code wird der Fehler vermieden:

// C4843_fixed.cpp
// compile by using: cl /EHsc /W4 C4843_fixed.cpp
int main()
{
    try {
        throw "";
    }
    catch (int (*)[1]) {}
}