doute sur les templates

Le
Ploc
Bonjour,

Dans un programme, j'ai quelque chose de ce style:

class A {
public:
template<typename T> f(const T& arg1, const T& arg2);

void doSomeStuf();
}

void A::doSomeStuf()
{

f<string>("toto", "to");

}



Ce code compile et fonctionne bien sur SUN, mais mon compilateur PC (ms,
mais je ne sais plus quelle version) me le refuse avec un message du
style 'can not use string as command' (ou a peu près).

Est-ce que j'ai bénificié des largesses de sun studio, ou est-ce que le
compilateur PC est vraiment trop mauvais (*)?




(*) c'est celui qui refuse ce genre de code:
for (int i= 0; i<2; i++);
for (int i= 0; i<2; i++); // i already defined


Ploc.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvain
Le #312038
Ploc wrote on 26/09/2007 22:54:

Ce code compile et fonctionne bien sur SUN, mais mon compilateur PC (ms,
mais je ne sais plus quelle version) me le refuse avec un message du
style 'can not use string as command' (ou a peu près).

Est-ce que j'ai bénificié des largesses de sun studio, ou est-ce que le
compilateur PC est vraiment trop mauvais (*)?
(*) c'est celui qui refuse ce genre de code:
for (int i= 0; i<2; i++);
for (int i= 0; i<2; i++); // i already defined


cette non-conformité a été corrigé très récemment, dont la version 2005.
VC6 (98) a ce bug et supporte très mal les templates.
VC2003 corrige certains trucs et en empire d'autres.

vous n'utilisez donc certainement pas VC2005, je vous recommande de
faire un test avec (en commençant par la version "légère" gratuite).

Sylvain.

Fabien LE LEZ
Le #312037
On Wed, 26 Sep 2007 22:54:07 +0200, Ploc :

Ce code compile et fonctionne bien sur SUN, mais mon compilateur PC (ms,
mais je ne sais plus quelle version) me le refuse


Essaie avec Comeau.

Ils ne sont manifestement pas doués en HTML, mais leur compilateur
fait référence en matière de conformance au standard.

James Kanze
Le #312036
On Sep 26, 10:54 pm, Ploc
Dans un programme, j'ai quelque chose de ce style:

class A {
public:
template<typename T> f(const T& arg1, const T& arg2);

void doSomeStuf();
}

void A::doSomeStuf()
{
...
f<string>("toto", "to");
...
}

Ce code compile et fonctionne bien sur SUN, mais mon
compilateur PC (ms, mais je ne sais plus quelle version) me le
refuse avec un message du style 'can not use string as
command' (ou a peu près).


Si c'est VC++ 6.0, c'est normal. Le compilateur a vu le jour
avant que la syntaxe fonction<templateParam>... existait.

Quant à la version, il suffit en général d'invoquer le
compilateur sans l'option /nologo pour la voir, je crois. C'est
au moins le cas avec la version 8 (celle de Visual Studios 2005,
bien qu'il affiche la version 14.00.50727.42 pour le
compilateur, aller savoir ce que ça signifie), et d'après mes
souvenirs, aussi pour VC++ 6.0.

Est-ce que j'ai bénificié des largesses de sun studio, ou
est-ce que le compilateur PC est vraiment trop mauvais (*)?


La norme C++98 l'autorise (en supposant que "string" nomme un
type, ici). C'était quelque chose qui a été ajouté par le comité
par rapport à ce qui se faisait avant, en revanche, ce qui veut
dire en gros que tu ne peux y compter que dans les compilateurs
qui ont apparu peut-être cinq ans après, plus ou moins. (Et
encore. Le comité a ajouté "export", aussi, mais il y a encore
bien de compilateurs qui ne l'implemente pas.)

(*) c'est celui qui refuse ce genre de code:
for (int i= 0; i<2; i++);
for (int i= 0; i<2; i++); // i already defined


Ça pourrait être n'importe laquelle entre 1.0 et 6.0, et
peut-être même après.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Ploc
Le #312034
Sylvain wrote:
Ploc wrote on 26/09/2007 22:54:

Ce code compile et fonctionne bien sur SUN, mais mon compilateur PC
(ms, mais je ne sais plus quelle version) me le refuse avec un message
du style 'can not use string as command' (ou a peu près).

Est-ce que j'ai bénificié des largesses de sun studio, ou est-ce que
le compilateur PC est vraiment trop mauvais (*)?
(*) c'est celui qui refuse ce genre de code:
for (int i= 0; i<2; i++);
for (int i= 0; i<2; i++); // i already defined


cette non-conformité a été corrigé très récemment, dont la version 2005.
VC6 (98) a ce bug et supporte très mal les templates.
VC2003 corrige certains trucs et en empire d'autres.

vous n'utilisez donc certainement pas VC2005, je vous recommande de
faire un test avec (en commençant par la version "légère" gratuite).

Sylvain.


Merci pour cette confirmation.

Il me semble bien qu'il s'agit de VC6 et malheureusement je n'ai pas la
liberté d'en changer (contrainte professionnelle).


Merci à tous les contributeurs pour les réponses.


Publicité
Poster une réponse
Anonyme