| Organise 'class' definitions by access level, in the following order : 'public', 'protected', 'private'. |
| Define class type variables using direct initialisation rather than copy initialisation. |
| Declare or define a copy constructor, a copy assignment operator and a destructor for classes which manage resources. |
| Use an atomic, non-throwing swap operation to implement the copy-assignment operator ('operator=') |
| Ensure copy assignment is implemented correctly in terms of self assignment, inheritance, resource management and behaves consistently with the built in assignment operator. |
| Do not inline virtual functions. |
| Do not use the 'inline' keyword for member functions, inline functions by defining them in the class body. |
| Declare 'const' any class member function that does not modify the externally visible state of the object. |
| Behaviour should be implemented by only one member function in a class. |
| Do not declare conversion operators to fundamental types. |
| Do not provide conversion operators for class types. |
| Provide an output operator ('operator<<') for ostream for all classes. |
| Verify that all classes provide a minimal standard interface against a checklist comprising: a default constructor; a copy constructor; a copy assignment operator and a destructor. |