#include <iostream>
using namespace std;
struct a {
a(int i = 0) : i(i) {}
int i;
friend ostream& operator <<(ostream& packet, const a *t);
friend ostream& operator <<(ostream& packet, const a &t);
friend ostream& operator <<(ostream& packet, a *t);
friend ostream& operator <<(ostream& packet, a &t);
};
// Independent
ostream& operator <<(ostream& packet, const a &t) {
return (packet << t.i);
}
// Dependent ones
ostream& operator <<(ostream& packet, const a *t) {
return (packet << (*t));
}
ostream& operator <<(ostream& packet, a &t) {
return (packet << const_cast<const a &>(t));
}
ostream& operator <<(ostream& packet, a *t) {
return (packet << const_cast<const a *>(t));
}
int main() {
a rw(42);
const a ro(35);
cout << rw << endl;
cout << &rw << endl;
cout << ro << endl;
cout << &ro << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGEgewoJYShpbnQgaSA9IDApIDogaShpKSB7fQoJaW50IGk7CglmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwob3N0cmVhbSYgcGFja2V0LCBjb25zdCBhICp0KTsKCWZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvciA8PChvc3RyZWFtJiBwYWNrZXQsIGNvbnN0IGEgJnQpOwoJZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yIDw8KG9zdHJlYW0mIHBhY2tldCwgYSAqdCk7CglmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwob3N0cmVhbSYgcGFja2V0LCBhICZ0KTsKfTsKCi8vIEluZGVwZW5kZW50Cm9zdHJlYW0mIG9wZXJhdG9yIDw8KG9zdHJlYW0mIHBhY2tldCwgY29uc3QgYSAmdCkgIHsKCXJldHVybiAocGFja2V0IDw8IHQuaSk7Cn0KCi8vIERlcGVuZGVudCBvbmVzCm9zdHJlYW0mIG9wZXJhdG9yIDw8KG9zdHJlYW0mIHBhY2tldCwgY29uc3QgYSAqdCkgewoJcmV0dXJuIChwYWNrZXQgPDwgKCp0KSk7Cn0KCm9zdHJlYW0mIG9wZXJhdG9yIDw8KG9zdHJlYW0mIHBhY2tldCwgYSAmdCkgewoJcmV0dXJuIChwYWNrZXQgPDwgY29uc3RfY2FzdDxjb25zdCBhICY+KHQpKTsKfQoKb3N0cmVhbSYgb3BlcmF0b3IgPDwob3N0cmVhbSYgcGFja2V0LCBhICp0KSB7CglyZXR1cm4gKHBhY2tldCA8PCBjb25zdF9jYXN0PGNvbnN0IGEgKj4odCkpOwp9CgppbnQgbWFpbigpIHsKCWEgcncoNDIpOwoJY29uc3QgYSBybygzNSk7Cgljb3V0IDw8IHJ3IDw8IGVuZGw7Cgljb3V0IDw8ICZydyA8PCBlbmRsOwoJY291dCA8PCBybyA8PCBlbmRsOwoJY291dCA8PCAmcm8gPDwgZW5kbDsKCXJldHVybiAwOwp9