ISO c++ interdit les références à des types "enum"

étant donné le programme:

enum E : int
{
    A, B, C
};

g++ -c test.cpp fonctionne très bien. Cependant, clang++ -c test.cpp donne les erreurs suivantes:

test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types
enum E : int
     ^
test.cpp:1:8: error: expected unqualified-id
enum E : int
       ^
2 errors generated.

ces messages d'erreur n'ont aucun sens pour moi. Je ne vois aucune référence directe ici.

28
demandé sur Vladimir Panteleev 2016-08-05 00:29:39

1 réponses

spécifier le type sous-jacent d'un enum est une fonctionnalité de langage C++11. Pour obtenir le code à compiler, vous devez ajouter le commutateur -std=c++11. Cela fonctionne pour GCC et Clang.

pour les enums en C++03, le type intégral sous-jacent est implémentation-defined, sauf si les valeurs de l'énumérateur ne peuvent pas s'insérer dans un int ou un int non signé. (Cependant, le compilateur de Microsoft a permis de spécifier le type sous-jacent d'un enum comme extension propriétaire depuis VS 2005.)

28
répondu Vladimir Panteleev 2016-08-18 11:23:48