#include <iostream>
#include <map>
#include <memory>
using namespace std;
struct foo {
virtual void print() { cout << "foo"; }
};
struct bar : foo {
virtual void print() { cout << "bar"; }
};
int main()
{
map<int, shared_ptr<foo>> test = { {1, shared_ptr<foo>(new foo)}, {2, shared_ptr<foo>(new bar)} };
test[2]->print();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8bWVtb3J5PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBmb28gewogIHZpcnR1YWwgdm9pZCBwcmludCgpIHsgY291dCA8PCAiZm9vIjsgIH0KfTsKCnN0cnVjdCBiYXIgOiBmb28gewogIHZpcnR1YWwgdm9pZCBwcmludCgpIHsgY291dCA8PCAiYmFyIjsgfQp9OwoKaW50IG1haW4oKQp7CiAgbWFwPGludCwgc2hhcmVkX3B0cjxmb28+PiB0ZXN0ID0geyB7MSwgc2hhcmVkX3B0cjxmb28+KG5ldyBmb28pfSwgezIsIHNoYXJlZF9wdHI8Zm9vPihuZXcgYmFyKX0gfTsKICB0ZXN0WzJdLT5wcmludCgpOwp9