Existe-t-il des restrictions/problèmes utilisant un enum comme argument template (type) en C++?Utilisation d'enum comme argument de type de modèle dans C++
Exemple:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
Mon problème réel en utilisant MSVC++ via VS 2008 (SP1) sur Win32/x86 sont plusieurs erreurs de compilation (erreurs = rapportées par le compilateur) en association avec des classes en utilisant les énumérations comme arguments de modèle. Comme mon projet est malheureusement devenu un peu complexe (vous pouvez considérer cela comme une erreur de conception: P), les classes de template qui provoquent ces erreurs sont dérivées, imbriquées et même spécialisées sur une classe avec un paramètre de template enum.
En essayant de construire, le compilateur signale de nombreuses erreurs erronées/inutiles telles que "C2059: erreur de syntaxe: 'public'" dans les lignes où il n'y a qu'un commentaire. Beaucoup d'entre eux je pourrais fixer en remplaçant dans les méthodes semblables à l'exemple le const _t & param par _t (c.-à-d. Copiant le paramètre), mais je ne pourrais pas non plus corriger toutes ces erreurs ". ** Je sais, l'exemple simple ci-dessus compile w/o erreurs.
En utilisant int au lieu de enum, mon projet compile les erreurs sans /.
Merci d'avance pour tout indice ou pourboire!
Modifier:
Après tout, je considère cela comme un sérieux bug du compilateur. Quand j'ai essayé de reproduire les erreurs avec du code simplifié, je les ai seulement dans 50% de tous les "builds", pas très déterministes:
E.g. essayé de compiler, et il a signalé ces erreurs. Reconstruire - pas de changement. Supprimé un commentaire, construire - pas de changement. Reconstruire - et ensuite: pas d'erreurs, compile bien.
J'ai déjà rencontré quelques bugs de compilation (2 ou 3 je suppose dans les 20k lignes de code), mais celui-ci me semble très étrange.
Toutes les suggestions comment savoir si est le compilateur?
"En essayant de construire, le compilateur signale de nombreuses erreurs erronées/inutiles" Ces erreurs "inutiles" ont souvent une description très détaillée de ce qui s'est mal passé. Il suffit de lire la sortie du compilateur au lieu de "liste d'erreurs". – SigTerm
Merci pour l'indice, mais je l'ai fait. Je le fais toujours ^^ Mais cela ne m'a pas aidé ... Erreurs: erreur C2059: erreur de syntaxe: erreur 'public' C2143: erreur de syntaxe: manquant '>' avant ';' erreur C2143: erreur de syntaxe: manquant ';' avant l'erreur fatale '}' C1004: fin de fichier inattendue trouvée (et ensuite d'autres erreurs, non liées à cette question) toutes ces erreurs n'apparaissent que lorsque vous utilisez l'enum et disparaissent en utilisant int – dyp
Cela me semble parfaitement bien . C'est soit une erreur de compilateur ou votre erreur, et si vous allez deviner, le pari de 99,9% est que c'est vous. Mais il n'y a rien de mal avec les extraits que vous avez postés. Veuillez poster un petit échantillon complet en lui-même et les erreurs de compilation exactes qu'il crée. – Omnifarious