On 7/24/2015 11:10 PM, Jonathan M Davis wrote:
So, maybe we should look at something along those lines rather than
proliferating the top-level function overloading like we're doing now.
Consider the following pattern, which I see often in Phobos:
void foo(T)(T t) if (A) { ... }
void foo(T)(T t) if (!A && B) { ... }
from a documentation (i.e. user) perspective. Now consider:
void foo(T)(T t) if (A || B)
{
static if (A) { ... }
else static if (B) { ... }
else static assert(0);
}
Makes a lot more sense to the user, who just sees one function that needs A or
B, and doesn't see the internal logic.