Overview
How begin and end are used in range-for statements.
The rules (from TC++PL4)
The expression after the colon must denote a sequence (a range); that is, it must yield a value for which we can call v.begin() and v.end() or begin(v) and end(v) to obtain iterators (§4.5):
- the compiler first looks for members
beginandendand tries to use those. If abeginor anendis found that cannot be used as a range (e.g., because a memberbeginis a variable rather than a function), the range-foris an error. - Otherwise, the compiler looks for a
begin/endmember pair in the enclosing scope. If none is found or if what is found cannot be used (e.g., because thebegindid not take an argument of the sequence’s type), the range-foris an error.
Add more regarding standard library header <iterator>.