| struct Foo<'a>(&'a mut bool); | |
| impl<'a> Drop for Foo<'a> { | |
| fn drop(&mut self) { | |
| *self.0 = true; | |
| } | |
| } | |
| fn f<T: FnOnce()>(t: T) { | |
| t() | |
| } | |
| fn main() { | |
| let mut ran_drop = false; | |
| { | |
| let x = Foo(&mut ran_drop); | |
| // this closure never by val uses its captures | |
| // so it's basically a fn(&self) | |
| // the shim used to not drop the `x` | |
| let x = move || { | |
| let _val = x; | |
| }; | |
| f(x); | |
| } | |
| assert!(ran_drop); | |
| } |