I've done this manually and its worth it in the short (Oh, is it the long term? - It takes a long time) term due to reduced compile time:
- Less headers to parse for each cpp file.
- Less dependencies - the whole world doesn't need re-compiling after a
change to one header.
Its also a recursive process - each header file that stays in needs examining to see if any header files it includes can be removed. Plus sometimes you can substitute forward declarations for header includes.
Then the whole process needs repeating every few months/year to keep on top of leftover headers.
Actually, I'm a bit annoyed with C++ compilers, they should be able to tell you what's not needed - the Microsoft compiler can tell you when a change to a header file can be safely ignored during compilation.