struct virt_z {
double x;
double y;
struct z_wrap {
virt_z &parent;
operator double() { return parent.x * parent.y; }
z_wrap &operator=( double in ) {
parent.x = in;
parent.y = 1;
return *this;
}
z_wrap( virt_z &in ) : parent( in ) {}
} z;
virt_z() : z( *this ) {}
virt_z( virt_z const &o ) : x( o.x ), y( o.y ), z( *this ) {}
};
#include <iostream>
int main() {
virt_z xyz;
xyz.x = 5;
xyz.y = 2;
std::cout << xyz.z << '\n';
xyz.z = 8;
std::cout << xyz.x << ' ' << xyz.y << ' ' << xyz.z << '\n';
}
c3RydWN0IHZpcnRfeiB7CiAgICBkb3VibGUgeDsKICAgIGRvdWJsZSB5OwogICAgc3RydWN0IHpfd3JhcCB7CiAgICAgICAgdmlydF96ICZwYXJlbnQ7CgogICAgICAgIG9wZXJhdG9yIGRvdWJsZSgpIHsgcmV0dXJuIHBhcmVudC54ICogcGFyZW50Lnk7IH0KICAgICAgICB6X3dyYXAgJm9wZXJhdG9yPSggZG91YmxlIGluICkgewogICAgICAgICAgICBwYXJlbnQueCA9IGluOwogICAgICAgICAgICBwYXJlbnQueSA9IDE7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgel93cmFwKCB2aXJ0X3ogJmluICkgOiBwYXJlbnQoIGluICkge30KICAgIH0gejsKCiAgICB2aXJ0X3ooKSA6IHooICp0aGlzICkge30KICAgIHZpcnRfeiggdmlydF96IGNvbnN0ICZvICkgOiB4KCBvLnggKSwgeSggby55ICksIHooICp0aGlzICkge30KfTsKCiNpbmNsdWRlIDxpb3N0cmVhbT4KCmludCBtYWluKCkgewogICAgdmlydF96IHh5ejsKICAgIHh5ei54ID0gNTsKICAgIHh5ei55ID0gMjsKICAgIHN0ZDo6Y291dCA8PCB4eXoueiA8PCAnXG4nOwogICAgeHl6LnogPSA4OwogICAgc3RkOjpjb3V0IDw8IHh5ei54IDw8ICcgJyA8PCB4eXoueSA8PCAnICcgPDwgeHl6LnogPDwgJ1xuJzsKfQo=