extern "C" void abort (void); struct ST { int filler; int referrer; }; void OUTER_BLOCK(void (^fixer)(ST& ref)) { ST ref = {2, 100}; fixer(ref); } void INNER_BLOCK(int (^largeDo) ()) { if (largeDo() != 102) abort(); } void scan() { OUTER_BLOCK(^(ST &ref) { INNER_BLOCK(^() { if (ref.referrer != 100) abort(); return ref.referrer + ref.filler; }); }); } int main(int argc, const char *argv[]) { scan(); return 0; }