T foo(T)(T x) { return x; } void main() { // Normal calls assert(foo!(int)(123) == 123); // Explicit. assert(foo!int(123) == 123); // No type parameter parens. assert(foo(123) == 123); // No type parameter. // Dot notation calls assert(123.foo!(int)() == 123); // Explicit. assert(123.foo!int() == 123); // No type parameter parens. assert(123.foo!int == 123); // No parens at all. assert(123.foo == 123); // No parens and no type parameter. }