#![allow(non_camel_case_types)] use std::cell::Cell; struct dtor<'a> { x: &'a Cell, } impl<'a> Drop for dtor<'a> { fn drop(&mut self) { self.x.set(self.x.get() - 1); } } fn unwrap(o: Option) -> T { match o { Some(v) => v, None => panic!() } } pub fn main() { let x = &Cell::new(1); { let b = Some(dtor { x:x }); let _c = unwrap(b); } assert_eq!(x.get(), 0); }