More tricky range semantics

Tobias Pankrath via Digitalmars-d digitalmars-d at puremagic.com
Fri Jan 16 10:34:08 PST 2015


On Friday, 16 January 2015 at 18:12:03 UTC, Joseph Rushton 
Wakeling wrote:
> On Friday, 16 January 2015 at 17:22:42 UTC, Tobias Pankrath 
> wrote:
>> Ah, now I understand you. Since copy-construction is undefined 
>> for ForwardRanges, you cannot guarantee this. Things would be 
>> better, if we had required that this(this) does the same as 
>> .save or must be @disabled.
>
> I'm not sure I follow what you mean by this ... ?

If you pass a forward range of type T (something that passes 
isForwardRange!T) to a function you have no guarantees on what 
will happen. It could be:

     • compilation failure
     • reference semantics (changes are reflected outside the 
function
     • value semantics (no change are reflected outside the 
function)

The implementer of the range can choose one. Although I tried it 
now, and @disable this(this) does prevent isForwardRange!T to 
pass. I don't know if that changed recently or is just out of 
line with the documentation/specification.




More information about the Digitalmars-d mailing list