Boost logo

Boost Users :

From: François Duranleau (duranlef_at_[hidden])
Date: 2006-01-22 01:12:07


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

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net