Considere o seguinte programa:
#include <array>
int main() {
throw std::logic_error("hi");
}
Com alguns compiladores C++ (ou melhor, bibliotecas padrão), isso compila. Por exemplo, libstdc++ 8, onde <array>
inclui <stdexcept>
. Mas em outras implementações de bibliotecas padrão, como libstdc++ 11, isso não compila.
Posso usar o clang-tity para me avisar sobre essas situações? Pelo menos em relação à biblioteca padrão?
Caso contrário, existe outra ferramenta, talvez não baseada em clang, que possa me ajudar a detectar esse problema?
Sim, o cheque que você está procurando é
misc-include-cleaner
( link ). Ele está lá desde o LLVM 17.0.1.Seu exemplo não compila porque
error: ‘logic_error’ is not a member of ‘std’
, mas acredito que não seja um erro seu, pois é exatamente por isso que evitamos inclusões indiretas. Aqui está um que demonstra a verificação para mim — e talvez não para você:Acabei de usar
Checks: 'misc-include-cleaner'
a configuração padrão e o clang-tidy diz