- Apply the Liskov-Substitution-Principle (LSP) to both dynamic and static polymorphism.
- Consider concepts (both the C++20 feature and pre-C++20 named template arguments) as the static equivalent of base classes.
- Adhere to the expected behavior of concepts when using templates.
- Communicate the expectations of a concept (in particular for pre-C++20 named template arguments).