template<typename T>
class F { 
  T f;
public:
  F(T t) : f(t)
  {}  

  T& operator()(){
    return f;
  }
};

#define DECLARE_F(VARIABLE, LAMBDA) \
  auto lambda = LAMBDA; \
  F<decltype(lambda)> VARIABLE(lambda)

int main()
{
    int x = 5;
    DECLARE_F(f, [x](int a, int b){return a+b;});
    return 0;
}
