How to check for instantiation of specific template?

Jacob Carlborg doob at me.com
Fri Oct 11 00:56:39 PDT 2013


On 2013-10-10 19:23, H. S. Teoh wrote:
> I have a template used for storing compile-time values:
>
> 	template Def(int x, string y) {
> 		alias impl = TypeTuple!(x,y);
> 	}
>
> How do I define a template isDef that, given some template alias A,
> evaluates to true if A is some instantiation of Def?
>
> 	template isDef(alias A) {
> 		enum A = ... /* what to put here? */
> 	}
>
> The intent is to be able to write signature constraints like this:
>
> 	auto myFunc(alias def)(...)
> 		if (isDef!def)
> 	{
> 		...
> 	}
>
> 	...
> 	// Pass an instantiation of Def to myFunc
> 	auto x = myFunc!(Def!(1, "abc"))(args);
>
> I tried using std.traits.isInstanceOf but apparently it expects the
> second argument to be an actual type, which doesn't work in this case
> because Def is a typetuple of compile-time values, not an actual type.

I found this old thread

http://forum.dlang.org/thread/mailman.1382.1371938670.13711.digitalmars-d@puremagic.com

With this code:

template getTemplate(alias T : TI!TP, alias TI, TP...)
{
     alias getTemplate = TI;
}

But I haven't figured out how to do the comparison.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list