Sorting a zipped range

Ben Jones fake at fake.fake
Thu Feb 27 13:28:48 PST 2014


On Thursday, 27 February 2014 at 21:24:20 UTC, Tobias Pankrath 
wrote:
> On Thursday, 27 February 2014 at 21:09:45 UTC, Ben Jones wrote:
>
>> My question is:  which features of the D range abstraction 
>> allow zip to work the way we expect?  What C++isms were left 
>> behind to make this work?
>
> Many items in std.algorithm / std.range make use of static if 
> to provide the most capable return types. I.e. if you zip to RA 
> ranges than zip will return a random access range, too.
>
> See 
> https://github.com/D-Programming-Language/phobos/blob/master/std/range.d#L4988

That can be done in C++ too (albeit less elgantly) with tag 
dispatch or enable if, or whatever.  The big issue I ran into was 
dealing with the semantics of iterator dereferencing.  I'm not 
sure anyone has come up with a way to define an iterator whose 
dereference operator returns a reference type when dealing with a 
zipped range in C++.

It seems that somehow D's range abstraction avoids that issues 
somehow, but I don't quite understand how.


More information about the Digitalmars-d-learn mailing list