
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 <boost/mpl/vector.hpp> #include <boost/range/begin.hpp> #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 <boost/range/begin.hpp>) and boost::mpl::begin. For now, I resolved it simply by changing the function boost::const_begin like this (in <boost/range/begin.hpp>): 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? -- François Duranleau LIGUM, Université de Montréal "Ne me demandez pas comment ça va, car je vous mentirai." - moi-même