#include <functional>
template<typename F>
void foo(int i,F f) {
f(i);
}
// [](auto x) { ++x; }
struct lambda {
template<typename T>
void operator() (T x) { ++x; }
};
int main() {
foo(1, lambda());
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBGPgp2b2lkIGZvbyhpbnQgaSxGIGYpIHsKICAgIGYoaSk7Cn0KCi8vIFtdKGF1dG8geCkgeyArK3g7IH0Kc3RydWN0IGxhbWJkYSB7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgdm9pZCBvcGVyYXRvcigpIChUIHgpIHsgKyt4OyB9Cn07CgppbnQgbWFpbigpIHsKICAgIGZvbygxLCBsYW1iZGEoKSk7Cn0K