On 08/17/2016 09:21 PM, Lodovico Giaretta wrote:
import std.traits: TemplateOf;
static if (__traits(isSame, TemplateOf!(x.args[2]), MySequence))
{
    ...
}

std.traits.TemplateOf extracts the symbol representing the
uninstantiated template.

__traits(isSame, symbol1, symbol2) evaluates at compile time to true if
and only if the two symbols represent the same thing (be it a type, an
uninstantiated template, an instantiated one or whatever else).

Look at that! Much better.

TemplateOf is implemented with a template specialization, which can handle other things than types, unlike `is(...)`.

Using that directly, without going to std.traits, isMySequence could be done like this:

----
enum isMySequence(alias thing : MySequence!args, args ...) = true;
enum isMySequence(alias thing) = false;
----

That's just me toying around with the language, of course. The isSame+TemplateOf version is perfectly fine.

Reply via email to