Implementing tail-const in D
    Simen Kjærås 
    simen.kjaras at gmail.com
       
    Thu Jan 25 00:01:51 UTC 2018
    
    
  
On Tuesday, 23 January 2018 at 14:55:39 UTC, Simen Kjærås wrote:
> auto map(alias fn, R)(R r) if (isInputRange!(HeadMutable!R))
> {
>     // Pass head-mutable versions to MapResult.
>     return MapResult!(fn, HeadMutable!R)(headMutable(r));
> }
Another thing that I didn't think of when writing the above code 
was how this works with a mutating lambda:
unittest {
     const a = [1,2,3,4].map!((ref v) => v*=2);
     HeadMutable!(typeof(a)) b; // static assert  "No head-mutable 
type for const(MapResult!(__lambda1, int[]))"
}
Which makes sense - there is no way to make a head-mutable 
version of a from itself - it would break the constness 
guarantees.
--
   Biotronic
    
    
More information about the Digitalmars-d
mailing list