François Duranleau wrote:
Hi!
I started to use more extensively Boost.Mpl recently, and I started as well to get ADL-related compile errors when a template argument is an MPL sequence. I could resolve the conflicts within my own code, but I hit one coming from Boost.Range. Here is a simple example that provokes an error (tested with g++ 4.0.3 and Boost 1.33.1):
#include
#include #include <vector> template < typename T > struct dummy {} ;
void trouble() { typedef dummy< ::boost::mpl::vector< int > > vt ; typedef ::std::vector< const vt* > ct ;
boost::const_begin( ct() ) ; }
The compiler reports a conflict between boost::begin (called by boost::const_begin in
) and boost::mpl::begin. For now, I resolved it simply by changing the function boost::const_begin like this (in
): namespace boost { template< class T > inline BOOST_DEDUCED_TYPENAME range_const_iterator<T>::type const_begin( const T& r ) { return boost::begin( r ); } } ^^^^^^^
Similarly for boost::end. However, if that call was really meant to be resolved through ADL, then it seems to me there is a problem, and I don't know if anything can be done.
Any ideas?
Hi, I maybe already post it. I hear ADL dependent way was rejected. Now that we must always add 'boost::'. It is obviously a bug of Boost.Range... Regards, MB p-stade.sourceforge.net