Concept of a Canonical class in C++