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