non-global template fix POC WIP

Jonathan Marler johnnymarler at gmail.com
Sun Jan 27 18:13:49 UTC 2019


On Saturday, 26 January 2019 at 12:06:48 UTC, Suleyman wrote:
> I think it's ready for use. I would appreciate it if someone 
> can break it and produce a test case.

I downloaded your branch and created this example that doesn't 
work:
---------------------------------------------------------

import core.stdc.stdio : printf;

struct Adder
{
     int base;
     // works
     uint addBaseCallFunc(alias func)(uint value)
     {
         return func(base + value);
     }

     // these 2 don't work
     uint willNeedThreeContextPtrs(alias func)(uint value)
     {
         int localVar = func(value);
         uint localFunc(uint subValue) { return localVar + 
subValue; }
         return addBaseCallFuncs!(func, localFunc)(value);
     }
     uint addBaseCallFuncs(alias func1, alias func2)(uint value)
     {
         return func2(func1(base + value));
     }
}

void main()
{
     auto adder = Adder(3);

     int offset = 6;
     uint doOffset(uint value) { return offset + value; }

     // works
     printf("%d\n", adder.addBaseCallFunc!doOffset(4));

     // need 3 context pointers (doesn't work)
     printf("%d\n", adder.willNeedThreeContextPtrs!doOffset(4));
}




More information about the Digitalmars-d mailing list