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; | |
} |