void func()
{
a < b , c > d;
}
If a is a class template, the line in func() declares an instance of type "a<b, c>".If a is a global variable, it describes an invocation of the "<" and ">" operators for 4 different variables.
Maintaining a parse tree of this is a massive mess, especially if func() is a template itself (and hence the meaning of a would change based on the instantiation).