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:
1 2 3 4 5 6 7 8
|
#include <tr1/type_traits>
#include <boost/filesystem/operations.hpp>
int
main()
{
} |
Code:
1 2 3
|
test: main.cpp
g++ -o test main.cpp -W -Wall -ansi -pedantic -std=c++0x |
Code:
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:
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:
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 |