The meaning of the name _T.aaa depends on the template parameter T: it could be a template, a typename, or a value. By default, the compiler treats it as if it was a value, and the following < and > as less-than and greater-than operators. There can be ambiguity in certain cases.
If you wish for a dependent name like _T.aaa to be a template or a typename, you must say what you want every time: _T.template aaa<U>(_U);
The example you gave is not actually ambiguous because U is only ever a typename, but the compiler doesn't care.