#include <iostream>
#include <functional>

std::function< double( double, double ) >  mult = 
[]( double x, double y){return x*y;};

std::function< std::function< double(double) >(std::function< double(double, double) >, double) > funcYgivenX
  = [](std::function< double(double, double) > func2d, double inX)
  {
    return [func2d, inX]( double inY ){ std::cout << "x: " << inX << ", y: " << inY << std::endl; return func2d(inX, inY); };
  };

int main()
{
   auto x = funcYgivenX(mult, 10);
   auto y = x(20);
   std::cout << "y: " << y << std::endl;

   return 0;
}

