
David Abrahams <dave <at> boost-consulting.com> writes:
Thorsten Ottosen <nesotto <at> cs.aau.dk> writes:
hm...what about
if range_begin() can be found in namespaces associated with x.
Not quite right, because range_begin() denotes a function taking no arguments. You really should say
range_begin(x)
because it's an expression; it accounts for default arguments,
right, this is true.
function templates,
specializations are found too, but we don't document what to specialize (eg. boost::range_detail::range_begin())
derived->base conversions, etc.
these won't happen as the default implementation is the one in namespace boost::range_detail which is a function template.
OTOH, isn't that just ADL?
Yes, but the way you described it is just not correct; that's all. Oh, and I suppose an overload of range_begin in the global namespace would be found, provided it was declared before its point of use.
no, it wouldn't: the global namespace is never searched and the default is chosen then, so a bit the same reason that a base class version won't work either. (arguably the base class version should be found, but that's a different story)
That's why something like
range_begin(x) if range_begin(x) is well-formed
is more accurate.
I thinks ADL is the only mechanism that will valid here. So with the change if range_begin(x) can be found by ADL I think we nailed it. This should implicitly account for default arguments, but I don't think we need to mention that. As a related issue, how was everyone feeling about range_begin() instead of boost_range_begin()? -Thorsten