#include <iostream>
#include <vector>
#include <memory>
#include <string>
using namespace std;

class base
{
   int field1;
protected:
   base(int _field): 
   field1(_field){}
public:
  virtual string to_string()=0;
};

class subclass : public base
{
   int field2;

   public:
   subclass(int _field1, int _field2):
      base(_field1),field2(_field2){}


   string to_string()
   {
       return "I am a subtype!!";
   }
};

int main()
{
    vector<unique_ptr<base> > x;
    unique_ptr<base> item(new subclass(123,456));
    x.push_back(std::move(item));
    cout << x[0]->to_string() <<endl;
    return 0;
}