#include <iostream>
using namespace std;
class IntRef {
int *ptr;
int copy;
public:
IntRef(int& d) : ptr(&d) {}
IntRef& operator=(const int& rhs) {
// Detach from the original on assignment
copy = rhs;
ptr = ©
}
operator int() const {
return *ptr;
}
};
int main() {
int x = 5; //Original variable
IntRef y(x); //Reference variable to x.
x = 5; //Modifying original variable.
cout<<x<<" "<<y<<endl;
y = 10; //Modifying reference variable.
cout<<x<<" "<<y<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIGNsYXNzIEludFJlZiB7CiAgICAgICAgaW50ICpwdHI7CiAgICAgICAgaW50IGNvcHk7CiAgICBwdWJsaWM6CiAgICAgICAgSW50UmVmKGludCYgZCkgOiBwdHIoJmQpIHt9CiAgICAgICAgSW50UmVmJiBvcGVyYXRvcj0oY29uc3QgaW50JiByaHMpIHsKICAgICAgICAgICAgLy8gRGV0YWNoIGZyb20gdGhlIG9yaWdpbmFsIG9uIGFzc2lnbm1lbnQKICAgICAgICAgICAgY29weSA9IHJoczsKICAgICAgICAgICAgcHRyID0gJmNvcHk7CiAgICAgICAgfQogICAgICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsKICAgICAgICAgICAgcmV0dXJuICpwdHI7CiAgICAgICAgfQogICAgfTsKCmludCBtYWluKCkgewogICAgaW50IHggPSA1OyAgIC8vT3JpZ2luYWwgdmFyaWFibGUKICAgIEludFJlZiB5KHgpOyAvL1JlZmVyZW5jZSB2YXJpYWJsZSB0byB4LgogICAgeCA9IDU7ICAgICAgLy9Nb2RpZnlpbmcgb3JpZ2luYWwgdmFyaWFibGUuCiAgICBjb3V0PDx4PDwiICI8PHk8PGVuZGw7CiAgICB5ID0gMTA7ICAgICAgLy9Nb2RpZnlpbmcgcmVmZXJlbmNlIHZhcmlhYmxlLgogICAgY291dDw8eDw8IiAiPDx5PDxlbmRsOwogICAgcmV0dXJuIDA7Cn0=