38 votes

L'ISO C++ interdit les références directes aux 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 à l'avenir.

0 votes

Pour info, GCC compile maintenant (à partir de 5 ou 6) avec std=c++14 par défaut, alors que Clang utilise toujours std=c++98 AFAIK.

2 votes

Je pense que cela aiderait si vous incluiez les versions et les options du compilateur.

0 votes

Versions du compilateur (plus transcription complète du shell pour les personnes suggérant que mon code source réel ne correspond pas à celui de la question) : dump.thecybershadow.net/6bf06811a8f77fce574017622d1dd8e7/…

36voto

CyberShadow Points 13244

La spécification du type sous-jacent d'un enum est une fonctionnalité du langage C++11. Pour que le code compile, 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, à moins que les valeurs de l'énumérateur ne puissent pas tenir dans un int ou un unsigned int. (Cependant, le compilateur de Microsoft permet de spécifier le type sous-jacent d'une énumération comme une extension propriétaire depuis VS 2005).

2 votes

Vous avez raison : si vous compilez avec l'option -std=c++11 cela fonctionne ( Démonstration en ligne,filterAsm:(commentOnly:!t,directives:!t,labels:!t),version:3) ). Avec gcc plus ancien que 6, vous recevez un avertissement explicite. Avec gcc 6, il n'est pas nécessaire d'utiliser le drapeau std.

2 votes

@Christophe : C'est à dire : avec gcc 6, ils l'ont (enfin) changé pour compiler C++11 par défaut, et exiger un changement pour se conformer aux anciennes normes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X