#include <iostream>
#include <list>
#include <memory>

using Ptr = std::unique_ptr<int>;

Ptr f(bool arg) {
  std::list<Ptr> list;
  Ptr ptr(new int(1));
  list.push_back(std::move(ptr));

  if (arg) {
    Ptr&& obj1 = std::move(list.front());
    std::cout << obj1.get() << std::endl << list.front().get() << std::endl;
    list.pop_front();
    return std::move(obj1);
  }
  else {
    Ptr obj2 = std::move(list.front());
    std::cout << obj2.get() << std::endl << list.front().get() << std::endl;
    list.pop_front();
    return obj2;
  }
};

int main() {
  Ptr&& ptr1 = f(true);
  Ptr&& ptr2 = f(false);

  std::cout << !!ptr1 << std::endl << !!ptr2 << std::endl;

  return 0;
}
