Partilhar via


Aviso do compilador (nível 4) C4843

'type1': Um manipulador de exceção de referência a matriz ou tipo de função está inacessível, use 'type2' em vez disso

Observações

Os manipuladores de referência a matriz ou tipo de função nunca são uma correspondência para qualquer objeto de exceção. A partir da versão 15.5 do Visual Studio 2017, o compilador respeita essa regra e gera um aviso de nível 4. Ele também não corresponde mais a um manipulador de ou wchar_t* a um literal de cadeia de char* caracteres quando /Zc:strictStrings é usado.

Este aviso é novo no Visual Studio 2017 versão 15.5. Para obter informações sobre como desativar avisos por versão do compilador, consulte Avisos do compilador por versão do compilador.

Example

Este exemplo mostra várias catch instruções que causam 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
}

O compilador gera estes avisos:

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

O código a seguir evita o erro:

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