OVH Cloud OVH Cloud

Monostate

7 réponses
Avatar
Etienne Rousee
Bonsoir,

Pourquoi le code suivant ne compile-t-il pas (sous VC++ 6.0):

class Monostate
{
public:
template <typename T> T &get()
{
static T member;
return member;
}
};

int main(void)
{
Monostate m1;

m1.get <int> () = 12; // error C2062: type 'int' unexpected

return 0;
}

7 réponses

Avatar
Falk Tannhäuser
Étienne Rousee wrote:
Pourquoi le code suivant ne compile-t-il pas (sous VC++ 6.0):


Je ne vois pas ce qui pourrait poser problème - ça passe avec
gcc et avec Comeau <http://www.comeaucomputing.com/tryitout/>
VC++ 6.0 est probablement trop vieux pour se débrouiller avec
les templates membres...

Falk

Avatar
Gabriel Dos Reis
"Etienne Rousee" writes:

| Bonsoir,
|
| Pourquoi le code suivant ne compile-t-il pas (sous VC++ 6.0):

Compiler bug.

-- Gaby
Avatar
Etienne Rousee
"Falk Tannhäuser" a écrit ...
Je ne vois pas ce qui pourrait poser problème - ça passe avec
gcc et avec Comeau <http://www.comeaucomputing.com/tryitout/>
VC++ 6.0 est probablement trop vieux pour se débrouiller avec
les templates membres...


Effectivement, ça passe avec DevC++4.
Existerait il une modification raisonnable pour le faire avaler pr VC++6.0 ?

--

Etienne

Avatar
Alexandre
bonsoir,

Je ne vois pas ce qui pourrait poser problème - ça passe avec
gcc et avec Comeau <http://www.comeaucomputing.com/tryitout/>
VC++ 6.0 est probablement trop vieux pour se débrouiller avec
les templates membres...


Effectivement, ça passe avec DevC++4.
Existerait il une modification raisonnable pour le faire avaler pr VC++6.0
?

à mon avis rien à part transformer Monostate en template...

template <class T>
class Monostate
{
public:
T &get()
{
static T member;
return member;
}
};

int main(void)
{
Monostate<int> m1;

m1.get () = 12; // error C2062: type 'int' unexpected

return 0;
}

ce qui n'est pas exactement ce que tu voulais, je suppose.


Avatar
James Kanze
Falk Tannhäuser wrote:
Étienne Rousee wrote:


Pourquoi le code suivant ne compile-t-il pas (sous VC++ 6.0):



Je ne vois pas ce qui pourrait poser problème - ça passe avec
gcc et avec Comeau <http://www.comeaucomputing.com/tryitout/>
VC++ 6.0 est probablement trop vieux pour se débrouiller avec
les templates membres...


Ce n'est pas les templates membres en soi (encore que dès qu'on
essaie d'en faire des choses un peu compliquées...), c'est la
notation f<T>() pour appeler une fonction qu'il ne comprend pas.

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
SerGioGio
"Etienne Rousee" a écrit dans le message de
news:41fbccf6$0$25777$
Bonsoir,

Pourquoi le code suivant ne compile-t-il pas (sous VC++ 6.0):

class Monostate
{
public:
template <typename T> T &get()
{
static T member;
return member;
}


Je crains qu en VC6 tu sois obligé de dire:
template <typename T> T &get(const T&)
{
static T member;
return member;
}

};

int main(void)
{
Monostate m1;

m1.get <int> () = 12; // error C2062: type 'int' unexpected



puis:
m1.get(int()) = 12;
m1.get(std::string()) = "toto";

return 0;
}




Par simple curiosité, à quoi peut on utiliser ta classe Monostate et son
membre get?

SerGioGio

Avatar
Etienne Rousee
"SerGioGio" a écrit ...
Bonsoir,

Pourquoi le code suivant ne compile-t-il pas (sous VC++ 6.0):

class Monostate
{
public:
template <typename T> T &get()
{
static T member;
return member;
}


Je crains qu en VC6 tu sois obligé de dire:
template <typename T> T &get(const T&)
{
static T member;
return member;
}

};

int main(void)
{
Monostate m1;

m1.get <int> () = 12; // error C2062: type 'int' unexpected



puis:
m1.get(int()) = 12;
m1.get(std::string()) = "toto";

return 0;
}




Par simple curiosité, à quoi peut on utiliser ta classe Monostate et son
membre get?


Parce que j'ai lu quelque part que le monostate était une alternative
au singleton et que je voulais tester la bête.

--

Etienne