The statement: F(G<A, B>(7));
could be interpreted as a call to F with two arguments, G < A and B > (7).
Alternatively, it could be interpreted as a call to F with one argument, which is a call to a generic method G with two type arguments and one regular argument.
public class Foo<T> { ...
a method like:
public void EatAFoo<T>(...
and usage like:
var f = new Foo<int>();
someObj.EatAFoo<int>(...
I don't see how any of these cases could be confused with a greater than or less than operator. Could you expand on where the problem comes in?