fn main() { test::(&mut 42); //~ ERROR implementation of `Foo` is not general enough } trait Foo<'a> {} struct FooS<'a> { data: &'a mut u32, } impl<'a, 'b: 'a> Foo<'b> for FooS<'a> {} fn test<'a, F>(data: &'a mut u32) where F: for<'b> Foo<'b> {}