С Coverity начинает распознавать C ++ 11 noexcept
как throw()
,
он вызывает ложные срабатывания в коде, вызывающем сторонние библиотеки
как Boost.
Более того, какой-то код намеренно собирается аварийно завершить работу при исключении
потому что исключение в этом случае неисправимо, не по контракту или ошибка.
Пример отчета Coverity для этого случая:
CID 178772 (# 1 из 1): необработанное исключение (UNCAUGHT_EXCEPT) exn_spec_violation: исключение типа boost :: exception_detail :: clone_impl> выбрасывается, но бросить список throw () не позволяет его выбрасывать. Это приведет к вызову непредвиденной (), которая обычно вызывает terminate ().
Что такое файл моделирования для отправки на сканирование Coverity, чтобы игнорировать noexcept
во всем мире?
Если вы редактируете user_nodefs.h
файл (не существует по умолчанию, на него ссылаются конфиги, должен существовать в том же каталоге, что и ваш coverity_config.xml
) вы можете просто добавить #define noexcept(x)
— это превратится noexcept()
в пустое определение, которое, следовательно, ничего не будет делать.
Рассматривали ли вы возможность использования компонентов для исключения сторонних дефектов из ваших представлений?
Других решений пока нет …