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?
--
François Duranleau
LIGUM, Université de Montréal
"Ne me demandez pas comment ça va, car je vous mentirai."
- moi-même