| This error code indicates a mismatch between the lifetimes appearing in the |
| function signature (i.e., the parameter types and the return type) and the |
| data-flow found in the function body. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0621 |
| fn foo<'a>(x: &'a i32, y: &i32) -> &'a i32 { // error: explicit lifetime |
| // required in the type of |
| // `y` |
| if x > y { x } else { y } |
| } |
| ``` |
| |
| In the code above, the function is returning data borrowed from either `x` or |
| `y`, but the `'a` annotation indicates that it is returning data only from `x`. |
| To fix the error, the signature and the body must be made to match. Typically, |
| this is done by updating the function signature. So, in this case, we change |
| the type of `y` to `&'a i32`, like so: |
| |
| ``` |
| fn foo<'a>(x: &'a i32, y: &'a i32) -> &'a i32 { |
| if x > y { x } else { y } |
| } |
| ``` |
| |
| Now the signature indicates that the function data borrowed from either `x` or |
| `y`. Alternatively, you could change the body to not return data from `y`: |
| |
| ``` |
| fn foo<'a>(x: &'a i32, y: &i32) -> &'a i32 { |
| x |
| } |
| ``` |