I've read that to make one's custom container work with range-based for loop, "things" need to be in the same namespace. What things need to be in same namespace? The begin-end free functions and the iterator that it returns? Or the begin-end functions and the container passed to them?
begin
and end
need to be in the same namespace as the container/range type (or some other namespace associated with the type), because the range-for
loop is specified to find them only via ADL.
That is assuming of course that you do not use the non-static member function approach, which is also fine for both.
That's all.