Предупреждение компилятора (уровень 4) C4843
"type1": обработчик исключений ссылки на массив или тип функции недоступен, вместо этого используйте "type2"
Замечания
Обработчики ссылок на тип массива или функции никогда не соответствуют никаким объектам исключений. Начиная с Visual Studio 2017 версии 15.5 компилятор учитывает это правило и вызывает предупреждение уровня 4. Он также больше не соответствует обработчику char*
или wchar_t*
в строковом литерале, если используется /Zc:strictStrings
.
Это предупреждение новое в Visual Studio 2017 версии 15.5. Сведения об отключении предупреждений по версии компилятора см. в предупреждениях компилятора по версии компилятора.
Пример
В этом примере показаны несколько catch
операторов, вызывающих 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
}
Компилятор создает следующие предупреждения:
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
Следующий код позволяет избежать этой ошибки:
// C4843_fixed.cpp
// compile by using: cl /EHsc /W4 C4843_fixed.cpp
int main()
{
try {
throw "";
}
catch (int (*)[1]) {}
}