#include <functional>
#include <iostream>
class TestClass {
private:
int i;
public:
TestClass(int i_): i(i_) {}
void func0() const { std::cout << "func0: " << i << std::endl; }
void func1() {
i += 1;
std::cout << "func1: " << i << std::endl;
}
};
int main() {
std::function<void (const TestClass&)> f0 = &TestClass::func0;
std::function<void (TestClass&)> f1 = &TestClass::func1;
TestClass c10(10);
f0(c10);
f1(c10);
TestClass c100(100);
f0(c100);
f1(c100);
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmNsYXNzIFRlc3RDbGFzcyB7CiBwcml2YXRlOgogIGludCBpOwogcHVibGljOgogIFRlc3RDbGFzcyhpbnQgaV8pOiBpKGlfKSB7fQogIHZvaWQgZnVuYzAoKSBjb25zdCB7IHN0ZDo6Y291dCA8PCAiZnVuYzA6ICIgPDwgaSA8PCBzdGQ6OmVuZGw7IH0KICB2b2lkIGZ1bmMxKCkgewogICAgaSArPSAxOwogICAgc3RkOjpjb3V0IDw8ICJmdW5jMTogIiA8PCBpIDw8IHN0ZDo6ZW5kbDsKICB9Cn07CgppbnQgbWFpbigpIHsKICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFRlc3RDbGFzcyYpPiBmMCA9ICZUZXN0Q2xhc3M6OmZ1bmMwOwogIHN0ZDo6ZnVuY3Rpb248dm9pZCAoVGVzdENsYXNzJik+IGYxID0gJlRlc3RDbGFzczo6ZnVuYzE7CgogIFRlc3RDbGFzcyBjMTAoMTApOwogIGYwKGMxMCk7CiAgZjEoYzEwKTsKCiAgVGVzdENsYXNzIGMxMDAoMTAwKTsKICBmMChjMTAwKTsKICBmMShjMTAwKTsKfQ==