Range-based for loop: why is ordinary lookup not performed?

111 Views Asked by At

In range-based for when begin-expr and end-expr are begin(range) and end(range), the names begin and end are not looked up using ordinary lookup. Just ADL is performed. See C++23 [stmt.ranged]#1.3.3.

Why is ordinary lookup skipped?

1

There are 1 best solutions below

0
Davis Herring On

Because for types without member begin/end the following would be silly:

void accum(std::valarray<int> &v,int begin=0) {
  for(auto &x : v) x=begin+=x;  // error: cannot call expression of type 'int'
}