|
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