#include <functional>
#include <iostream>
using namespace std;
template <typename T>
void foo(function<T(const T&, const T&)> op, const T& lhs, const T& rhs) {
cout << op(lhs, rhs) << endl;
}
int main() {
function<int(const int&, const int&)> op = plus<int>();
foo(op, 13, 42);
//foo(plus<int>(), 13, 42);
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBmb28oZnVuY3Rpb248VChjb25zdCBUJiwgY29uc3QgVCYpPiBvcCwgY29uc3QgVCYgbGhzLCBjb25zdCBUJiByaHMpIHsKICAgIGNvdXQgPDwgb3AobGhzLCByaHMpIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewoJZnVuY3Rpb248aW50KGNvbnN0IGludCYsIGNvbnN0IGludCYpPiBvcCA9IHBsdXM8aW50PigpOwoKCWZvbyhvcCwgMTMsIDQyKTsKCQoJLy9mb28ocGx1czxpbnQ+KCksIDEzLCA0Mik7Cn0=