Range-based for statement definition redundancy
Looking at n3092, in §6.5.4 we find the equivalency for a range-based for loop. It then goes on to say what __begin and __end are equal to. It differentiates between arrays and other types, and I find this redundant (aka confusing). It says for arrays types that __begin and __end are what you expect: a pointer to the first and a pointer to one-past the end. Then for other types, __begin and __end are equal to begin(__range) and end(__range) , with ADL. Namespace std is associated, in order to find the std::begin and std::end defined in <iterator> , §24.6.5. However, if we look at the