#include <iostream>
#include <functional>
using namespace std;
class test {
public:
typedef std::function<void(test*)> check_fun_type;
void mF1(check_fun_type ptr);
void check1();
void check2(int v1);
};
void test::check1() {
std::cout << "check1" << std::endl;
}
void test::check2(int v1) {
std::cout << "check2 " << v1 << std::endl;
}
void test::mF1(check_fun_type ptr) {
ptr(this);
}
int main() {
using namespace std::placeholders;
test t1;
t1.mF1(std::bind(&test::check2, _1, 2));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIHRlc3QgewpwdWJsaWM6CiAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQodGVzdCopPiBjaGVja19mdW5fdHlwZTsKCiAgdm9pZCBtRjEoY2hlY2tfZnVuX3R5cGUgcHRyKTsKICB2b2lkIGNoZWNrMSgpOwogIHZvaWQgY2hlY2syKGludCB2MSk7Cn07Cgp2b2lkIHRlc3Q6OmNoZWNrMSgpIHsKICBzdGQ6OmNvdXQgPDwgImNoZWNrMSIgPDwgc3RkOjplbmRsOwp9Cgp2b2lkIHRlc3Q6OmNoZWNrMihpbnQgdjEpIHsKICBzdGQ6OmNvdXQgPDwgImNoZWNrMiAiIDw8IHYxIDw8IHN0ZDo6ZW5kbDsKfQoKdm9pZCB0ZXN0OjptRjEoY2hlY2tfZnVuX3R5cGUgcHRyKSB7CiAgcHRyKHRoaXMpOwp9CgppbnQgbWFpbigpIHsKCQoJdXNpbmcgbmFtZXNwYWNlIHN0ZDo6cGxhY2Vob2xkZXJzOwogICAgCiAgICB0ZXN0IHQxOwogICAgdDEubUYxKHN0ZDo6YmluZCgmdGVzdDo6Y2hlY2syLCBfMSwgMikpOwp9Cg==