Advertencia del compilador (nivel 4) C4843
"type1": no se puede acceder a un controlador de excepciones de referencia a un tipo de función o matriz; use "type2" en su lugar
Comentarios
Los controladores de las referencias a un tipo de matriz o función no coinciden nunca con ningún objeto de excepción. A partir de la versión 15.5 de Visual Studio 2017, el compilador respeta esta regla y genera una advertencia de nivel 4. Además, ya no coincide con un controlador de char*
o wchar_t*
en un literal de cadena cuando se usa /Zc:strictStrings
.
Esta advertencia es nueva en Visual Studio 2017, versión 15.5. Para información sobre cómo deshabilitar las advertencias por versión del compilador, consulte Advertencias del compilador por versión del compilador.
Ejemplo
En este ejemplo, se muestra varias instrucciones catch
que generan la advertencia 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
}
El compilador genera estas advertencias:
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
Este código evita el error:
// C4843_fixed.cpp
// compile by using: cl /EHsc /W4 C4843_fixed.cpp
int main()
{
try {
throw "";
}
catch (int (*)[1]) {}
}