Я использую clang-tidy 10 в проекте, и он ведет себя странно на Windows с MSV C STL. Минимальным примером является следующий:
#include <iostream>
#include <stdexcept>
int main()
{
try {
throw std::runtime_error {"Boom!"};
} catch (...) {
std::cerr << "Unexpected non-exception error!\n";
}
}
Если я скажу включить в него проверку bugprone-exception-escape, это говорит о том, что исключение может быть вызвано в функции 'main'. Однако, если я изменяю потоковую передачу строки на std :: cerr со следующим, то проверка не вызывает жалоб:
std::cerr << "Unexpected non-exception error!\n" << std::flush;
Я предполагаю, что причиной двух последовательных потоковых операций в одной строке является проблема потому что следующее действительно поднимает проблему.
std::cerr << "Unexpected non-exception error!\n";
std::cerr << std::flush;
Я заметил, что clang-tidy не жалуется ни на один из этих примеров на Linux, по крайней мере, если я передам -stdlib = libc ++. Есть ли какая-то странная тонкость, которую я упускаю, или это ошибка в clang-tidy и / или реализации STL MSV C?