#include <functional>
#include <iostream>
#include <memory>
struct Toto
{
void foo( int param )
{
std::cout << "foo: " << param << std::endl;
}
};
int main() {
std::shared_ptr<Toto> ptr = std::make_shared<Toto>();
std::function< void(int) > func( std::bind( &Toto::foo,
std::bind( [ptr] () { return ptr.get(); } ),
std::placeholders::_1
) );
func( 1 );
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KCnN0cnVjdCBUb3RvCnsKICAgIHZvaWQgZm9vKCBpbnQgcGFyYW0gKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiZm9vOiAiIDw8IHBhcmFtIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgc3RkOjpzaGFyZWRfcHRyPFRvdG8+IHB0ciA9IHN0ZDo6bWFrZV9zaGFyZWQ8VG90bz4oKTsKICAgIHN0ZDo6ZnVuY3Rpb248IHZvaWQoaW50KSA+IGZ1bmMoIHN0ZDo6YmluZCggJlRvdG86OmZvbywKICAgICAgICBzdGQ6OmJpbmQoIFtwdHJdICgpIHsgcmV0dXJuIHB0ci5nZXQoKTsgfSApLAogICAgICAgIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMQogICAgKSApOwogICAgCiAgICBmdW5jKCAxICk7Cn0K