The C++0x standard working draft states (section 6.5.4) the following about the begin() and end() calls that are implicit in a range-based for loop:
\
I first reported that this looked like a gcc bug to me. It now appears that even this part of the for-loop specification is unclear, and an inquiry has been opened on the committee.
It still looks like the range-based for-loop rules are going to change very shortly:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3257.pdf
And I'm not sure which option listed in N3257 will be chosen.