`clang-include-cleaner` suggest to include header with forward declaration when headers with base/derived classes should be enough. `clang-tidy misc-include-cleaner` output: ``` clang-tidy -checks="-*,misc-include-cleaner" Forward.cpp 4 warnings generated. Forward.cpp:3:39: warning: no header providing "detail::Forward" is directly included [misc-include-cleaner] 2 | 3 | void Test::do_something(const detail::Forward& /*forward*/) | ^ ``` I tried `clang-include-cleaner` from `main` (7d8b4eb0ead277f41ff69525ed807f9f6e227f37). Base class header file (`Base.h`): ``` #pragma once namespace detail { class Forward; } class Base { public: virtual void do_something(const detail::Forward& forward); }; ``` Header file (`Forward.h`): ``` #pragma once #include "Base.h" class Test : public Base { public: void do_something(const detail::Forward& forward) override; }; ``` Source file (`Forward.cpp`): ``` #include "Forward.h" void Test::do_something(const detail::Forward& /*forward*/) { } ```