what i dislike about c++ is header files should have the interface under the header, while code files should only have the code to implement the interface
separating this way makes it reasonably easy to go "oh, this part of the codebase is in this interface, so the implementation is in this code file"
but where do c++ templates fall ? they're meant to be consume, they're generating code, they're basically fancy macros, they need to be in the header
but they're also code
congrats! now code has two places where it may be, and the model of the interface and the implementation being separate is broken.