// run-pass
fn main() {
    let x = X(15);
    let y = x.foo();
    println!("{:?}",y);
}

trait Foo
    where for<'a> &'a Self: Bar
{
    fn foo<'a>(&'a self) -> <&'a Self as Bar>::Output;
}

trait Bar {
    type Output;
}

struct X(i32);

impl<'a> Bar for &'a X {
    type Output = &'a i32;
}

impl Foo for X {
    fn foo<'a>(&'a self) -> <&'a Self as Bar>::Output {
        &self.0
    }
}