#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPG1lbW9yeT4KCnVzaW5nIFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxpbnQ+OwoKUHRyIGYoYm9vbCBhcmcpIHsKICBzdGQ6Omxpc3Q8UHRyPiBsaXN0OwogIFB0ciBwdHIobmV3IGludCgxKSk7CiAgbGlzdC5wdXNoX2JhY2soc3RkOjptb3ZlKHB0cikpOwoKICBpZiAoYXJnKSB7CiAgICBQdHImJiBvYmoxID0gc3RkOjptb3ZlKGxpc3QuZnJvbnQoKSk7CiAgICBzdGQ6OmNvdXQgPDwgb2JqMS5nZXQoKSA8PCBzdGQ6OmVuZGwgPDwgbGlzdC5mcm9udCgpLmdldCgpIDw8IHN0ZDo6ZW5kbDsKICAgIGxpc3QucG9wX2Zyb250KCk7CiAgICByZXR1cm4gc3RkOjptb3ZlKG9iajEpOwogIH0KICBlbHNlIHsKICAgIFB0ciBvYmoyID0gc3RkOjptb3ZlKGxpc3QuZnJvbnQoKSk7CiAgICBzdGQ6OmNvdXQgPDwgb2JqMi5nZXQoKSA8PCBzdGQ6OmVuZGwgPDwgbGlzdC5mcm9udCgpLmdldCgpIDw8IHN0ZDo6ZW5kbDsKICAgIGxpc3QucG9wX2Zyb250KCk7CiAgICByZXR1cm4gb2JqMjsKICB9Cn07CgppbnQgbWFpbigpIHsKICBQdHImJiBwdHIxID0gZih0cnVlKTsKICBQdHImJiBwdHIyID0gZihmYWxzZSk7CgogIHN0ZDo6Y291dCA8PCAhIXB0cjEgPDwgc3RkOjplbmRsIDw8ICEhcHRyMiA8PCBzdGQ6OmVuZGw7CgogIHJldHVybiAwOwp9Cg==