OVH Cloud OVH Cloud

typename pour sous classes

3 réponses
Avatar
Loïc Joly
Bonjour à tous,

J'ai un problème pour compiler le code suivant sous VC8 beta 1 :

template <class T, class U>
struct B
{};

template <class T>
struct A : public B <T, typename T::subtype::subtype> // ligne 7
{
};

struct T1
{
typedef int subtype;
};

struct T2
{
typedef T1 subtype;
};

int main()
{
A<T2> a; // ligne 23
};


Si je remplace
struct A : public B <T, typename T::subtype::subtype>
par
struct A : public B <T, typename T::subtype>

Là, il veut bien compiler.

Est-ce un problème dans le code, ou bien dans le compilo ?



Pour info, les messages d'erreur :

TestTemplate.cpp(7) : error C2143: syntax error : missing ',' before
'T1::{ctor}'
TestTemplate.cpp(23) : see reference to class template instantiation
'A<T>' being compiled
with
[
T=T2
]
TestTemplate.cpp(7) : error C2976: 'B' : too few template arguments
TestTemplate.cpp(4) : see declaration of 'B'
TestTemplate.cpp(8) : error C2955: 'B' : use of class template requires
template argument list
TestTemplate.cpp(4) : see declaration of 'B'
TestTemplate.cpp(23) : error C2512: 'A<T>' : no appropriate default
constructor available
with
[
T=T2
]

--
Loïc

3 réponses

Avatar
Jean-Marc Bourguet
Loïc Joly writes:

Est-ce un problème dans le code, ou bien dans le compilo ?


Ni como 4.3.3, ni icc 8.1, ni g++ 4.0 ne se plaignent et
j'ai l'impression qu'ils ont raison.

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

Avatar
Cyrille
Loïc Joly writes:


Est-ce un problème dans le code, ou bien dans le compilo ?



Ni como 4.3.3, ni icc 8.1, ni g++ 4.0 ne se plaignent


La beta 2 de VC8 compile aussi sans rechigner. Un bug de la beta 1 qui a
été corrigé, sans doute.

j'ai l'impression qu'ils ont raison.


itou.

--
win the yes need the no to win against the no!


Avatar
Loïc Joly

Loïc Joly writes:


Est-ce un problème dans le code, ou bien dans le compilo ?




Ni como 4.3.3, ni icc 8.1, ni g++ 4.0 ne se plaignent



La beta 2 de VC8 compile aussi sans rechigner. Un bug de la beta 1 qui a
été corrigé, sans doute.


Merci, je viens d'installer la béta 2, et ça marche effectivement !

--
Loïc