| pub struct CrateId { | 
 |     local_path: String, | 
 |     junk: String, | 
 | } | 
 |  | 
 | impl CrateId { | 
 |     fn new(s: &str) -> CrateId { | 
 |         CrateId { local_path: s.to_string(), junk: "wutevs".to_string() } | 
 |     } | 
 | } | 
 |  | 
 | pub fn remove_package_from_database() { | 
 |     let mut lines_to_use: Vec<&CrateId> = Vec::new(); | 
 |     //~^ NOTE `lines_to_use` declared here, outside of the closure body | 
 |     let push_id = |installed_id: &CrateId| { | 
 |         //~^ NOTE `installed_id` is a reference that is only valid in the closure body | 
 |         lines_to_use.push(installed_id); | 
 |         //~^ ERROR borrowed data escapes outside of closure | 
 |         //~| NOTE `installed_id` escapes the closure body here | 
 |     }; | 
 |     list_database(push_id); | 
 |  | 
 |     for l in &lines_to_use { | 
 |         println!("{}", l.local_path); | 
 |     } | 
 | } | 
 |  | 
 | pub fn list_database<F>(mut f: F) | 
 | where | 
 |     F: FnMut(&CrateId), | 
 | { | 
 |     let stuff = ["foo", "bar"]; | 
 |  | 
 |     for l in &stuff { | 
 |         f(&CrateId::new(*l)); | 
 |     } | 
 | } | 
 |  | 
 | pub fn main() { | 
 |     remove_package_from_database(); | 
 | } |