isInputRange is false for non-copyable types
    Shachar Shemesh 
    shachar at weka.io
       
    Sun Apr 15 04:26:54 UTC 2018
    
    
  
import std.range;
import std.stdio;
struct S {
     int a;
     @disable this(this);
}
void main() {
     writeln(isInputRange!(S[])); // Prints false
}
The reason, as far as I can tell, is that an input range requires that 
we can do:
auto a = ir.front; // Assuming ir isn't empty
That doesn't work for non-copyable types, for obvious reasons.
With that said, that seems more like a deficiency in the input range 
definition than anything. There is no reason we shouldn't be able to 
iterator type operations over non-copyable types.
Shachar
    
    
More information about the Digitalmars-d
mailing list