www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to check whether a struct is templated?

reply Andre Pany <andre s-e-a-p.de> writes:
Hi,

I loop through a structure during compile time and want to check 
whether a field of the structure is of type Nullable.

Therefore I use the TemplateOf traits which works for Nullable 
fields but raises an error for fields which are structures and 
not templated.

static if(is(T == struct) && __traits(isSame, TemplateOf!T, 
Nullable)){}
 template std.traits.TemplateOf does not match any template 
 declaration
I can not find a traits "isTemplateOf". Is there are workaround? Kind regards André
Jun 13
next sibling parent Balagopal Komarath <baluks gmail.com> writes:
Are you looking for something like this?

import std.typecons;
import std.traits;

alias yes = Nullable!int;

struct no {}

template isNullable(T : Nullable!X, X)
{
     enum isNullable = true;
}

template isNullable(T)
{
     enum isNullable = false;
}

void main()
{
     static assert(isNullable!yes);
     static assert(!isNullable!no);
}
Jun 13
prev sibling parent reply =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 06/13/2017 02:00 AM, Andre Pany wrote:

 I can not find a traits "isTemplateOf".
You're close. :) https://dlang.org/phobos/std_traits.html#isInstanceOf Ali
Jun 13
parent Andre Pany <andre s-e-a-p.de> writes:
On Tuesday, 13 June 2017 at 09:18:47 UTC, Ali Çehreli wrote:
 On 06/13/2017 02:00 AM, Andre Pany wrote:

 I can not find a traits "isTemplateOf".
You're close. :) https://dlang.org/phobos/std_traits.html#isInstanceOf Ali
Thanks :) Kind regards André
Jun 13