I would like to create a composite type out of two enum classes.
enum classes
enum class Color {RED, GREEN, BLUE}; enum class Shape {SQUARE, CIRCLE, TRIANGLE};
You don't need a linear index, you can simply compare them lexicographically:
friend bool operator< (const Object &lhs, const Object &rhs) { if (lhs.color < rhs.color) return true; else if (lhs.color > rhs.color) return false; else return lhs.shape < rhs.shape; }