typedef struct{void (*inc)(void); int (*read)(void);} cp; cp cc() {return ({int count = 0; void inc(){++count;}; int read(){return count;}; (cp){inc, read};});}; // Demo #include int main(){cp c1 = cc(), c2=cc(); c1.inc(); c2.inc(); c1.inc(); printf("%d %d\n", c1.read(), c2.read()); return 0;} // => 3 3 which is of course wrong.