Hi

Is there a way to tell if an alias is to a template?

I'm writing some algorithms and I need to distinguish between a binary predicate that provides "less than" and one that provides "equal to" semantics. So I have these two templates:

template eq(alias pred) {
    alias eq = pred;
}

template lt(alias pred) {
    alias lt = pred;
}

Then in some place:

static if (is(pred == eq)) {
  return eq(a, b);
} else static if (is(pred == lt)) {
return !lt(a, b) && !lt(b, a); // equality with less than predicate
} else {
  // default assumptions about predicate
}

Then I can use it like:

auto a = S!(eq!((a, b) => a == b)) ;
auto a = S!(lt!((a, b) => a < b));

I've tried std.traits.TemplateOf and __traits(isSame and also variations of typeof and also traits.isInstanceOf. I wonder if I have to parameterize eq and lt over a compile time sequence instead?

Any tips to get this working?

Cheers,
- Ali

Reply via email to