#include int main(int,char**) { auto mksetter= [](int& val, const char*msg) { return [&val, msg](int newval) { if (val && val!=newval) printf("changed %s: %d -> %d\n", msg, val, newval); val= newval; }; }; int val1=0; auto setval1= mksetter(val1, "val1"); int val2=0; auto setval2= mksetter(val2, "val2"); setval1(123); setval2(456); setval1(1234); setval2(1234); return 0; }