#include <iostream>
using namespace std;
struct ghash {
unsigned code; // all the values you need here
// may be some additional common hash functions
};
ostream& operator<< (ostream&os, ghash x) { // for example a general display function
return os<<"HASH "<<x.code;
}
struct X {
int k;
int l;
operator ghash () { // conversion oeprator
ghash rh;
rh.code = (unsigned) k^l; // compute the hash
return rh;
}
};
int main() {
X myx;
myx.k=-1;
myx.l=20;
ghash hx = myx; // implicit converstion from X to its hash
cout<<hx <<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGdoYXNoIHsKICAgICB1bnNpZ25lZCBjb2RlOyAgIC8vIGFsbCB0aGUgdmFsdWVzIHlvdSBuZWVkIGhlcmUgCiAgICAgICAgICAgICAgICAgICAgICAvLyBtYXkgYmUgc29tZSBhZGRpdGlvbmFsIGNvbW1vbiBoYXNoIGZ1bmN0aW9ucwp9OyAKb3N0cmVhbSYgb3BlcmF0b3I8PCAob3N0cmVhbSZvcywgZ2hhc2ggeCkgeyAgLy8gZm9yIGV4YW1wbGUgYSBnZW5lcmFsIGRpc3BsYXkgZnVuY3Rpb24KCXJldHVybiBvczw8IkhBU0ggIjw8eC5jb2RlOyAKfQoKc3RydWN0IFggeyAKCWludCBrOyAKCWludCBsOwoJCiAgICBvcGVyYXRvciBnaGFzaCAoKSB7ICAvLyBjb252ZXJzaW9uIG9lcHJhdG9yIAogICAgICAgIGdoYXNoIHJoOyAKICAgICAgICByaC5jb2RlID0gKHVuc2lnbmVkKSBrXmw7IC8vIGNvbXB1dGUgdGhlIGhhc2gKICAgICAgICByZXR1cm4gcmg7IAogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBYIG15eDsgCiAgICBteXguaz0tMTsgCiAgICBteXgubD0yMDsgCiAgICAKICAgIGdoYXNoIGh4ID0gbXl4OyAvLyBpbXBsaWNpdCBjb252ZXJzdGlvbiBmcm9tIFggdG8gaXRzIGhhc2ggCiAgICBjb3V0PDxoeCA8PGVuZGw7IAogICAgCglyZXR1cm4gMDsKfQ==