Throughout C++'s life, its development and evolution has been informally governed by a set of rules that its evolution should follow:
* It must be driven by actual problems and its features should be useful immediately in real world programs.
* Every feature should be implementable (with a reasonably obvious way to do so).
* Programmers should be free to pick their own programming style, and that style should be fully supported by C++.
* Allowing a useful feature is more important than preventing every possible misuse of C++.
* It should provide facilities for organizing programs into well-defined separate parts, and provide facilities for combining separately developed parts.
* No implicit violations of the type system (but allow explicit violations; that is, those explicitly requested by the programmer).
* User-created types need to have the same support and performance as built-in types.
* Unused features should not negatively impact created executables (e.g. in lower performance).
* There should be no language beneath C++ (except assembly language).
* If the programmer's intent is unknown, allow the programmer to specify it by providing manual control.