| // 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() {} |