#include <stdio.h>

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