#include <functional>
void f(int x)
{
printf("%d\n", x);
}
typedef void (*fp)(int);
int main()
{
std::function<void (int)> g1 = std::bind(f, std::placeholders::_1);
g1(1); //print 1
fp g2(f);
g2(2); //print 2
fp g3 = *g1.target<fp>();
g3(3);
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp2b2lkIGYoaW50IHgpCnsKCXByaW50ZigiJWRcbiIsIHgpOwp9Cgp0eXBlZGVmIHZvaWQgKCpmcCkoaW50KTsKCmludCBtYWluKCkKewoJc3RkOjpmdW5jdGlvbjx2b2lkIChpbnQpPiBnMSA9IHN0ZDo6YmluZChmLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEpOwoJZzEoMSk7IC8vcHJpbnQgMQoKCWZwIGcyKGYpOwoJZzIoMik7IC8vcHJpbnQgMgoKCWZwIGczID0gKmcxLnRhcmdldDxmcD4oKTsgCglnMygzKTsKCglyZXR1cm4gMDsKfQ==