Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
writes:
Mais si ces classes sont templatées, la compilation avec gcc produit une erreur:
-------------
template < typename T > class A { public: typedef int Foo; };
template < typename T > class B : public A<T> { Foo i; };
-------------
Est-ce une erreur de gcc, ou bien est-ce interdit par le standard? Dans ce dernier cas, quelle en est la raison?
gcc a raison.
Pour que Foo soit cherche dans des bases dependantes de parametre template (comme A<T> l'est, ce serait la meme chose si c'etait avec T), il faut que Foo soit un nom dependant. Donc tu dois utiliser B::Foo
ou
A<T>::Foo
Mais alors tu vas tomber sur un autre probleme. Les noms dependants ne sont consideres comme des types (ou des templates) que si tu les precedes de typename (ou template). Donc
typename B::Foo i;
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
pascal.cathier@gmail.com writes:
Mais si ces classes sont templatées, la compilation avec gcc produit
une erreur:
-------------
template < typename T >
class A
{
public:
typedef int Foo;
};
template < typename T >
class B : public A<T>
{
Foo i;
};
-------------
Est-ce une erreur de gcc, ou bien est-ce interdit par le standard?
Dans ce dernier cas, quelle en est la raison?
gcc a raison.
Pour que Foo soit cherche dans des bases dependantes de parametre
template (comme A<T> l'est, ce serait la meme chose si c'etait avec
T), il faut que Foo soit un nom dependant. Donc tu dois utiliser
B::Foo
ou
A<T>::Foo
Mais alors tu vas tomber sur un autre probleme. Les noms dependants
ne sont consideres comme des types (ou des templates) que si tu les
precedes de typename (ou template). Donc
typename B::Foo i;
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
Mais si ces classes sont templatées, la compilation avec gcc produit une erreur:
-------------
template < typename T > class A { public: typedef int Foo; };
template < typename T > class B : public A<T> { Foo i; };
-------------
Est-ce une erreur de gcc, ou bien est-ce interdit par le standard? Dans ce dernier cas, quelle en est la raison?
gcc a raison.
Pour que Foo soit cherche dans des bases dependantes de parametre template (comme A<T> l'est, ce serait la meme chose si c'etait avec T), il faut que Foo soit un nom dependant. Donc tu dois utiliser B::Foo
ou
A<T>::Foo
Mais alors tu vas tomber sur un autre probleme. Les noms dependants ne sont consideres comme des types (ou des templates) que si tu les precedes de typename (ou template). Donc
typename B::Foo i;
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
Dimitri PAPADOPOULOS-ORFANOS
Bonjour,
Est-ce une erreur de gcc, ou bien est-ce interdit par le standard? Dans ce dernier cas, quelle en est la raison?
Il me semble que c'est lié à une question que j'avais déjà posée dans ce newsgroup : http://groups.google.fr/group/fr.comp.lang.c++/browse_thread/thread/efac2e9fc7e003bf/69ffb4440c6a0482
-- Dimitri
Bonjour,
Est-ce une erreur de gcc, ou bien est-ce interdit par le standard? Dans
ce dernier cas, quelle en est la raison?
Il me semble que c'est lié à une question que j'avais déjà posée dans ce
newsgroup :
http://groups.google.fr/group/fr.comp.lang.c++/browse_thread/thread/efac2e9fc7e003bf/69ffb4440c6a0482
Est-ce une erreur de gcc, ou bien est-ce interdit par le standard? Dans ce dernier cas, quelle en est la raison?
Il me semble que c'est lié à une question que j'avais déjà posée dans ce newsgroup : http://groups.google.fr/group/fr.comp.lang.c++/browse_thread/thread/efac2e9fc7e003bf/69ffb4440c6a0482