Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2673. MISRA. An empty throw should only occur within the compound-statement of a catch handler.

30 Июл 2026

Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Правило актуально только для C++.

Анализатор обнаружил, что throw-выражение не имеет операнда (проброс активного исключения) и не находится внутри catch-блока. Такой код может являться ошибочным. Нахождение конструкции throw; вне явных синтаксических границ обработчика catch сигнализирует о высокой вероятности дефекта. Если этот код выполнится в тот момент, когда в программе нет активного исключения, это приведёт к вызову std::terminate и аварийному завершению работы программы.

Рассмотрим пример некорректного кода:

try
{
  if (ok)
    return ....;

  throw;
}
catch (...)
{
}

В данном примере throw-выражение исполняется внутри блока try, где ещё нет пойманного исключения. Так как объект исключения для проброса отсутствует, выполнение этого кода приведёт к вызову std::terminate.

Корректный вариант кода:

try
{
  if (ok)
    return ...;

  throw some_exception(....);
}
catch (...)
{
}

Ты поймал бага за сек!
А мы в коде ловим их за доли секунды. Хочешь проверить?

Попробовать бесплатно