#include <iostream>
#include <memory>
#include <deque>
#include <utility>
class DataBox
{
public:
DataBox(int i) {}
};
template <typename T>
class Queue
{
public:
template <typename U>
void push(U &¶m)
{
m_deque.push_front(std::forward<T>(param));
}
private:
std::deque<T> m_deque;
};
int main()
{
Queue<std::unique_ptr<DataBox>> queue;
std::unique_ptr<DataBox> d1 = std::make_unique<DataBox>(11);
std::unique_ptr<DataBox> d2 = std::make_unique<DataBox>(22);
queue.push(d1);
queue.push(std::move(d2));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8ZGVxdWU+CiNpbmNsdWRlIDx1dGlsaXR5PgoKY2xhc3MgRGF0YUJveCAKewpwdWJsaWM6CglEYXRhQm94KGludCBpKSB7fQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFF1ZXVlCnsKcHVibGljOgoJdGVtcGxhdGUgPHR5cGVuYW1lIFU+Cgl2b2lkIHB1c2goVSAmJnBhcmFtKQoJewoJCW1fZGVxdWUucHVzaF9mcm9udChzdGQ6OmZvcndhcmQ8VD4ocGFyYW0pKTsKCX0KCnByaXZhdGU6CglzdGQ6OmRlcXVlPFQ+IG1fZGVxdWU7Cn07CQkKCmludCBtYWluKCkKewoJUXVldWU8c3RkOjp1bmlxdWVfcHRyPERhdGFCb3g+PiBxdWV1ZTsKCXN0ZDo6dW5pcXVlX3B0cjxEYXRhQm94PiBkMSA9IHN0ZDo6bWFrZV91bmlxdWU8RGF0YUJveD4oMTEpOwoJc3RkOjp1bmlxdWVfcHRyPERhdGFCb3g+IGQyID0gc3RkOjptYWtlX3VuaXF1ZTxEYXRhQm94PigyMik7CglxdWV1ZS5wdXNoKGQxKTsKCXF1ZXVlLnB1c2goc3RkOjptb3ZlKGQyKSk7CgoJcmV0dXJuIDA7Cn0=