https://rust.godbolt.org/z/8fzsP4MbE
trait Super { type SuperAssoc; } trait Trait: Super<SuperAssoc = Self::TraitAssoc> { type TraitAssoc; } impl<T, U> Trait for T where T: Super<SuperAssoc = U>, { type TraitAssoc = U; } fn overflow<T: Trait>() { let x: <T as Trait>::TraitAssoc; } normalizing <T as Trait>::TraitAssoc in the elaborated environment [T: Trait, T: Super, <T as Super>::SuperAssoc = <T as Trait>::TraitAssoc] has a single impl candidate, which uses the environment to normalize <T as Trait>::TraitAssoc to itself :3