#include <functional>
using FPTR = std::function<int(int)>;
class A {
public:
FPTR worker;
int i;
A(int x) { i = x; }
};
template <class BASE>
class C : public BASE {
public:
C(int y) : BASE(y) {
this->worker = std::bind(&C<BASE>::doit, this, y);
}
int doit(int z) { return this->i + z; }
int doit_different(int z) { return this->i - z; }
};
int main() {
C<A> instance(66);
instance.worker(5);
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp1c2luZyBGUFRSID0gc3RkOjpmdW5jdGlvbjxpbnQoaW50KT47CgpjbGFzcyBBIHsKcHVibGljOgogIEZQVFIgd29ya2VyOwogIGludCBpOwogIEEoaW50IHgpIHsgaSA9IHg7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBCQVNFPgpjbGFzcyBDIDogcHVibGljIEJBU0UgewpwdWJsaWM6CiAgQyhpbnQgeSkgOiBCQVNFKHkpIHsKICAgIHRoaXMtPndvcmtlciA9IHN0ZDo6YmluZCgmQzxCQVNFPjo6ZG9pdCwgdGhpcywgeSk7CiAgfQogIGludCBkb2l0KGludCB6KSB7IHJldHVybiB0aGlzLT5pICsgejsgfQogIGludCBkb2l0X2RpZmZlcmVudChpbnQgeikgeyByZXR1cm4gdGhpcy0+aSAtIHo7IH0KfTsKCmludCBtYWluKCkgewogIEM8QT4gaW5zdGFuY2UoNjYpOwogIGluc3RhbmNlLndvcmtlcig1KTsKICByZXR1cm4gMDsKfQ==