Voici un exemple de code ne passant pas la phase de "parsing" sous gcc 3.2.2 mais compilant sous .NET 2003.
[...] A<int> a; a.A<int>::foo<float>();// ok a.foo<float>();// parse error!
a.template foo<float>();
A<T> b; b.A<T>::foo<float>();// parse error!
b.A<T>::template foo<float>(); // pas sûr de celui-ci
b.foo<float>();// parse error!
b.template foo<float>();
Ca fonctionnera avec tous les compilateurs.
Merci à Gabriel Dos Reis qui m'a donné cette solution quand j'avais eu le même problème.
Vincent
-- vmime, une bibliothèque C++ sous licence GPL pour parser et générer des messages au format MIME : http://www.sourceforge.net/projects/vmime/
Marc Boyer
Vincent Richard wrote:
A<int> a; a.A<int>::foo<float>();// ok a.foo<float>();// parse error!
a.template foo<float>();
Mon Dieu... J'ai lu quelques bouquins C++, et je ne me souviens pas avoir jamais vu ça. C'est un bug g++ ou un aspect de C++ qui m'a complètement échappé.
En plus, je dois avoir un problème similaire dans un de me projet en cours (que j'avais remis "à plus tard").
Ca fonctionnera avec tous les compilateurs.
Merci à Gabriel Dos Reis qui m'a donné cette solution quand j'avais eu le même problème.
En relisant la bible, je suis tombé dessus: $C.13.6
Marc Boyer, qui devrait plus lire les annexes -- Lying for having sex or lying for making war? Trust US presidents :-(
Vincent Richard wrote:
A<int> a;
a.A<int>::foo<float>();// ok
a.foo<float>();// parse error!
a.template foo<float>();
Mon Dieu...
J'ai lu quelques bouquins C++, et je ne me souviens
pas avoir jamais vu ça. C'est un bug g++ ou un aspect
de C++ qui m'a complètement échappé.
En plus, je dois avoir un problème similaire dans
un de me projet en cours (que j'avais remis "à plus tard").
Ca fonctionnera avec tous les compilateurs.
Merci à Gabriel Dos Reis qui m'a donné cette solution quand j'avais
eu le même problème.
En relisant la bible, je suis tombé dessus: $C.13.6
Marc Boyer, qui devrait plus lire les annexes
--
Lying for having sex or lying for making war? Trust US presidents :-(
A<int> a; a.A<int>::foo<float>();// ok a.foo<float>();// parse error!
a.template foo<float>();
Mon Dieu... J'ai lu quelques bouquins C++, et je ne me souviens pas avoir jamais vu ça. C'est un bug g++ ou un aspect de C++ qui m'a complètement échappé.
En plus, je dois avoir un problème similaire dans un de me projet en cours (que j'avais remis "à plus tard").
Ca fonctionnera avec tous les compilateurs.
Merci à Gabriel Dos Reis qui m'a donné cette solution quand j'avais eu le même problème.
En relisant la bible, je suis tombé dessus: $C.13.6
Marc Boyer, qui devrait plus lire les annexes -- Lying for having sex or lying for making war? Trust US presidents :-(
Jean-Marc Bourguet
Marc Boyer writes:
Vincent Richard wrote:
A<int> a; a.A<int>::foo<float>();// ok a.foo<float>();// parse error!
a.template foo<float>();
J'ai lu quelques bouquins C++, et je ne me souviens pas avoir jamais vu ça.
De meme qu'il faut utiliser typename avec les noms de types dependants, il faut utilser template avec les noms de template dependant.
A+ -- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Vincent Richard wrote:
A<int> a;
a.A<int>::foo<float>();// ok
a.foo<float>();// parse error!
a.template foo<float>();
J'ai lu quelques bouquins C++, et je ne me souviens
pas avoir jamais vu ça.
De meme qu'il faut utiliser typename avec les noms de types
dependants, il faut utilser template avec les noms de template
dependant.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
A<int> a; a.A<int>::foo<float>();// ok a.foo<float>();// parse error!
a.template foo<float>();
J'ai lu quelques bouquins C++, et je ne me souviens pas avoir jamais vu ça.
De meme qu'il faut utiliser typename avec les noms de types dependants, il faut utilser template avec les noms de template dependant.
A+ -- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Gabriel Dos Reis
Jean-Marc Bourguet writes:
| Marc Boyer writes: | | > Vincent Richard wrote: | > > | > >> A<int> a; | > >> a.A<int>::foo<float>();// ok | > >> a.foo<float>();// parse error! | > > | > > a.template foo<float>(); | > | > J'ai lu quelques bouquins C++, et je ne me souviens | > pas avoir jamais vu ça. | | De meme qu'il faut utiliser typename avec les noms de types | dependants, il faut utilser template avec les noms de template | dependant.
Avec le bémol que dans le cas spécifique sous la main, c'est une déficience du parseur de GCC-3.x, x < 4.
Mais globablement, tu as raison.
-- Gaby
Jean-Marc Bourguet <jm@bourguet.org> writes:
| Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
|
| > Vincent Richard wrote:
| > >
| > >> A<int> a;
| > >> a.A<int>::foo<float>();// ok
| > >> a.foo<float>();// parse error!
| > >
| > > a.template foo<float>();
| >
| > J'ai lu quelques bouquins C++, et je ne me souviens
| > pas avoir jamais vu ça.
|
| De meme qu'il faut utiliser typename avec les noms de types
| dependants, il faut utilser template avec les noms de template
| dependant.
Avec le bémol que dans le cas spécifique sous la main, c'est une
déficience du parseur de GCC-3.x, x < 4.
| Marc Boyer writes: | | > Vincent Richard wrote: | > > | > >> A<int> a; | > >> a.A<int>::foo<float>();// ok | > >> a.foo<float>();// parse error! | > > | > > a.template foo<float>(); | > | > J'ai lu quelques bouquins C++, et je ne me souviens | > pas avoir jamais vu ça. | | De meme qu'il faut utiliser typename avec les noms de types | dependants, il faut utilser template avec les noms de template | dependant.
Avec le bémol que dans le cas spécifique sous la main, c'est une déficience du parseur de GCC-3.x, x < 4.