#include <functional>
#include <iostream>
using namespace std;
void Callback(int &value)
{
value = 42;
}
template <typename Method, typename ...Params>
void CallMethod(Method method, Params&& ...params)
{
method(std::forward<Params>(params)...);
}
int main()
{
int value = 0;
CallMethod(&Callback, value);
cout << "Value: " << value << endl;
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIENhbGxiYWNrKGludCAmdmFsdWUpCnsKCXZhbHVlID0gNDI7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBNZXRob2QsIHR5cGVuYW1lIC4uLlBhcmFtcz4Kdm9pZCBDYWxsTWV0aG9kKE1ldGhvZCBtZXRob2QsIFBhcmFtcyYmIC4uLnBhcmFtcykKewoJbWV0aG9kKHN0ZDo6Zm9yd2FyZDxQYXJhbXM+KHBhcmFtcykuLi4pOwp9CgppbnQgbWFpbigpCnsKCWludCB2YWx1ZSA9IDA7CglDYWxsTWV0aG9kKCZDYWxsYmFjaywgdmFsdWUpOwoJCgljb3V0IDw8ICJWYWx1ZTogIiA8PCB2YWx1ZSA8PCBlbmRsOwoJCglyZXR1cm4gMDsKfQ==