| Avoid implicit conversions from class templates to non-dependent types as this ensures that clients cannot bypass the class interface. |
| Do not define a class template with potentially conflicting methods. |
| Only instantiate templates with template arguments which fulfill the interface requirements of the 'template'. |
| Only use templates when the behaviour of the class or function template is completely independent of the type of object to which it is applied. |