How to check for instantiation of specific template?

H. S. Teoh hsteoh at quickfur.ath.cx
Thu Oct 10 10:23:19 PDT 2013


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.


T

-- 
Help a man when he is in trouble and he will remember you when he is in trouble again.


More information about the Digitalmars-d-learn mailing list