#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;
}