#include #include std::function f = [](auto n){return n + 2;}; std::function g = [](auto n){return n * 2;}; template auto compose(F f, G g) { return [f,g](auto n){return f(g(n));}; } int main() { std::cout << compose(f, g)(5) << '\n'; return 0; }