oversight with input ranges

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Wed Apr 22 09:10:45 PDT 2015


On Wednesday, 22 April 2015 at 16:02:51 UTC, Steven Schveighoffer 
wrote:
> On 4/21/15 7:31 PM, ketmar wrote:
>> On Tue, 21 Apr 2015 18:57:50 -0400, Steven Schveighoffer wrote:
>>
>>> On 4/21/15 3:53 PM, ketmar wrote:
>>>> here's the interesting oversight for isInputRange:
>>>> https://issues.dlang.org/show_bug.cgi?id=14478
>>>>
>>>> so be careful: ranges with non-copyable elements aren't 
>>>> input ranges
>>>> for now. ;-)
>>>
>>> This does seem like an incorrect limitation, and I'm not sure 
>>> if it was
>>> intentional. However, there is a lot of code out there that 
>>> expects this
>>> to work when isInputRange is true. I don't know if we should 
>>> change it,
>>> as the range definition is pretty clear in the documentation 
>>> that auto h
>>> = r.front is a required feature for ranges. What is the use 
>>> case for
>>> this?
>>
>> one possible use case was shown in bugreport. array of 
>> non-copyable
>> struct, yet i still want chain 'em, for example. or filter. 
>> or...
>>
>> struct S {
>>   int n;
>>   @disable this (this);
>> }
>>
>> void main () {
>>   S[2] arr;
>>   arr[0].n = 1;
>>   arr[1].n = 2;
>>   foreach (ref el; arr[].filter!((ref a) => a.n > 1)) {
>>     writeln(el.n);
>>   }
>> }
>>
>>
>> this code is perfectly valid, it doesn't require copying at 
>> all, yet it
>> is invalid now.
>>
>
> Yes, I agree this is a valid use case. I don't think we can 
> change isInputRange, because other code may depend on that 
> requirement of copyability, but it is probably possible to 
> alter algorithms so they can accept these "not-quite" input 
> ranges. Definitely proxy or decorator type adapters that 
> provide a proxy for front shouldn't be restricted to using only 
> copyable range elements.
>
> 1st step is we need a trait to define what we are looking for, 
> then the next step is to simply alter all the appropriate 
> algorithms to use it. It shouldn't hinder any code that exists 
> if we do that.
>
> So what should be the name of this beast?
>
> -Steve

We could just add a flag as a second argument to isInputRange.


More information about the Digitalmars-d mailing list