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