Or, deprecate T: Iterator<Item=u8> and forget that it ever existed because that syntax doesn’t make any sense; Item is not a type parameter to Iterator.
Then, permit:
T: Iterator,
T::Item == u8
Disallow:
T::Item == u8, // Error: no `Item` in scope
T: Iterator
And to disambiguate between multiple associated items with the same name:
T: Iterator + SomeOtherTraitWithAssociatedTypeNamedItem,
T::Item == u8 // Error: multiple `Item`s in scope
T: Iterator + SomeOtherTraitWithAssociatedTypeNamedItem,
<T as Iterator>::Item == u8 // OK
Also, allow:
T: Iterator,
T::Item: ToString