| A reference to a local variable was returned. | |
| Erroneous code example: | |
| ```compile_fail,E0515 | |
| fn get_dangling_reference() -> &'static i32 { | |
| let x = 0; | |
| &x | |
| } | |
| ``` | |
| ```compile_fail,E0515 | |
| use std::slice::Iter; | |
| fn get_dangling_iterator<'a>() -> Iter<'a, i32> { | |
| let v = vec![1, 2, 3]; | |
| v.iter() | |
| } | |
| ``` | |
| Local variables, function parameters and temporaries are all dropped before | |
| the end of the function body. A returned reference (or struct containing a | |
| reference) to such a dropped value would immediately be invalid. Therefore | |
| it is not allowed to return such a reference. | |
| Consider returning a value that takes ownership of local data instead of | |
| referencing it: | |
| ``` | |
| use std::vec::IntoIter; | |
| fn get_integer() -> i32 { | |
| let x = 0; | |
| x | |
| } | |
| fn get_owned_iterator() -> IntoIter<i32> { | |
| let v = vec![1, 2, 3]; | |
| v.into_iter() | |
| } | |
| ``` |