It must be driven by actual problems and its features should be useful immediately in real world programmes.
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 organising programmes 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 have been explicitly asked for by the programmer).
Make user created types have equal support and performance to built in types.
Any features that you do not use you do not pay for (e.g. in performance).
There should be no language beneath C++ (except assembly language).