#dbugfix Issue 16486 200$

jmh530 john.michael.hall at gmail.com
Fri Mar 30 15:21:26 UTC 2018


On Friday, 30 March 2018 at 13:56:45 UTC, Stefan Koch wrote:
> On Friday, 30 March 2018 at 06:11:22 UTC, 9il wrote:
>> [1] https://issues.dlang.org/show_bug.cgi?id=16486
>
>
> Ah that is an interesting bug which further demonstrates that 
> templates are a tricky thing :)
> Basically you cannot _generally_ proof that one template just 
> forwards to another.
> Therefore you have to create separate types.
> And since you create separate types the alias is not an alias 
> but a separate template.
> Solving this may be possible for special cases but in the 
> general case is infeasible.

What about something like this (using the reduced example from 
the bug report):

import std.traits : TemplateOf;

struct TestType(T) {}
alias TestAlias(T) = TestType!T;

template testFunction(T, alias U = TemplateOf!(TestAlias!T))
{
     void testFunction(U!T arg) {}
}

void main()
{
     TestAlias!int testObj;
     testFunction(testObj);
}


More information about the Digitalmars-d mailing list