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.
}