Condividi tramite


Avviso del compilatore (livello 4) C4843

'type1': un gestore eccezioni di riferimento alla matrice o al tipo di funzione non è raggiungibile, usare invece 'type2'

Osservazioni:

I gestori del riferimento al tipo di matrice o di funzione non sono mai una corrispondenza per gli oggetti eccezione. A partire da Visual Studio 2017 versione 15.5, il compilatore rispetta questa regola e genera un avviso di livello 4. Non corrisponde più a un gestore di char* o wchar_t* a un valore letterale stringa quando /Zc:strictStrings viene usato.

Questo avviso è una novità di Visual Studio 2017 versione 15.5. Per informazioni su come disabilitare gli avvisi in base alla versione del compilatore, vedere Avvisi del compilatore per versione del compilatore.

Esempio

Questo esempio mostra diverse catch istruzioni che causano 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
}

Il compilatore genera questi avvisi:

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

Il codice seguente consente di evitare l'errore:

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