При условии, что следующий код в глобальной области видимости clang-tidy не выдает предупреждение:
auto test = []{};
Однако при выполнении следующих действий:
#include <tuple>
auto test = []{
std::tuple t{1, 2, 3};
};
<source>:3:6: warning: initialization of 'test' with static storage duration may throw an exception that cannot be caught [cert-err58-cpp]
auto test = []{
^
/opt/compiler-explorer/gcc-8.2.0/lib/gcc/x86_64-linux-gnu/8.2.0/../../../../include/c++/8.2.0/tuple:646:19: note: possibly throwing constructor declared here
constexpr tuple(_UElements&&... __elements)
^
Маркировка лямбды как noexcept
не помогает.
Однако я не понимаю, почему это может быть проблемой.Исключение может возникнуть только теоретически, когда вызывает лямбду, не так ли?
Следующий код не приводит к появлению предупреждения:
auto test = [] {
throw 0;
};
Is clang- неправильно или я что-то упустил?