#include <iostream>
class A {
public:
virtual int a1() = 0;
int a2() {
return a3();
}
protected:
int a3() {
return a1();
}
};
class B : public A {
public:
virtual int a1() {
return 1;
}
};
int main() {
B b_obj;
int value1 = b_obj.a2(); // This fails for OP.
std::cout << value1 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQSB7CnB1YmxpYzoKICAgIHZpcnR1YWwgaW50IGExKCkgPSAwOwogICAgaW50IGEyKCkgewogICAgICAgIHJldHVybiBhMygpOwogICAgfQpwcm90ZWN0ZWQ6CiAgICBpbnQgYTMoKSB7CiAgICAgICAgcmV0dXJuIGExKCk7CiAgICB9Cn07CgpjbGFzcyBCIDogcHVibGljIEEgewpwdWJsaWM6CiAgICB2aXJ0dWFsIGludCBhMSgpIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgQiBiX29iajsKICAgIGludCB2YWx1ZTEgPSBiX29iai5hMigpOyAvLyBUaGlzIGZhaWxzIGZvciBPUC4KICAgIHN0ZDo6Y291dCA8PCB2YWx1ZTEgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=