Great and very helpful article. Only one thing you left unexplained, that's part of the One Definition Rule(ODR). Some things, like types, templates, and extern inline functions, can be defined in more than one translation unit. For a given entity, each definition must be the same. Non-extern objects and functions in different translation units are different entities, even if their names and types are the same. Again, I think this is the best article on this topic one can found on the net. Congratulations.