| In a `fn` type, a lifetime appears only in the return type |
| and not in the arguments types. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0581 |
| 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. |
| |
| [issue #33685]: https://github.com/rust-lang/rust/issues/33685 |