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

Langage C++ Discussion :

impossible de déduire un parametre template ?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut impossible de déduire un parametre template ?
    Hello ,

    En compilant ce code sous visual (testé sous VC6, VS2005 et VC++2008 express) j'obtiens une erreur précisant que le paramètre template C de la fonction test(...) ne peux pas être déduit. Pourtant je précise explicitement test<T>, donc il ne devrait pas y avoir de processus de déduction...
    Comeau online me dit ok. Donc c'est une bourde de Visual ?

    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
    template<typename T> 
    class IsClassT 
    { 
      private: 
        typedef char One; 
        typedef struct { char a[2]; } Two; 
        template<typename C> static One test(int C::*); 
        template<typename C> static Two test(...); 
      public: 
          enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 }; 
          enum { No = !Yes }; 
    }; 
     
     
    int main()
    {
     
        int i = IsClassT< IsClassT<int> >::Yes;
     
        return 0;
    }

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Salut,

    je vais sans doute dire des bêtises mais le sujet m'intéresse et c'est en se trompant qu'on apprend non?

    Alors, le Commeau précise bien qu'il n'effectue pas la phase de link:
    In strict mode, with -tused, Compile succeeded (but remember, the Comeau online compiler does not link).
    Et il me semble que la spécialisation des templates se fait dans la phase d'édition des liens non?

    Autre chose: dans ton code, je ne vois pas comment le compilo peut choisir le type (mais je n'ai pas tout compris )

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Même genre de raisonnement que pour typename.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(IsClassT<T>::template test<T>(0))
    Mais je ne suis pas sûr de moi à 100% et j'ai la flemme de faire une exégèse. J'ai pas como sur cette ordinateur pour vérifier si ça passe ou pas sans. Ca passe sans avec le compilo d'intel, donc ça ne m'étonnerait pas que ça passe sans avec como aussi. Le template est nécessaire avec g++ 4.1

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Même genre de raisonnement que pour typename.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(IsClassT<T>::template test<T>(0))
    Mais je ne suis pas sûr de moi à 100% et j'ai la flemme de faire une exégèse. J'ai pas como sur cette ordinateur pour vérifier si ça passe ou pas sans. Ca passe sans avec le compilo d'intel, donc ça ne m'étonnerait pas que ça passe sans avec como aussi. Le template est nécessaire avec g++ 4.1
    J'avais bien essayé le template mais sous visual, rien n'y fait, les erreurs restent les mêmes (j'avoue ne jamais avoir réussit à utiliser ce mot clef...).

    Et il me semble que la spécialisation des templates se fait dans la phase d'édition des liens non?
    Il y a bien deux phases, la première qui vérifie la syntaxe du template et la deuxième qui vérifie la sémantique (avec remplacement des paramètres templates par les arguments templates, ce que, je crois, tu appelles spécialisation, en fait c'est l'instanciation , la spécialisation, partielle ou complète, c'est encore autre chose). Mais l'édition des liens ne peux être faite qu'une fois ces deux phases terminées.

Discussions similaires

  1. Impossible de passer un parametre à crystal report à partir de VS2008
    Par s--e--b dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 07/09/2009, 13h15
  2. Plusieurs parametres template
    Par jfouche dans le forum Langage
    Réponses: 11
    Dernier message: 03/05/2009, 13h58
  3. [AJAX] IE6:impossible de recuperer les parametres envoyés par xhr.send (POST)
    Par netmanouch dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 26/06/2008, 09h26
  4. Parametre template et typedef d'une base
    Par NiamorH dans le forum Langage
    Réponses: 4
    Dernier message: 21/11/2007, 03h09
  5. Réponses: 2
    Dernier message: 21/07/2005, 14h20

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