Dela via


Kompilatorvarning (nivå 4) C4843

"type1": En undantagshanterare för referens till matris eller funktionstyp kan inte nås, använd "type2" i stället

Anmärkningar

Hanterare av referens till matris eller funktionstyp matchar aldrig något undantagsobjekt. Från och med Visual Studio 2017 version 15.5 följer kompilatorn den här regeln och genererar en varning på nivå 4. Den matchar inte längre en hanterare av char* eller wchar_t* till en strängliteral när /Zc:strictStrings den används.

Den här varningen är ny i Visual Studio 2017 version 15.5. Information om hur du inaktiverar varningar efter kompilatorversion finns i Kompilatorvarningar efter kompilatorversion.

Example

Det här exemplet visar flera catch instruktioner som orsakar 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
}

Kompilatorn genererar följande varningar:

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

Följande kod undviker felet:

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