// run-pass

trait Foo<'a> {
    fn xyz(self);
}
impl<'a, T> Foo<'a> for T where 'static: 'a {
    fn xyz(self) {}
}

trait Bar {
    fn uvw(self);
}
impl<T> Bar for T where for<'a> T: Foo<'a> {
    fn uvw(self) { self.xyz(); }
}

fn foo<T>(t: T) where T: Bar {
    t.uvw();
}

fn main() {
    foo(0);
}