
Neil Groves wrote:
However in this case I have yet to understand the nature of the underlying problem, because there isn't an obvious unqualified call to begin/end. The reverse adaptor uses qualified calls that can't possibly be ambiguous with std::begin/end. I haven't yet checked to see if unqualified calls to begin/end are intended to be used as an extension mechanism for the next C++ standard.
Here is the standard: Range-Based For Loop Wording (Without Concepts) http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html Its summary is: A range-based for for (auto x : range_expr) { // do something } is equivalent to { // Special rule: namespace std is added to rng's associated namespaces auto&& rng = range_expr; for ( // Note: unqualified begin/end function call auto it = begin(rng), it_end = end(rng); it != it_end; ++it ) { auto x = *it; // do something } } Note that rng has namespace std as its associated namespaces and the unqualified begin/end function call triggers ADL.
I shall put begin and end in an ADL barrier namespace anyhow, since these are explicitly designed to be qualified when called.
That would be Great, Neil! This is an important issue. Regards, Michel