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

Boost C++ Discussion :

BOOST_FOREACH bug ?


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut BOOST_FOREACH bug ?
    Bonjour à tous,

    J'utilise Boost 1.44, et là je tombe sur un truc marrant (ou pas):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::set<std::pair<int, int> > my_set;
    for (auto iter = m_generators.begin(); iter != m_generators.end(); ++iter)
    {
    	const std::vector<std::pair<int, int> >& t = (*iter)->GetTimeStamps();
    	BOOST_FOREACH(const std::pair<int, int>& p, t)
    	{
    		my_set.insert(p);
    	}
    }
    Ca compile pas sous gcc 4.4.3 : 47: error: macro "BOOST_FOREACH" passed 3 arguments, but takes just 2

    Alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::set<std::pair<int, int> > my_set;
    for (auto iter = m_generators.begin(); iter != m_generators.end(); ++iter)
    {
    	const std::vector<std::pair<int, int> >& t = (*iter)->GetTimeStamps();
            typedef std::pair<int,int> pair;
    	BOOST_FOREACH(const pair& p, t)
    	{
    		my_set.insert(p);
    	}
    }
    ça compile !
    J'ai l'impression qu'il prend la virgule de la pair dans le parseur...
    Bug, ou bien y'a un truc qui m'échappe ?

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    ça n'est pas un bug, c'est indiqué sur la doc du site, tu es obligé de déclarer une variable avant BOOST_FOREACH pour certains type complexe comme un type template par exemple

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Oui c'est une macro donc une virgule est prise comme une séparation d'arguments pour la macro.
    Fais un typedef juste avant ?

    MAT.

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Double les parenthèses.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Salut,

    Oui c'est une macro donc une virgule est prise comme une séparation d'arguments pour la macro.
    MAT.
    Ben oui, j'y avais même pas pensé...

    Citation Envoyé par Goten Voir le message
    Double les parenthèses.
    J'utilise le typedef que j'avais mis, c'est plus clair AMHA. Mais merci pour l'idée !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2003, 16h37
  2. Bug new build ??
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 31/01/2003, 10h30

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