#include <iostream>
#include <unordered_map>
#include <map>
#include <cinttypes>
class MyClass
{
typedef std::unordered_map<uint32_t, MyClass> Instances;
friend Instances;
friend std::pair<uint32_t, MyClass>;
friend std::pair<const uint32_t, MyClass>;
public:
static const MyClass& getObject(uint32_t key) { return instances_[key] = 2 * key; }
~MyClass() {}
int n() const { return n_; }
private:
MyClass() : n_(-1) { }
MyClass& operator=(int n) { n_ = n; return *this; }
int n_;
static Instances instances_;
};
MyClass::Instances MyClass::instances_;
int main() {
const MyClass& m20 = MyClass::getObject(20);
const MyClass& m21 = MyClass::getObject(21);
std::cout << m20.n() << ' ' << m21.n() << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGNpbnR0eXBlcz4KCmNsYXNzIE15Q2xhc3MKewogICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIE15Q2xhc3M+IEluc3RhbmNlczsKICAgIGZyaWVuZCBJbnN0YW5jZXM7CiAgICBmcmllbmQgc3RkOjpwYWlyPHVpbnQzMl90LCBNeUNsYXNzPjsKICAgIGZyaWVuZCBzdGQ6OnBhaXI8Y29uc3QgdWludDMyX3QsIE15Q2xhc3M+OwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBNeUNsYXNzJiBnZXRPYmplY3QodWludDMyX3Qga2V5KSB7IHJldHVybiBpbnN0YW5jZXNfW2tleV0gPSAyICoga2V5OyB9CiAgICB+TXlDbGFzcygpIHt9CiAgICBpbnQgbigpIGNvbnN0IHsgcmV0dXJuIG5fOyB9CiAgcHJpdmF0ZToKICAgIE15Q2xhc3MoKSA6IG5fKC0xKSB7IH0KICAgIE15Q2xhc3MmIG9wZXJhdG9yPShpbnQgbikgeyBuXyA9IG47IHJldHVybiAqdGhpczsgfQogICAgaW50IG5fOwogICAgc3RhdGljIEluc3RhbmNlcyBpbnN0YW5jZXNfOwp9OwoKTXlDbGFzczo6SW5zdGFuY2VzIE15Q2xhc3M6Omluc3RhbmNlc187CgppbnQgbWFpbigpIHsKCWNvbnN0IE15Q2xhc3MmIG0yMCA9IE15Q2xhc3M6OmdldE9iamVjdCgyMCk7Cgljb25zdCBNeUNsYXNzJiBtMjEgPSBNeUNsYXNzOjpnZXRPYmplY3QoMjEpOwoJc3RkOjpjb3V0IDw8IG0yMC5uKCkgPDwgJyAnIDw8IG0yMS5uKCkgPDwgJ1xuJzsKfQ==