This is called turbofish, and it exists to avoid ambiguity in syntax. f<T>() could be parsed as (f < T) > () -- f less than T, and that result greater than the unit (). That's nonsense at the type level, but could be valid syntax. Or in a language with chained comparisons (like Python), it could be parsed as the equivalent of (f < T) && (T > ()).
There are more examples in RFC 2544, which aims to make turbofish optional after all.