web-dev-qa-db-fra.com

ISO C ++ interdit les références directes aux types «enum»

Compte tenu du programme:

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

g++ -c test.cpp fonctionne très bien. Pourtant, 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 avant ici.

31
Vladimir Panteleev

La spécification du type sous-jacent pour une énumération est une fonctionnalité du langage C++ 11. Pour obtenir le code à compiler, vous devez ajouter le commutateur -std=c++11. Cela fonctionne à la fois pour GCC et Clang.

Pour les énumérations en C++ 03, le type intégral sous-jacent est défini par l'implémentation, sauf si les valeurs de l'énumérateur ne peuvent pas tenir dans un entier ou un entier non signé. (Cependant, le compilateur de Microsoft a permis de spécifier le type sous-jacent d'une énumération en tant qu'extension propriétaire depuis VS 2005.)

30
Vladimir Panteleev