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;
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgRiB7IAogIFQgZjsKcHVibGljOgogIEYoVCB0KSA6IGYodCkKICB7fSAgCgogIFQmIG9wZXJhdG9yKCkoKXsKICAgIHJldHVybiBmOwogIH0KfTsKCiNkZWZpbmUgREVDTEFSRV9GKFZBUklBQkxFLCBMQU1CREEpIFwKICBhdXRvIGxhbWJkYSA9IExBTUJEQTsgXAogIEY8ZGVjbHR5cGUobGFtYmRhKT4gVkFSSUFCTEUobGFtYmRhKQoKaW50IG1haW4oKQp7CiAgICBpbnQgeCA9IDU7CiAgICBERUNMQVJFX0YoZiwgW3hdKGludCBhLCBpbnQgYil7cmV0dXJuIGErYjt9KTsKICAgIHJldHVybiAwOwp9Cg==