
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<std::vector<T> > { typedef std::string type; std::string make(std::vector<T> const& arg){ return "<vector>"; } }; } --John