Steven Watanabe wrote:
AMDG
John C. Femiani wrote:
What aspect wouldn't work as I expected? Do you mean that overloads of repr that aren't in namespace boost could occlude ::boost::repr? In that case its a lot like ::boost::begin I think.
You do realize that boost::begin is implemented using range_begin which should be defined in the user's namespace, right? http://www.boost.org/doc/libs/1_35_0/libs/range/doc/boost_range.html#method2
Yes, but I thought it worked with std::vector because of the overload of range_begin that is in the boost namespace. A similar strategy would _not_ seem to fix your example though.
It fails for exactly the same reason that overloading operator<< does.
In Christ, Steven
Aaargh., the overload came too late :(
Will this approach using template specialization work?
//in repr.hpp
namespace boost {
template<class T>
struct repr {
typedef T const& type;
T const& make(T const& arg){
return arg;
}
};
template<class T>
typename repr<T>::type make_repr(T const& arg){
return ::boost::repr<T>().make(arg);
}
}
//In some code
namespace boost {
template<class T>
void print(const T& t) {
std::cout << make_repr(t);
}
}
//This is how you make a proxy
namespace boost {
template<class T>
struct repr