This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [C++0x] Range-based for statements and ADL
On 25 March 2011 10:13, Rodrigo Rivas wrote:
>
> But now I'm a bit concerned about the complexity of this issue. Mind
> me, I think that this solution is nice, but maybe it is a burden for
> library implementors.
>
> Let's say that I want to imitate 'exactly' the behavior of the
> range-for, but with a plain old for (there are plenty of reasons for
> that):
> template<typename C> void foo(C &c)
> {
> ? ?auto _b = begin(c);
> ? ?auto _e = end(c);
> ? ?for (auto _i = _b; _i != _e; ++_i)
> ? ?{
> ? ? ? ?auto _e = *_i;
> ? ? ? ?//do stuff
> ? ?}
> }
>
> But this will fail sometimes for the reasons stated in N3257. If I
> change the first line to:
> ? auto _b = c.begin();
> it will fail in a lot of different cases.
> So I'm forced to write a pair of functions, let's name them
> 'range_begin/range_end' with a lot of SFINAE tricks to mimic the
> range-for behavior. And there are a lot of subtleties and magic in the
> range-for specification that makes that a hard work, if at all
> possible.
>
> IMHO, it would be much easier if the standard library provided these
> functions for me. Before, I considered that was what
> std::begin/std::end did, but now...
It's FAR too late - do you want a new standard today or next year?
If you want something that behaves like range-for use range-for.
Or just don't use range-for, it's not essential (given the trouble
it's caused I'd quite happily have lived without it in C++0x!)