|  | // Taken directly from that issue. | 
|  | // | 
|  | // This test detected that we didn't correctly resolve | 
|  | // inference variables when computing implied bounds. | 
|  | // | 
|  | //@ check-pass | 
|  | pub trait BuilderFn<'a> { | 
|  | type Output; | 
|  | } | 
|  |  | 
|  | impl<'a, F, Out> BuilderFn<'a> for F | 
|  | where | 
|  | F: FnOnce(&'a mut ()) -> Out, | 
|  | { | 
|  | type Output = Out; | 
|  | } | 
|  |  | 
|  | pub trait ConstructionFirm { | 
|  | type Builder: for<'a> BuilderFn<'a>; | 
|  | } | 
|  |  | 
|  | pub trait Campus<T> | 
|  | where | 
|  | T: ConstructionFirm, | 
|  | { | 
|  | fn add_building( | 
|  | &mut self, | 
|  | building: &mut <<T as ConstructionFirm>::Builder as BuilderFn<'_>>::Output, | 
|  | ); | 
|  | } | 
|  |  | 
|  | struct ArchitectsInc {} | 
|  |  | 
|  | impl ConstructionFirm for ArchitectsInc { | 
|  | type Builder = fn(&mut ()) -> PrettyCondo<'_>; | 
|  | } | 
|  |  | 
|  | struct PrettyCondo<'a> { | 
|  | _marker: &'a mut (), | 
|  | } | 
|  |  | 
|  | struct CondoEstate {} | 
|  |  | 
|  | impl Campus<ArchitectsInc> for CondoEstate { | 
|  | fn add_building(&mut self, _building: &mut PrettyCondo<'_>) { | 
|  | todo!() | 
|  | } | 
|  | } | 
|  |  | 
|  | fn main() {} |