Error code E0581

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;
}

The 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;
}

Note: The examples above used to be (erroneously) accepted by the compiler, but this was since corrected. See issue #33685 for more details.