A lifetime is only present in an associated-type binding, and not in the input types to the trait. Erroneous code example: ```compile_fail,E0582 fn bar(t: F) // No type can satisfy this requirement, since `'a` does not // appear in any of the input types (here, `i32`): where F: for<'a> Fn(i32) -> Option<&'a i32> { } fn main() { } ``` To fix this issue, either use the lifetime in the inputs, or use `'static`. Example: ``` fn bar(t: F, u: G) where F: for<'a> Fn(&'a i32) -> Option<&'a i32>, G: Fn(i32) -> Option<&'static i32>, { } fn main() { } ``` This error also includes the use of associated types with lifetime parameters. ```compile_fail,E0582 trait Foo { type Assoc<'a>; } struct Bar where X: Foo, F: for<'a> Fn(X::Assoc<'a>) -> &'a i32 { x: X, f: F } ``` The latter scenario encounters this error because `Foo::Assoc<'a>` could be implemented by a type that does not use the `'a` parameter, so there is no guarantee that `X::Assoc<'a>` actually uses `'a`. To fix this we can pass a dummy parameter: ``` # trait Foo { # type Assoc<'a>; # } struct Bar where X: Foo, F: for<'a> Fn(X::Assoc<'a>, /* dummy */ &'a ()) -> &'a i32 { x: X, f: F } ``` Note: The examples above used to be (erroneously) accepted by the compiler, but this was since corrected. See [issue #33685] for more details. [issue #33685]: https://github.com/rust-lang/rust/issues/33685