Partilhar via


Aviso do compilador (nível 4) C4843

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

Comentários

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

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

Exemplo

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