Включение предупреждений, когда функция noexcept пытается вызвать функцию non-noexcept в g cc или clang - PullRequest
0 голосов
/ 10 января 2020

Есть ли в G CC или Clang флаг, который будет выдавать ошибки (или предупреждения) времени компиляции, когда функция, помеченная как noexcept, пытается вызвать функцию , а не , помеченную как noexcept ?

Если нет, то как вы скажете, какие части вашего кода затронуты, когда вы удаляете noexcept из ранее помеченной noexcept функции? разве просто нет пути?

1 Ответ

0 голосов
/ 10 января 2020

Маркировка функции noexcept может иметь смысл, даже если вызываемая функция не помечена. Возьмите простой пример, такой как квадрат root, который может выдать, если вы передадите отрицательное число. При использовании его в функции, которая обеспечивает только вызовы с положительными номерами, вы можете пометить его. То же самое верно, если вы поймаете исключение.

Тем не менее, наличие инструмента для маркировки подозрительных вызовов имеет смысл. Мне известно, что в clang есть предупреждение компилятора об исключении функции noexcept (direct). (См. https://clang.llvm.org/docs/DiagnosticsReference.html#wexceptions). Для моего пользовательского макроса assert, который работает в constexpr, я его подавил, MSV C также работает.

Для косвенного случая, то есть вызова non отмеченная функция, я еще не увидел предупреждение компилятора. Я знаю, что Clangd сообщает об этом, скорее всего, из-за Clang-Tidy. Быстрая проверка на этой странице заставляет меня поверить, что это следующая проверка: https://clang.llvm.org/extra/clang-tidy/checks/bugprone-exception-escape.html

Я не могу сказать о G CC, так как не использую его достаточно.

...