#[macro_export] macro_rules! defer { ($body:block) => { struct _Defer_ { closure: F, } impl Drop for _Defer_ { fn drop(&mut self) { (self.closure)(); } } let _defer_ = _Defer_ { closure: || $body, }; }; }