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.