!!AVISO LEGAL!! Eu trabalho em uma ferramenta comercial de análise estática (não PC Lint). !!AVISO LEGAL!!
Existem vários problemas com uma abordagem simples de não análise:
1) Conjuntos de sobrecarga:
É possível que uma função sobrecarregada tenha declarações provenientes de arquivos diferentes. Pode ser que a remoção de um arquivo de cabeçalho resulte na escolha de uma sobrecarga diferente, em vez de um erro de compilação! O resultado será uma mudança silenciosa na semântica que pode ser muito difícil de rastrear depois.
2) Especializações de modelo:
Semelhante ao exemplo de sobrecarga, se você tiver especializações parciais ou explícitas para um modelo, deseja que todas elas fiquem visíveis quando o modelo for usado. Pode ser que as especializações para o modelo principal estejam em arquivos de cabeçalho diferentes. Remover o cabeçalho com a especialização não causará um erro de compilação, mas pode resultar em um comportamento indefinido se a especialização tivesse sido selecionada. (Veja: Visibilidade da especialização de template da função C ++ )
Conforme apontado por 'msalters', realizar uma análise completa do código também permite a análise do uso da classe. Ao verificar como uma classe é usada através de um caminho específico de arquivos, é possível que a definição da classe (e, portanto, todas as suas dependências) possa ser removida completamente ou pelo menos movida para um nível mais próximo da fonte principal no include árvore.