#include #include template void invoke(F f, T x, T y) { std::cout << f(x, y) << std::endl; } int minus(int lhs, int rhs) { return lhs - rhs; } int main() { invoke(minus, 1, 3); invoke(std::plus(), 1, 3); invoke([](int lhs, int rhs){ return lhs * rhs; }, 1, 3); }