#include <iostream>
#include <memory>
#include <vector>
using namespace std;
struct base {
virtual void foo() {
cout << "base" << endl;
}
};
struct a: base {
void foo() override {
cout << "a" << endl;
}
};
struct b: base {
void foo() override {
cout << "b" << endl;
}
};
int main() {
vector<unique_ptr<base>> container;
for(int i = 0; i < 5; ++i) {
container.emplace_back(new a{});
container.emplace_back(new b{});
}
for(auto &el: container) {
el->foo();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGJhc2UgewoJdmlydHVhbCB2b2lkIGZvbygpIHsKCQljb3V0IDw8ICJiYXNlIiA8PCBlbmRsOwoJfQp9OwoKc3RydWN0IGE6IGJhc2UgewoJdm9pZCBmb28oKSBvdmVycmlkZSB7CgkJY291dCA8PCAiYSIgPDwgZW5kbDsKCX0JCn07CnN0cnVjdCBiOiBiYXNlIHsKCXZvaWQgZm9vKCkgb3ZlcnJpZGUgewoJCWNvdXQgPDwgImIiIDw8IGVuZGw7Cgl9Cn07CgppbnQgbWFpbigpIHsKCXZlY3Rvcjx1bmlxdWVfcHRyPGJhc2U+PiBjb250YWluZXI7CgkKCWZvcihpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKCQljb250YWluZXIuZW1wbGFjZV9iYWNrKG5ldyBhe30pOwoJCWNvbnRhaW5lci5lbXBsYWNlX2JhY2sobmV3IGJ7fSk7Cgl9CgkKCWZvcihhdXRvICZlbDogY29udGFpbmVyKSB7CgkJZWwtPmZvbygpOwoJfQoJcmV0dXJuIDA7Cn0=