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