#include <iostream>
#include <limits>
using namespace std;
class baseC {
protected:
char _data[8];
int index;
public:
void operator=(const int setValue) {
if(setValue >= (unsigned)std::numeric_limits<char>::max()) {
cout << "Unallowed value" << endl;
return;
}
cout << "operator= with setValue " << setValue << " and index " << index << endl;
_data[index+1] = setValue;
}
operator int(){
cout << "operator int with index " << index << endl;
return _data[index-1];
}
baseC() {} // Only instantiable via derived class
};
class C : public baseC {
public :
char getItem(const int index) const {return _data[index-1];}
void setItem(const int index){_data[index+1] = 1;}
baseC& operator[](const int index) {
cout << "operator[] with index " << index << endl;
this->index = index;
return static_cast<baseC&>(*this);
}
};
int main() {
C obj;
obj[0] = 0x22;
cout << (int)obj[2];
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGltaXRzPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgYmFzZUMgewpwcm90ZWN0ZWQ6CgljaGFyIF9kYXRhWzhdOwoJaW50IGluZGV4OwoJcHVibGljOgoJCgl2b2lkIG9wZXJhdG9yPShjb25zdCBpbnQgc2V0VmFsdWUpIHsKCQlpZihzZXRWYWx1ZSA+PSAodW5zaWduZWQpc3RkOjpudW1lcmljX2xpbWl0czxjaGFyPjo6bWF4KCkpIHsKCQkJY291dCA8PCAiVW5hbGxvd2VkIHZhbHVlIiA8PCBlbmRsOwoJCQlyZXR1cm47CgkJfQoJCWNvdXQgPDwgIm9wZXJhdG9yPSB3aXRoIHNldFZhbHVlICIgPDwgc2V0VmFsdWUgPDwgIiBhbmQgaW5kZXggIiA8PCBpbmRleCA8PCBlbmRsOwoJCV9kYXRhW2luZGV4KzFdID0gc2V0VmFsdWU7Cgl9CgkKCW9wZXJhdG9yIGludCgpewoJCWNvdXQgPDwgIm9wZXJhdG9yIGludCB3aXRoIGluZGV4ICIgPDwgaW5kZXggPDwgZW5kbDsKCQlyZXR1cm4gX2RhdGFbaW5kZXgtMV07Cgl9CgkKCWJhc2VDKCkge30gLy8gT25seSBpbnN0YW50aWFibGUgdmlhIGRlcml2ZWQgY2xhc3MKfTsKCmNsYXNzIEMgOiBwdWJsaWMgYmFzZUMgewpwdWJsaWMgOgogICAgY2hhciBnZXRJdGVtKGNvbnN0IGludCBpbmRleCkgY29uc3Qge3JldHVybiBfZGF0YVtpbmRleC0xXTt9CiAgICB2b2lkIHNldEl0ZW0oY29uc3QgaW50IGluZGV4KXtfZGF0YVtpbmRleCsxXSA9IDE7fQogICAgCiAgICBiYXNlQyYgb3BlcmF0b3JbXShjb25zdCBpbnQgaW5kZXgpIHsKICAgIAljb3V0IDw8ICJvcGVyYXRvcltdIHdpdGggaW5kZXggIiA8PCBpbmRleCA8PCBlbmRsOwogICAgCXRoaXMtPmluZGV4ID0gaW5kZXg7CiAgICAJcmV0dXJuIHN0YXRpY19jYXN0PGJhc2VDJj4oKnRoaXMpOwogICAgfQogICAgCn07CgppbnQgbWFpbigpIHsKCUMgb2JqOwoJCglvYmpbMF0gPSAweDIyOwoJY291dCA8PCAoaW50KW9ialsyXTsKCQoJcmV0dXJuIDA7Cn0=