Steven Watanabe wrote:
boost::begin could still be used fully qualified and defer to ADL or the basic implemenation, similarly to boost::swap, no?
If there is no overload of begin, the result may be infinite recursion in some cases instead of a compiler error. (although some compilers will emit a warning)
How so? namespace boost { namespace range_detail { template<typename T> ... begin(const T& t) { return t.begin(); } } template<typename T> ... begin(const T& t) { using range_detail::begin; return begin(t); } } (Needs to replace ... with range_iterator<T> variants, add non-const overloads, handle the old range_begin customization point) I don't see how that kind of thing can cause infinite recursion. If there is no overload of begin picked up by ADL, it uses range_detail::begin.