Difference between range `save` and copy constructor
    uranuz 
    neuranuz at gmail.com
       
    Sun Feb 16 14:29:11 UTC 2020
    
    
  
On Sunday, 16 February 2020 at 12:38:51 UTC, Jonathan M Davis 
wrote:
> On Sunday, February 16, 2020 3:41:31 AM MST uranuz via 
> Digitalmars-d-learn wrote:
>> I have reread presentation:
>> http://dconf.org/2015/talks/davis.pdf
>> We declare that `pure` input range cannot be `unpoped` and we
>> can't return to the previous position of it later at the time. 
>> So
>> logically there is no sence of copying input range at all. So
>> every Phobos algorithm that declares that it's is working with
>> InputRange must be tested for working with range with disabled
> A range that can't be copied is basically useless. Not only do 
> almost all range-based algorithms take their argumenst by value 
> (and thus copy them), but foreach copies any range that it's 
> given, meaning that if a range isn't copyable, you can't even 
> use it with foreach. And since many range-based algorithms 
> function by wrapping one range with another, the ability to 
> copy ranges is fundamental to most range-based code.
This is working fine with disabled postblit...
import std;
struct SS
{
     @disable this(this); // Disabled copy
     bool _empty = false;
     bool empty() @property {
         return _empty;
     }
     void popFront() {
        _empty = true;
     }
     int front() @property { return 10; }
}
void main()
{
     foreach( it; SS() ) { writeln(it); }
}
Am I missing something?
    
    
More information about the Digitalmars-d-learn
mailing list