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.