Why the compiler chooses the template with tuple paramer? Isn't the template with type parameter more 'specialized'? template Foo(T) { pragma(msg, "Type"); } template Foo(TT...) { pragma(msg, "Tuple"); } alias Foo!(int) foo; ---- Outputs: Tuple