In Effective C++ (3rd edition), Scott Meyers, in Item 31, suggests that classes should have, on top of their classic Declaration (.h) and Definition (.cpp) files, a Forward
Placing a simple class Whatever; in its own header has no advantages and lots of disadvantages.
Especially in the case where accessing a header can be time consuming, one uses simple forward declarations to avoid accessing headers; putting them in their own headers would defeat the purpose...
With templated things, as you note, it's a different matter. E.g. check out from the standard library.
Cheers & hth.