[cfe-dev] C++11 reverse iterators (was C++11 is here)

Duncan P. N. Exon Smith dexonsmith at apple.com
Tue Mar 4 20:07:48 PST 2014


On 2014 Mar 2, at 22:27, Chandler Carruth <chandlerc at google.com> wrote:

> 
> On Sun, Mar 2, 2014 at 10:13 PM, Saleem Abdulrasool <compnerd at compnerd.org> wrote:
> On Sun, Mar 2, 2014 at 9:26 PM, Chris Lattner <sabre at nondot.org> wrote:
> 
> On Mar 2, 2014, at 8:53 PM, Renato Golin <renato.golin at linaro.org> wrote:
> 
> > On 3 March 2014 12:32, Pete Cooper <peter_cooper at apple.com> wrote:
> >> Would those work with a foreach construct? Perhaps I forgot to mention that was what I'm trying to work out here.
> >>
> >> In example 3 I was wondering if we could define a method reverse(). We could use sfinae to wrap that around rbegin/rend if people like that style?
> >
> > Sorry, I was too terse... ;)
> >
> > If MF is a reverse_iterator, it'd just work, no? But to get the
> > reverse iterator, I think reverse() would be the best general pattern,
> > since you can adapt it to each container needs.
> 
> I'm not aware of the prior art or standards are here, but I think that a global reverse() adapter is the way to go.  Likewise, we should have a standard "enumerate()" adaptor like python.
> 
> I definitely prefer the global adaptor pattern.  As for prior art, I had played with it a bit, and came up with https://gist.github.com/compnerd/5694186 a while back.
> 
> Yea, there is a pretty strong move toward range adaptors. If possible, I'm going to work on contributing a basic selection of them to LLVM's ADT specifically to address the immediate needs of range-based for loops.

There’s a decent selection of range adaptors in Boost.Range [1].  I’m not sure the license [2] allows copying the source (IANAL), but any reason not use the same names?  I don’t see any reason to reinvent the wheel here.

[1]: http://www.boost.org/doc/libs/1_55_0/libs/range/doc/html/range/reference/adaptors/reference.html
[2]: http://www.boost.org/users/license.html



More information about the cfe-dev mailing list