Le morceau de code suivant ne compile pas avec le compilateur GCC 3.4.2. Il
compile cepedant avec les compilateurs de Sun, SGI et GCC 3.3 et 3.5. Je me
demdande donc si c'est un bug du compilateur ou une nouvelle subtilité de
la norme C++ :
foo.cc:7: error: specialization of `template<class T> void nmr::helper()' in
different namespace
foo.cc:5: error: from definition of `template<class T> void nmr::helper()'
AMA, ce que dit § 14.7.3/2, c'est que les 2 variantes de définir 'foo::bar<42>::toto()' sont légales. En revanche, la spécialisation explicite de la classe 'bar' ne pourrait pas apparaître au niveau du namespace global, comme template<> struct foo::bar<42> { void toto(); };
Dans cju7j5$8no$ tu avais l'air de dire que la definition devait aussi se trouver dans le namespace. Maintenant que tu ecris que tant qu'une declaration prealable s'y trouve, la definition peut se trouver dans un namespace englobant nous sommes d'accord.
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
AMA, ce que dit § 14.7.3/2, c'est que les 2 variantes de définir
'foo::bar<42>::toto()' sont légales. En revanche, la spécialisation
explicite de la classe 'bar' ne pourrait pas apparaître au niveau
du namespace global, comme
template<> struct foo::bar<42> { void toto(); };
Dans cju7j5$8no$1@s5.feed.news.oleane.net tu avais l'air de dire que
la definition devait aussi se trouver dans le namespace. Maintenant
que tu ecris que tant qu'une declaration prealable s'y trouve, la
definition peut se trouver dans un namespace englobant nous sommes
d'accord.
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
AMA, ce que dit § 14.7.3/2, c'est que les 2 variantes de définir 'foo::bar<42>::toto()' sont légales. En revanche, la spécialisation explicite de la classe 'bar' ne pourrait pas apparaître au niveau du namespace global, comme template<> struct foo::bar<42> { void toto(); };
Dans cju7j5$8no$ tu avais l'air de dire que la definition devait aussi se trouver dans le namespace. Maintenant que tu ecris que tant qu'une declaration prealable s'y trouve, la definition peut se trouver dans un namespace englobant nous sommes d'accord.
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