51 lines
922 B
Rust
51 lines
922 B
Rust
// 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() {}
|