Why typeof(template) is void?

mogu via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 19 22:54:41 PDT 2016


On Wednesday, 20 July 2016 at 01:50:37 UTC, Adam D. Ruppe wrote:
> On Wednesday, 20 July 2016 at 01:14:05 UTC, mogu wrote:
>> Why S's type isn't something like `S: (T) -> S`?
>
> Because S isn't a type... think of a template as being like a 
> function that returns a type.
>
> int foo(int) { return 0; }
>
> There, you wouldn't expect typeof(foo) to be int, no, 
> typeof(foo) is a function that returns an int.
>
> The template is the same thing - it isn't a type, it is a 
> template that returns a type.

So it's a higher kinded type aka type class in Haskell. But D's 
reflection cannot get enough information about template's kind. 
Only a `void` given. It may be inconvenient in distinction 
between an alias of template and void. The only solution AFAIK is 
by string of the type property .stringof.


More information about the Digitalmars-d-learn mailing list