// Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // check that dropck does the right thing with misc. Ty variants use std::fmt; struct NoisyDrop(T); impl Drop for NoisyDrop { fn drop(&mut self) { let _ = vec!["0wned"]; println!("dropping {:?}", self.0) } } trait Associator { type As; } impl Associator for T { type As = NoisyDrop; } struct Wrap(::As); fn projection() { let (_w, bomb); bomb = vec![""]; _w = Wrap::<&[&str]>(NoisyDrop(&bomb)); //~^ ERROR `bomb` does not live long enough } fn closure() { let (_w,v); v = vec![""]; _w = { let u = NoisyDrop(&v); //~^ ERROR `v` does not live long enough move || u.0.len() }; } fn main() { closure(); projection() }