#include <iostream>
#include <functional>
using namespace std;
template <typename Fnc, typename Args>
void t (Fnc f, Args arg) {
f (arg);
}
void foo (int x) {
cout<<x;
}
void bar (int& x) {
cout << ++x;
}
int main () {
int x=2;
t (foo, x);
t<function<void(int&)>,int&> (bar, x);
cout << x;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBGbmMsIHR5cGVuYW1lIEFyZ3M+CnZvaWQgdCAoRm5jIGYsIEFyZ3MgYXJnKSB7CiAgZiAoYXJnKTsKfQoKdm9pZCBmb28gKGludCB4KSB7CiAgY291dDw8eDsKfQp2b2lkIGJhciAoaW50JiB4KSB7CiAgY291dCA8PCArK3g7Cn0KCmludCBtYWluICgpIHsKICBpbnQgeD0yOwogIHQgKGZvbywgeCk7CiAgdDxmdW5jdGlvbjx2b2lkKGludCYpPixpbnQmPiAoYmFyLCB4KTsKICBjb3V0IDw8IHg7Cn0K