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 :

Conflit entre boost::filesystem et GCC


Sujet :

Boost C++

  1. #1
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut Conflit entre boost::filesystem et GCC
    Bonjour tout le monde,

    Le tr1 de GCC et boost::filesystem ne semblent pas faire bon ménage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <tr1/type_traits>
    #include <boost/filesystem/operations.hpp>
     
    int
    main()
    {
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test: main.cpp
    	g++ -o test main.cpp -W -Wall -ansi -pedantic -std=c++0x
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    In file included from main.cpp:2:
    /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/../../../../include/c++/4.4.0/tr1_impl/type_traits: In function ‘bool boost::filesystem::is_empty(const boost::filesystem::path&)’:
    /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/../../../../include/c++/4.4.0/tr1_impl/type_traits:326: erreur: ‘template<class _Tp> struct std::is_empty’ is not a function,
    /usr/include/boost/filesystem/operations.hpp:361: erreur:   conflict with ‘template<class Path> typename boost::enable_if<boost::filesystem::is_basic_path<Path>, bool>::type boost::filesystem::is_empty(const Path&)’
    /usr/include/boost/filesystem/operations.hpp:660: erreur:   in call to ‘is_empty’
    /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/../../../../include/c++/4.4.0/tr1_impl/type_traits: In function ‘bool boost::filesystem::is_empty(const boost::filesystem::wpath&)’:
    /usr/lib/gcc/i686-pc-linux-gnu/4.4.0/../../../../include/c++/4.4.0/tr1_impl/type_traits:326: erreur: ‘template<class _Tp> struct std::is_empty’ is not a function,
    /usr/include/boost/filesystem/operations.hpp:361: erreur:   conflict with ‘template<class Path> typename boost::enable_if<boost::filesystem::is_basic_path<Path>, bool>::type boost::filesystem::is_empty(const Path&)’
    /usr/include/boost/filesystem/operations.hpp:662: erreur:   in call to ‘is_empty’
    make: *** [test] Erreur 1
    Extrait du header incriminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        // VC++ 7.0 and earlier has a serious namespace bug that causes a clash
        // between boost::filesystem::is_empty and the unrelated type trait
        // boost::is_empty.
     
    # if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300
        BOOST_FS_FUNC(bool) is_empty( const Path & ph ) //<-- l'erreur est ici
    # else
        BOOST_FS_FUNC(bool) _is_empty( const Path & ph )
    # endif
    Ma version de GCC est la 4.4.
    À votre avis, de qui vient l'erreur (et à qui faire un rapport de bug) ? Boost ou GCC ?
    C'est tout de même étrange d'avoir un conflit entre deux fonctions de deux namespaces différents. D'autant plus étrange que Visual C++ 7.0 et inférieur aurait un problème similaire…

    Quelqu'un avec un compilo différent peut-il me dire s'il a le même problème ?

    Remarque : J'ai essayé de préfixer le nom de la fonction par un underscore, comme dans le #else, mais ce n'est pas franchement mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    g++ -o test main.cpp -W -Wall -ansi -pedantic
    In file included from main.cpp:2:
    /usr/include/boost/filesystem/operations.hpp: In function ‘bool boost::filesystem::is_empty(const boost::filesystem::path&)’:
    /usr/include/boost/filesystem/operations.hpp:660: erreur: expected primary-expression before ‘>’ token
    /usr/include/boost/filesystem/operations.hpp: In function ‘bool boost::filesystem::is_empty(const boost::filesystem::wpath&)’:
    /usr/include/boost/filesystem/operations.hpp:662: erreur: expected primary-expression before ‘>’ token
    make: *** [test] Erreur 1
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  2. #2
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Bon, apparemment c'était un bug de Boost qui a été corrigé (j'aurais mieux fait d'aller voir là-bas en premier) : https://svn.boost.org/trac/boost/ticket/3008
    Pour ceux qui dépendent d'un dépôt, vous pouvez faire la modif manuellement, il s'agit de quelques caractères à taper.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

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

Discussions similaires

  1. Conflit entre boost et SDL
    Par Kromagg dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 09/03/2010, 21h59
  2. GCC et conflits entre libstdc++.so.5 et 6
    Par tibtib17 dans le forum Linux
    Réponses: 7
    Dernier message: 12/08/2005, 11h43
  3. Conflit entre bases de données
    Par BRODU dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/10/2004, 11h40
  4. conflit entre couleurs
    Par khayyam90 dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/07/2004, 18h00
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

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