rsp rsp - 20 days ago 7
C++ Question

Is "enum class" a class type or not in C++?

I read about enumeration declaration in C++ using cppreference.

Then I have made Enum class and check whether it is a class type or not using

std::is_class
.

#include <iostream>

enum class Enum
{
red = 1, blue, green
};

int main()
{
std::cout << std::boolalpha;
std::cout << std::is_class<Enum>::value << '\n';
}


Then I compiled and ran in G++ compiler on Linux platform, it prints
false
value.

So Is
enum
class type or not?
If enum is a class type, then why I getting false output?

Answer Source

enum class is not a class definition - the combination of keywords is used to define a scoped enumeration, which is a completely separate entity from a class.

std::is_class correctly returns false here. If you use std::is_enum, it will return true.


From the Standard:

The enumeration type declared with an enum-key of only enum is an unscoped enumeration, and its enumerators are unscoped enumerators. The enum-keys enum class and enum struct are semantically equivalent; an enumeration type declared with one of these is a scoped enumeration, and its enumerators are scoped enumerators.

There is no mention of an enum class being a class type anywhere.