¿Es “clase de enumeración” un tipo de clase en C ++?

Leí sobre la statement de enumeración en C ++ usando cppreference .

Luego he hecho la clase Enum y verifico si es un tipo de clase o no usando std::is_class .

 #include  enum class Enum { red = 1, blue, green }; int main() { std::cout << std::boolalpha; std::cout << std::is_class::value << '\n'; } 

Luego compilé y ejecuté el comstackdor G ++ en la plataforma Linux, imprime valor false .

Entonces, ¿es el tipo de clase enum o no? Si enum es un tipo de clase, ¿por qué obtengo un valor falso ?

enum class no es una definición de class ; la combinación de palabras clave se utiliza para definir una enumeración de ámbito , que es una entidad completamente separada de una class .

std::is_class devuelve correctamente false aquí. Si usa std::is_enum , devolverá true .


De la norma :

El tipo de enumeración declarado con una clave de enum de solo enum es una enumeración sin ámbito, y sus enumeradores son enumeradores sin ámbito. La enum-keys enum class y enum struct son semánticamente equivalentes; un tipo de enumeración declarado con uno de estos es una enumeración de ámbito, y sus enumeradores son enumeradores de ámbito.

No se menciona que una enum class sea ​​un “tipo de class en ninguna parte del Estándar.

A pesar de la palabra clave de class , las enumeraciones no son clases. Esa palabra clave solo significa que los enumeradores deben respetar ciertas reglas de scope (y también evita las conversiones integrales implícitas).

La elección de la palabra clave se debe a los aspectos provocados por el nuevo tipo 1 y la forma en que los enumeradores de ámbito se piratearon en la era anterior a C ++ 11 para obtener dichos aspectos:

 struct Enum { // could just as well be a class. enum { red = 1, blue, green }; }; 

Lo que solo permitía el acceso a los enumeradores a través del nombre calificado. Aunque no impidió las conversiones implícitas como lo hacen las verdaderas enumeraciones de ámbito.

is_class está destinado a identificar los tipos agregados de clase / estructura.


1 B. Stroustrup – C ++ 11 Preguntas frecuentes