#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 &&param)
	{
		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;
}