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

template <typename T>
void
fill_list(std::list<T> &l, T &&e)
{
    l.push_back(std::move(e));
}

template <typename T, typename... Args>
void
fill_list(std::list<T> &l, T &&e, Args... args)
{
    l.push_back(std::move(e));
    fill_list(l, std::move(args)...);
}

int
main(void)
{
    std::list<std::unique_ptr<int>> ints;
    fill_list(ints,
              std::unique_ptr<int>(new int(9)),
              std::unique_ptr<int>(new int(66)));

    std::cout << *ints.front() << std::endl;
    std::cout << *ints.back() << std::endl;
    return 0;
}
