IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[template] Problème ésotérique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut [template] Problème ésotérique
    Bonjour,

    Je me suis trouvé face à un problème dans du code.
    J'ai réussi à le simplifier à maximum.
    Voici le code :
    Test.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    namespace Bar
    {
            template <class T2>
            T2 f()
            {
                    return T2(0);
            }
    }
     
    void Foo1(float y = Bar::f<float>())
    {
    } 
     
    template <class T>
    void Foo2(float y = Bar::f<float>()) // Ici
    {
    } 
     
    int main()
    {
            Foo1();
            Foo2<int>();
            return 0;
     
    }
    Ca compil avec gcc.

    Ca ne compil pas avec visual studio 2008 et l'erreur est la suivante sur la ligne avec un commentaire
    error C2783: 'T2 Bar::f(void)' : could not deduce template argument for 'T2'

    [Edit] Ca ne compil pas non plus avec Visual studio 2005 [/Edit]

    Où est mon problème ?

    Sachant que :
    Si je mets un float en argument de Foo2 ça compil.
    Si je retire le namespace ça compil.

    Merci.

  2. #2
    Membre chevronné
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Par défaut
    Ca ressemble vraiment à un bug de Visual C++, je ne vois pas d'autre explication car c'est tout à fait standard, surtout si le résultat est différent selon si f est dans un namespace ou pas.

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Je ne suis pas spécialiste des templates, mais il me semble que dans la fonction en question, comme tu n'utilises pas T, tu n'as pas a le déclarer comme argument template. Vérifie voir avec juste template<> ou même sans template? A priori ça compilera sous VS mais je saurais pas dire pour gcc...

  4. #4
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Si je ne déclare pas le T dans la fonction template, ça serai pris par le compilateur comme une spécialisation. Qu'il n'arriverai pas à faire d'ailleurs.
    Et pour le fait de virer le template... Ca change tout le problème. C'est justement si je le retire que ça fonctionne, l'autre fonction le montre (Foo1).
    Je voudrai savoir pourquoi quand la fonction est template ça ne fonctionne pas...

Discussions similaires

  1. [Template] Problème Classe Template
    Par gimpycpu dans le forum Langage
    Réponses: 7
    Dernier message: 23/05/2007, 05h10
  2. Réponses: 9
    Dernier message: 19/05/2007, 15h28
  3. Réponses: 16
    Dernier message: 17/03/2007, 17h31
  4. [template] problème de passage de paramètres
    Par vinny_the_true dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2005, 01h15
  5. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo