OVH Cloud OVH Cloud

Problème de compil d'une spécialisation de fonction template

1 réponse
Avatar
Charles Brossollet
Bonjour,

soit la fonction template suivante :

template <class T>
void fonction(const T& expected,
const typename T::value_type& delta)
{
/**/
}

Si je veux la sp=E9cialiser pour std::vector, j'=E9cris (par exemple)

template <>
void fonction(const std::vector<double>& expected,
const std::vector<double>::value_type& delta)
{
/**/
}

Il me semble que la syntaxe est bonne, car Comeau online compile
bien...
Mais visual 7.1 me dit :
error C2912: sp=E9cialisation explicite ; 'void fonction(const
std::vector<_Ty> &,const std::vector<_Ty>::value_type &)' n'est pas une
sp=E9cialisation d'un mod=E8le de fonction with [_Ty=3Ddouble]

Sans le T::typename, pas de probl=E8me bien s=FBr.
Qui a raison??
Merci d'avance!

1 réponse

Avatar
Falk Tannhäuser
Charles Brossollet wrote:

Sans le T::typename, pas de problème bien sûr.
Qui a raison??


gcc 3.4.4 l'accepte aussi.
Est-ce que le fait de mettre "typename T::value_type const&"
à la place de "const typename T::value_type&" change quelque
chose ? (Je ne vois pas pourquoi mais on sait jamais...)

Qu'est-ce qui se passe lorsque tu remplaces
"std::vector<double>::value_type" par "double" >

Sinon, une simple surcharge au lieu de la spécialisation
(omettre le "template<>") fait-elle l'affaire ?

Falk