Quote Originally Posted by bkelly View Post
That is why we have dot h files, so the compiler can determine the interfaces before the module is actually compiled.
A very common mistake about header files a compiler to determine something from. Compiler works on every compile unit comprised of .c/.cpp/.cxx with all its inclusions in-lined and macros expanded, nothing more, nothing less. It never "determines" if a type is defined somewhere else, or already met before, instead it literally compiles the resultant compile unit code line by line. To compile, the resultant code must be consistent in order of type declaration appearance.