#include<boost/shared_ptr.hpp>
#include<boost/bind.hpp>
#include<boost/ref.hpp>
#include<boost/bind/arg.hpp>
#include<boost/function.hpp>
struct A
{
A(int v):value(v){}
int someFun(){return value;}
int someOtherFun(int v=0){return v+value;}
int value;
};
int main() {
boost::shared_ptr<A> a(new A(42));
boost::bind(&A::someOtherFun,a, _1)(1); //Error
boost::bind(&A::someFun,a)();
boost::function<int(int)>b(boost::bind(&A::someOtherFun,a, _1));
boost::function<int()>c(boost::bind(&A::someOtherFun,a, 0));
return 0;
}
I2luY2x1ZGU8Ym9vc3Qvc2hhcmVkX3B0ci5ocHA+CiNpbmNsdWRlPGJvb3N0L2JpbmQuaHBwPgojaW5jbHVkZTxib29zdC9yZWYuaHBwPgojaW5jbHVkZTxib29zdC9iaW5kL2FyZy5ocHA+CiNpbmNsdWRlPGJvb3N0L2Z1bmN0aW9uLmhwcD4KCnN0cnVjdCBBCnsKICBBKGludCB2KTp2YWx1ZSh2KXt9CiAgaW50IHNvbWVGdW4oKXtyZXR1cm4gdmFsdWU7fQogIGludCBzb21lT3RoZXJGdW4oaW50IHY9MCl7cmV0dXJuIHYrdmFsdWU7fQogIGludCB2YWx1ZTsKfTsKCmludCBtYWluKCkgewogIGJvb3N0OjpzaGFyZWRfcHRyPEE+IGEobmV3IEEoNDIpKTsKICBib29zdDo6YmluZCgmQTo6c29tZU90aGVyRnVuLGEsIF8xKSgxKTsgLy9FcnJvcgogIGJvb3N0OjpiaW5kKCZBOjpzb21lRnVuLGEpKCk7CiAgYm9vc3Q6OmZ1bmN0aW9uPGludChpbnQpPmIoYm9vc3Q6OmJpbmQoJkE6OnNvbWVPdGhlckZ1bixhLCBfMSkpOwogIGJvb3N0OjpmdW5jdGlvbjxpbnQoKT5jKGJvb3N0OjpiaW5kKCZBOjpzb21lT3RoZXJGdW4sYSwgMCkpOwogIHJldHVybiAwOwp9IAoK