isInputRange is false for non-copyable types

ag0aep6g anonymous at example.com
Mon Apr 16 05:49:41 UTC 2018


On 04/16/2018 06:15 AM, Shachar Shemesh wrote:
> Input ranges provide no guarantees about copying the range itself. If 
> you do it and expect *anything* (which it seems you do), you have a bug. 
> If you need to copy the range itself, you absolutely need to require a 
> forward range.
> 
> A forward range with ref front absolutely promises that both iterations 
> reference the same elements.
> 
> I find myself sincerely hoping that you are making these examples up in 
> order to win this discussion turned into an argument for some reason, 
> instead of the way phobos is actually written, because if you're right 
> phobos is *broken*.
> 
> The good news is that if Phobos is broken, this is a great way to flush 
> out the places it's broken. Let's add UTs calling all Phobos functions 
> accepting input ranges (as opposed to forward ranges) with non-copyable 
> ranges (i.e. - the range itself is non-copyable) and fix the compilation 
> errors. This shouldn't take more than a few days to do.

I'm currently attempting something similar: fix Phobos to work with 
RefRange. RefRange is copyable, but assignment is weird. Assignment 
isn't part of the range interface, so I'm replacing it with `move`:

https://issues.dlang.org/show_bug.cgi?id=18657
https://github.com/dlang/phobos/pull/6346

That PR doesn't fix all of Phobos, it's just a start. Going over all of 
Phobos (and getting it merged) might take a while.

Thinking about it, those `move`s probably fix the code for non-copyable 
ranges as well. There might be considerable overlap here.


More information about the Digitalmars-d mailing list