It's related to an ordinary enum
in that it consists of a set of names for constant values. It's related to a class
in that the names are all contained within the scope of the type's name. So:
enum my_enum {
first,
second,
third
};
my_enum value = second; // OK; enumeration names are in global scope here
enum class my_class_enum {
fourth,
fifth,
sixth
};
my_class_enum other_value = fourth; // Error
my_class_enum another_value = my_class_enum::fourth; // OK