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.
Simply
void f(T)(T t)
{
static if(isSomething!T)
{
}
else static if(isSomethingElse!T)
{
}
else
{
}
}
I personally hate overloads, especially if the condition has a
fallback, so I like to see no condition in the function
signature, what makes for a much cleaner API.
I have never seen what benefit could be gained from having
overloads. I think they are a relict from languages without
static if.