#include <iostream>
#include <memory>
struct Shape {};
struct Circle : public Shape
{
Circle()
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
struct Rectangle : public Shape
{
Rectangle()
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
int main()
{
for (int i=0; i<5; ++i)
{
std::unique_ptr<Shape> sp = (i % 2)
? std::unique_ptr<Shape>(new Circle())
: std::unique_ptr<Shape>(new Rectangle());
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IFNoYXBlIHt9OwoKc3RydWN0IENpcmNsZSA6IHB1YmxpYyBTaGFwZQp7CiAgICBDaXJjbGUoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICB9Cn07CgpzdHJ1Y3QgUmVjdGFuZ2xlIDogcHVibGljIFNoYXBlCnsKICAgIFJlY3RhbmdsZSgpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgJ1xuJzsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgZm9yIChpbnQgaT0wOyBpPDU7ICsraSkKICAgIHsKICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IHNwID0gKGkgJSAyKQogICAgICAgICAgICA/IHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4obmV3IENpcmNsZSgpKQogICAgICAgICAgICA6IHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4obmV3IFJlY3RhbmdsZSgpKTsKICAgIH0KICAgIAp9