Rust errors / Ownership and borrowing
Rust compiler error · checked with rustc 1.99.0
Rust error E0581: return type references lifetime `'a`, which is not constrained by the fn input types
What it meansIn a fn type, a lifetime appears only in the return type and not in the arguments types.
What rustc prints
error[E0581]: return type references lifetime `'a`, which is not constrained by the fn input types
--> main.rs:3:28
|
3 | let x: for<'a> fn() -> &'a i32;
| ^^^^^^^Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
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.
From rustc --explain E0581 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0382borrow of moved value
- E0499cannot borrow as mutable more than once at a time
- E0502cannot borrow as mutable because it is also borrowed as immutable
- E0106missing lifetime specifier
- E0557feature has been removed
- E0568auto traits cannot have super traits or lifetime bounds
- E0582binding for associated type `Output` references lifetime `'a`, which does not appear in the trait input types
- E0594cannot assign to `ss.earth`, as `ss` is not declared as mutable
Up next
Often hit nextE0382: borrow of moved valueA related error from the same family.Read it next →Did this answer your question?