#include <iostream>
struct Base
{
virtual void print(std::ostream& os) const { os << "Base"; }
virtual ~Base() {}
};
struct Derived1 : Base
{
void print(std::ostream& os) const { os << "Derived1"; }
};
std::ostream & operator <<(std::ostream & os, const Base & x) {
x.print(os);
return os;
}
#include <vector>
int main()
{
Base b;
Derived1 d;
std::vector<const Base*> v{&b, &d};
for (auto it = v.cbegin(); it != v.cend(); ++it)
{
std::cout << *(*it) << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEJhc2UKewogICB2aXJ0dWFsIHZvaWQgcHJpbnQoc3RkOjpvc3RyZWFtJiBvcykgY29uc3QgeyBvcyA8PCAiQmFzZSI7IH0KICAgdmlydHVhbCB+QmFzZSgpIHt9Cn07CgpzdHJ1Y3QgRGVyaXZlZDEgOiBCYXNlCnsKICB2b2lkIHByaW50KHN0ZDo6b3N0cmVhbSYgb3MpIGNvbnN0IHsgb3MgPDwgIkRlcml2ZWQxIjsgfQp9OwoKc3RkOjpvc3RyZWFtICYgb3BlcmF0b3IgPDwoc3RkOjpvc3RyZWFtICYgb3MsIGNvbnN0IEJhc2UgJiB4KSB7CiAgICAgIHgucHJpbnQob3MpOwogICAgICAgICAgcmV0dXJuIG9zOwp9CgojaW5jbHVkZSA8dmVjdG9yPgppbnQgbWFpbigpCnsKICBCYXNlIGI7CiAgRGVyaXZlZDEgZDsKICBzdGQ6OnZlY3Rvcjxjb25zdCBCYXNlKj4gdnsmYiwgJmR9OwoKICBmb3IgKGF1dG8gaXQgPSB2LmNiZWdpbigpOyBpdCAhPSB2LmNlbmQoKTsgKytpdCkKICB7CiAgICBzdGQ6OmNvdXQgPDwgKigqaXQpIDw8IHN0ZDo6ZW5kbDsKICB9CiAgCn0K