Meyers suggests us to view c++ as a federation of languages since a rule may apply to one sub-language but not others. It is easier and more straight forward to treat c++ as a set of sub-languages.
- C: Blocks, statements, the preprocessor, built-in data types, arrays, pointers, etc.
- Object-Oriented C++: Classes, encapsulation, inheritance, polymorphism, virtual functions, etc.
- Template C++: Template metaprogramming(TMP). It’s not uncommon for rules of good programming to include special template-only clauses.
- The STL: The STL has particular ways of doing things, and when you’re working with the STL, you need to be sure to follow its conventions.
Reference:
["Effective C++" Third Edition by Scott Meyers.](http://aristeia.com/books.html)