#dbugfix Issue 16486 200$

Simen Kjærås simen.kjaras at gmail.com
Sat Mar 31 16:13:56 UTC 2018


On Friday, 30 March 2018 at 15:49:30 UTC, jmh530 wrote:
> On Friday, 30 March 2018 at 15:21:26 UTC, jmh530 wrote:
>> [snip]
>>
>
> Doesn't extend to multiple template parameters that well...
>
> import std.traits : TemplateOf;
>
> struct TestType(T, U) {}
> alias TestAlias(T) = TestType!(T, int);
>
> template testFunction(T, alias U = TemplateOf!(TestAlias!T))

What you're showing here is a somewhat different case. First, 
you're telling TestAlias to turn into a TestType. Then you ask 
which template that type is an instance of. That's going to be 
TestType, every single time. And it being anything else would be 
a source of great confusion:

     auto a = TestType!(string, int)();
     auto b = TestAlias!string();

     // We expect this to be true:
     assert(is(typeof(a) == typeof(b)));

     // And I'll be damned if this ain't:
     assert(__traits(isSame, TemplateOf!(typeof(a)), 
TemplateOf!(typeof(b))));

--
   Simen


More information about the Digitalmars-d mailing list