#include <iostream>
using namespace std;
class A {
int* a;
public:
A(int* a) {
this->a = a;
}
int& operator[](int i) {
cout << "non-const" << endl;
return a[i];
}
const int& operator[](int i) const {
cout << "const" << endl;
return a[i];
}
};
void test(const A& a) {
cout << a[0] << endl;
}
int main() {
int a1[] = {1, 2, 3};
int a2[] = {4, 5, 6};
A a(a1);
const A b(a2);
cout << a[0] << endl;
cout << b[0] << endl;
a[0] = 5;
test(a);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSB7CglpbnQqIGE7CgkKCXB1YmxpYzoKCQlBKGludCogYSkgewoJCQl0aGlzLT5hID0gYTsKCQl9CgkJCgkJaW50JiBvcGVyYXRvcltdKGludCBpKSB7CgkJCWNvdXQgPDwgIm5vbi1jb25zdCIgPDwgZW5kbDsKCQkJcmV0dXJuIGFbaV07CgkJfQoJCQoJCWNvbnN0IGludCYgb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgewoJCQljb3V0IDw8ICJjb25zdCIgPDwgZW5kbDsKCQkJcmV0dXJuIGFbaV07CgkJfQp9OwoKdm9pZCB0ZXN0KGNvbnN0IEEmIGEpIHsKCWNvdXQgPDwgYVswXSA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKCWludCBhMVtdID0gezEsIDIsIDN9OwoJaW50IGEyW10gPSB7NCwgNSwgNn07CglBIGEoYTEpOwoJY29uc3QgQSBiKGEyKTsKCWNvdXQgPDwgYVswXSA8PCBlbmRsOwoJY291dCA8PCBiWzBdIDw8IGVuZGw7CglhWzBdID0gNTsKCXRlc3QoYSk7CglyZXR1cm4gMDsKfQ==