考虑以下程序:
#include <array>
int main() {
throw std::logic_error("hi");
}
在某些 C++ 编译器(或者更确切地说,标准库)中,这可以编译。例如,libstdc++ 8,其中<array>
包含<stdexcept>
。但在其他标准库实现中,例如 libstdc++ 11,则无法编译。
我能让 clang-tidy 警告我这种情况吗?至少相对于标准库来说?
如果没有 - 是否有其他工具(可能不是基于 clang)可以帮助我检测这个问题?
是的,您要查找的支票是
misc-include-cleaner
(链接)。它从 LLVM 17.0.1 开始就有了。你的示例编译失败,因为
error: ‘logic_error’ is not a member of ‘std’
,但我相信这不是你的错,因为这正是我们阻止间接包含的原因。这里有一个示例可以演示如何进行检查,但可能不适合你:我只是使用了
Checks: 'misc-include-cleaner'
默认配置,并且 clang-tidy 说