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.
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.)