OVH Cloud OVH Cloud

Map et enum

3 réponses
Avatar
Michaël Delva
Bonjour à tous,

le code suivant ne compile pas avec Borland C++ Builder 6:

enum toto { oui = 0,non};

std::map<toto,int> test;

Il met met:

Impossible de créer la spécialisation template depuis '_STL::map<_Key,_Tp,
_Compare,_Alloc>'

J'ai pourtant vu des exemples sur le net où ça se faisait...

3 réponses

Avatar
Arnaud Meurgues
Michaël Delva wrote:

le code suivant ne compile pas avec Borland C++ Builder 6:


Mauvais compilo, changer de compilo... ;)

enum toto { oui = 0,non};

std::map<toto,int> test;

Il met met:

Impossible de créer la spécialisation template depuis '_STL::map<_Key,_Tp,
_Compare,_Alloc>'

J'ai pourtant vu des exemples sur le net où ça se faisait...


Un bon test pour savoir si ça vient du compilo ou du C++, c'est de
tester sur des bons compilateurs C++.
Par exemple ici:
http://www.comeaucomputing.com/tryitout/
Comeau est une bonne référence en ce qui concerne le respect de la norme.

Pour info,
#include <map>
enum toto { oui = 0,non};
std::map<toto,int> test;
passe sans problème.

--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
Mathieu Malaterre
Arnaud Meurgues wrote:
Michaël Delva wrote:

le code suivant ne compile pas avec Borland C++ Builder 6:



Mauvais compilo, changer de compilo... ;)

enum toto { oui = 0,non};

std::map<toto,int> test;

Il met met:

Impossible de créer la spécialisation template depuis
'_STL::map<_Key,_Tp,
_Compare,_Alloc>'

J'ai pourtant vu des exemples sur le net où ça se faisait...



Un bon test pour savoir si ça vient du compilo ou du C++, c'est de
tester sur des bons compilateurs C++.
Par exemple ici:
http://www.comeaucomputing.com/tryitout/
Comeau est une bonne référence en ce qui concerne le respect de la norme.

Pour info,
#include <map>
enum toto { oui = 0,non};
std::map<toto,int> test;
passe sans problème.



g++ 3.3:

void foo(int i)
{
double b[i];
}

passe sans probleme... alors que c'est pas admissible en c++.


Sinon pour ton probleme, le truc qui gene c'est d'utiliser un enum pour
la clef...
Enfin si c'est pour le fun, c'est peut etre qu'il n'y pas d'operateur
'<' definit pour le enum, a moins que ce soit le copy constructor ??

0.02 cents

Mathieu


Avatar
Arnaud Meurgues
Mathieu Malaterre wrote:

Un bon test pour savoir si ça vient du compilo ou du C++, c'est de
tester sur des bons compilateurs C++.
[...]


Comeau est une bonne référence en ce qui concerne le respect de la norme.
g++ 3.3:


void foo(int i)
{
double b[i];
}

passe sans probleme... alors que c'est pas admissible en c++.


Ben oui. C'est pourquoi je recommende un bon compilateur qui fait référence.
En l'occurrence, Comeau donne:

"
Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++

"ComeauTest.c", line 3: error: expression must have a constant value
double b[i];
^

"ComeauTest.c", line 3: warning: variable "b" was declared but never
referenced
double b[i];
^

1 error detected in the compilation of "ComeauTest.c".

In strict mode, with -tused, Compile failed
"

--
Arnaud
(Supprimez les geneurs pour me répondre)