Thread overview
Getting the template name of a template instantiation
Jun 27, 2016
Nordlöw
Jun 27, 2016
Lodovico Giaretta
Jun 27, 2016
Ali Çehreli
Jun 27, 2016
John
Jun 27, 2016
John
Jun 27, 2016
Nordlöw
June 27, 2016
If I have a template parameter

    E = S!int

where

    struct S(T) { S x; }

how can I extract the template name part `S` from E`?

Something like:

    static assert(is(templateName!(S!int) == S));

Is this already in Phobos somewhere?
June 27, 2016
On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote:
> If I have a template parameter
>
>     E = S!int
>
> where
>
>     struct S(T) { S x; }
>
> how can I extract the template name part `S` from E`?
>
> Something like:
>
>     static assert(is(templateName!(S!int) == S));
>
> Is this already in Phobos somewhere?

If I recall correctly, std.traits contains a TemplateOf trait, that should do exactly what you want.
June 27, 2016
On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote:
> If I have a template parameter
>
>     E = S!int
>
> where
>
>     struct S(T) { S x; }
>
> how can I extract the template name part `S` from E`?
>
> Something like:
>
>     static assert(is(templateName!(S!int) == S));
>
> Is this already in Phobos somewhere?

import std.traits;
__traits(identifier, TemplateOf!(S!int));
June 27, 2016
On 06/27/2016 09:54 AM, Lodovico Giaretta wrote:
> On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote:
>> If I have a template parameter
>>
>>     E = S!int
>>
>> where
>>
>>     struct S(T) { S x; }
>>
>> how can I extract the template name part `S` from E`?
>>
>> Something like:
>>
>>     static assert(is(templateName!(S!int) == S));
>>
>> Is this already in Phobos somewhere?
>
> If I recall correctly, std.traits contains a TemplateOf trait, that
> should do exactly what you want.

Yes, isIntanceOf:

  https://dlang.org/phobos/std_traits.html#isInstanceOf

Ali

June 27, 2016
On Monday, 27 June 2016 at 17:14:23 UTC, John wrote:
> On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote:
>> If I have a template parameter
>>
>>     E = S!int
>>
>> where
>>
>>     struct S(T) { S x; }
>>
>> how can I extract the template name part `S` from E`?
>>
>> Something like:
>>
>>     static assert(is(templateName!(S!int) == S));
>>
>> Is this already in Phobos somewhere?
>
> import std.traits;
> __traits(identifier, TemplateOf!(S!int));

Scratch that, this is what you want:

import std.traits;
static assert(__traits(isSame, TemplateOf!(S!int), S));
June 27, 2016
On Monday, 27 June 2016 at 17:17:19 UTC, John wrote:
>> import std.traits;
>> __traits(identifier, TemplateOf!(S!int));
>
> Scratch that, this is what you want:
>
> import std.traits;
> static assert(__traits(isSame, TemplateOf!(S!int), S));

I believe this is what

    import std.traits : isInstanceOf;

is for.

Thanks! I found both useful.