#include <iostream>
#include <functional>
std::function<int(int)> gen_fun(int n) {
return [&n](int x) { return x*n; };
}
std::function<int(int)> right_gen_fun(const int &n) {
return [&n](int x) { return x*n; };
}
void TestDefault() {
std::function<int(int)> f = gen_fun(5);
std::cout << f(1) << std::endl;
std::cout << f(2) << std::endl;
std::cout << f(3) << std::endl;
}
void TestRight() {
std::function<int(int)> f = right_gen_fun(5);
int value = 0;
std::cout << f(++value) << std::endl;
std::cout << f(++value) << std::endl;
std::cout << f(++value) << std::endl;
}
int main() {
TestDefault();
TestRight();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KIApzdGQ6OmZ1bmN0aW9uPGludChpbnQpPiBnZW5fZnVuKGludCBuKSB7CiAgICByZXR1cm4gWyZuXShpbnQgeCkgeyByZXR1cm4geCpuOyB9Owp9CgpzdGQ6OmZ1bmN0aW9uPGludChpbnQpPiByaWdodF9nZW5fZnVuKGNvbnN0IGludCAmbikgewogICAgcmV0dXJuIFsmbl0oaW50IHgpIHsgcmV0dXJuIHgqbjsgfTsKfQoKdm9pZCBUZXN0RGVmYXVsdCgpIHsKICAgIHN0ZDo6ZnVuY3Rpb248aW50KGludCk+IGYgPSBnZW5fZnVuKDUpOwogICAgc3RkOjpjb3V0IDw8IGYoMSkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IGYoMikgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IGYoMykgPDwgc3RkOjplbmRsOwp9Cgp2b2lkIFRlc3RSaWdodCgpIHsKICAgIHN0ZDo6ZnVuY3Rpb248aW50KGludCk+IGYgPSByaWdodF9nZW5fZnVuKDUpOwogICAgaW50IHZhbHVlID0gMDsKICAgIHN0ZDo6Y291dCA8PCBmKCsrdmFsdWUpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBmKCsrdmFsdWUpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBmKCsrdmFsdWUpIDw8IHN0ZDo6ZW5kbDsKfQogCmludCBtYWluKCkgewogIFRlc3REZWZhdWx0KCk7CiAgVGVzdFJpZ2h0KCk7Cn0=