#include <cstdlib>   // for EXIT_SUCCESS

#include <iostream>  // for std::cout, std::endl
#include <memory>    // for std::unique_ptr
#include <vector>    // for std::vector

using std::unique_ptr;
using std::vector;
using std::cout;
using std::endl;

int main(int argc, char** argv) {
  vector<unique_ptr<int> > vec;

  vec.push_back(unique_ptr<int>(new int(9)));
  vec.push_back(unique_ptr<int>(new int(5)));
  vec.push_back(unique_ptr<int>(new int(7)));

  // z is (a copy of) the (int pointed to by
  // the unique_ptr in vec[1])
  int z = *vec[1];
  cout << "z is: " << z << endl;

  // compiler error, since unique_ptrs can't be copied
  //unique_ptr<int> copied(vec[1]);

  // works, but now vec[1] has a null pointer.
  unique_ptr<int> moved = std::move(vec[1]);
  cout << "*moved: " << *moved << endl;

  return EXIT_SUCCESS;
}