On Thursday, 1 October 2015 at 05:47:25 UTC, Eric Niebler wrote:
On Thursday, 1 October 2015 at 04:08:00 UTC, bitwise wrote:
I understand, but the C++ committee seems very conservative to
me, so when it's this easy to add for(:) support by giving
ranges begin()/end() functions, it makes me doubt they will
actually change the language for it.
As of C++11, C++ has the for(auto e:range) control structure
you are looking for. I would be using it here except for one
thing: in my proposal, begin() and end() don't have to return
objects of the same type! begin() must return an iterator and
end() must return something that is EqualityComparable with the
iterator -- but it doesn't have to be an iterator. That makes
many types of iterators vastly simpler to implement and more
efficient at runtime.
C++'s built-in range-based for(:) loop expects begin() and
end() to return objects of the same type. The committee is
already talking about loosening that constraint so that the
ranges I'm proposing Just Work with the existing built-in
looping construct. Until then, there is an ugly macro. It's a
temporary hack, nothing more.
Hope that clears things up.
Eric
That's good news !
P.S. I see lots of people here assuming that C++ is playing
catch-up to D because D has ranges and C++ doesn't yet. That is
ignoring the long history of ranges in C++. C++ got ranges in
the form of the Boost.Range library by Thorsten Ottoson
sometime in the early 00's. Andrei didn't implement D's ranges
until many years after. The ranges idea is older than dirt.
It's not a D invention.
Well, yes and no. Sure I'm sure there are precedent for ranges,
be it in C++ or even I'm sure one can find them in other
languages. I'm sure someone in the 70s had something like ranges
already.
But for years, it was a fringe idea in the C++ world, the
consensus being the iterator were enough. Meanwhile, D adopted
the idea and ran with it, doing so, proving how powerful the
concept is.
Some may be bitter, but I'm actually happy that C++ is adopting
ranges, as these are a great tool. As long as the Jobs "we
reinvented hot water with shiny corners and it is a revolution"
style of presenting things do not become the norm. On that note,
I think Herb's pissed of a lot of people with his talk. On the
other hand, I think you did a fine job.