trait MyFn { type Output; fn call(&self, arg: Arg) -> Self::Output; } struct Wrap(F); impl MyFn for Wrap where F: Fn(A) -> B, { type Output = B; fn call(&self, arg: A) -> Self::Output { (self.0)(arg) } } struct A; fn test() -> impl for<'a> MyFn<&'a A, Output = impl Iterator + 'a> { //~^ ERROR `impl Trait` cannot capture higher-ranked lifetime from outer `impl Trait` Wrap(|a| Some(a).into_iter()) } fn main() {}