| Borrowed data escapes outside of closure. | |
| Erroneous code example: | |
| ```compile_fail,E0521 | |
| let mut list: Vec<&str> = Vec::new(); | |
| let _add = |el: &str| { | |
| list.push(el); // error: `el` escapes the closure body here | |
| }; | |
| ``` | |
| A type annotation of a closure parameter implies a new lifetime declaration. | |
| Consider to drop it, the compiler is reliably able to infer them. | |
| ``` | |
| let mut list: Vec<&str> = Vec::new(); | |
| let _add = |el| { | |
| list.push(el); | |
| }; | |
| ``` | |
| See the [Closure type inference and annotation][closure-infere-annotation] and | |
| [Lifetime elision][lifetime-elision] sections of the Book for more details. | |
| [closure-infere-annotation]: https://doc.rust-lang.org/book/ch13-01-closures.html#closure-type-inference-and-annotation | |
| [lifetime-elision]: https://doc.rust-lang.org/reference/lifetime-elision.html |