// expect: unlocked a b unlocked c / // destructors 3: a value nothing holds drops at the end of its full statement; a bound guard drops at block end include rt; void unlock() { rt.put_s("unlocked "); } fn main() { heap(0).drop = fn() { unlock(); }; rt.put_s("a "); { let guard = drop(heap(0), fn() { unlock(); }); rt.put_s("b "); } rt.put_s("c "); rt.put_c(10); return 0; } // zc0: skip