#include <functional>
#include <iostream>
 
struct A
{
  int foo(int a)
  {
    return a;
  }
};
 
class B
{
private:
  std::function<int(int)> pfoo;
public:
  B(std::function<int(int)> foofunc) 
    : pfoo(foofunc) { }
  int cFoo(int i)
  {
    return pfoo(i); 
  }
};
 
int main()
{
	A my_a;
	B my_b(std::bind(&A::foo, my_a, std::placeholders::_1));
	std::cout << my_b.cFoo(2);
	return 0;
}
				I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnN0cnVjdCBBCnsKICBpbnQgZm9vKGludCBhKQogIHsKICAgIHJldHVybiBhOwogIH0KfTsKCmNsYXNzIEIKewpwcml2YXRlOgogIHN0ZDo6ZnVuY3Rpb248aW50KGludCk+IHBmb287CnB1YmxpYzoKICBCKHN0ZDo6ZnVuY3Rpb248aW50KGludCk+IGZvb2Z1bmMpIAogICAgOiBwZm9vKGZvb2Z1bmMpIHsgfQogIGludCBjRm9vKGludCBpKQogIHsKICAgIHJldHVybiBwZm9vKGkpOyAKICB9Cn07CgppbnQgbWFpbigpCnsKCUEgbXlfYTsKCUIgbXlfYihzdGQ6OmJpbmQoJkE6OmZvbywgbXlfYSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xKSk7CglzdGQ6OmNvdXQgPDwgbXlfYi5jRm9vKDIpOwoJcmV0dXJuIDA7Cn0=