Philosophy of C++

Throughout C++'s life, its development and evolution has been informally governed by a set of rules that its evolution should follow:[9]

* 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). 

* C++ should work alongside other existing programming languages, rather than fostering its own separate and incompatible programming environment

* If the programmer's intent is unknown, allow the programmer to specify it by providing manual control.