June 10, 2018
The idea is that one can use UFCS with templates and types if the first type matches:

void foo(string T)(int x);


"test".foo(4);  <==> foo!("test")(4)


class X;

void foo(T : X)(int x);

X.foo(4) <=> foo!X(4)

This would be unambiguous(since types are not variables in D).

This allows one to define generic functions on a whole class of types:

T New(T, Args...)(Args a)
{
   return new T(a);
}


which then is a useful idiom because it provides a nice wrapper for new. We could then use New in place of new in our design and then track allocations easier, convert seamlessly between gc and nogc allocated variables, etc.