In a fn
type, a lifetime appears only in the return type
and not in the arguments types.
Erroneous code example:
fn main() {
// Here, `'a` appears only in the return type:
let x: for<'a> fn() -> &'a i32;
}
RunThe problem here is that the lifetime isn’t constrained by any of the arguments, making it impossible to determine how long it’s supposed to live.
To fix this issue, either use the lifetime in the arguments, or use the
'static
lifetime. Example:
fn main() {
// Here, `'a` appears only in the return type:
let x: for<'a> fn(&'a i32) -> &'a i32;
let y: fn() -> &'static i32;
}
RunNote: The examples above used to be (erroneously) accepted by the compiler, but this was since corrected. See issue #33685 for more details.