On Thursday, 1 September 2016 at 05:37:50 UTC, Manu wrote:
So, consider a set of overloads:

  void f(T)(T t) if(isSomething!T) {}
  void f(T)(T t) if(isSomethingElse!T) {}
  void f(T)(T t) {}

I have a recurring problem where I need a fallback function like the bottom one, which should be used in lieu of a more precise match. This is obviously an ambiguous call, but this is a pattern that comes up an awful lot. How to do it in D?

I've asked this before, and people say:

  void f(T)(T t) if(!isSomething!T && !isSomethingElse!T) {}

Consider that more overloads are being introduced by users spread out across many modules that define their own kind of T; this solution is no good.

An easy workaround with a bit of boilerplate would be:

void f(T)(T t) {
    static if(isSomething!T) {
        // special impl
    }
    else {
        fallback_f(t);
    }
}

void fallback_f(T)(T t) { ... }

Reply via email to