error[E0308]: mismatched types --> $DIR/issue-79187.rs:5:5 | LL | thing(f); | ^^^^^^^^ one type is more general than the other | = note: expected trait `for<'a> FnOnce<(&'a u32,)>` found trait `FnOnce<(&u32,)>` note: this closure does not fulfill the lifetime requirements --> $DIR/issue-79187.rs:4:13 | LL | let f = |_| (); | ^^^ note: the lifetime requirement is introduced here --> $DIR/issue-79187.rs:1:18 | LL | fn thing(x: impl FnOnce(&u32)) {} | ^^^^^^^^^^^^ help: consider specifying the type of the closure parameters | LL | let f = |_: &_| (); | ~~~~~~~ error: implementation of `FnOnce` is not general enough --> $DIR/issue-79187.rs:5:5 | LL | thing(f); | ^^^^^^^^ implementation of `FnOnce` is not general enough | = note: closure with signature `fn(&'2 u32)` must implement `FnOnce<(&'1 u32,)>`, for any lifetime `'1`... = note: ...but it actually implements `FnOnce<(&'2 u32,)>`, for some specific lifetime `'2` error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0308`.