fork(1) download
  1. #include <list>
  2.  
  3. namespace detail
  4. {
  5. template<typename T>
  6. void MakeList(std::list<typename std::remove_reference<T>::type>& l, T&& elem)
  7. {
  8. l.push_back(std::forward<T>(elem));
  9. }
  10.  
  11. template<typename T, typename... Ts>
  12. void MakeList(
  13. std::list<typename std::remove_reference<T>::type>& l,
  14. T&& elem, Ts&&... elems)
  15. {
  16. l.push_back(std::forward<T>(elem));
  17. MakeList(l, std::forward<Ts>(elems)...);
  18. }
  19. }
  20.  
  21. template<typename T, typename... Ts>
  22. std::list<typename std::remove_reference<T>::type> MakeList(
  23. T&& elem, Ts&&... elems)
  24. {
  25. std::list<typename std::remove_reference<T>::type> l;
  26. detail::MakeList(l, std::forward<T>(elem), std::forward<Ts>(elems)...);
  27. return l;
  28. }
  29.  
  30. #include <iostream>
  31. #include <string>
  32.  
  33. struct Politician
  34. {
  35. std::string name;
  36. std::string surname;
  37. };
  38.  
  39. int main()
  40. {
  41. Politician p1{"John", "Smith"};
  42. Politician p2{"Mike", "Black"};
  43. Politician p3{"George", "White"};
  44.  
  45. std::list<Politician> myList = MakeList(p1, p2, p3);
  46.  
  47. for (auto const& p : myList)
  48. {
  49. std::cout << p.name << " " << p.surname << std::endl;
  50. }
  51. }
  52.  
Success #stdin #stdout 0s 2988KB
stdin
Standard input is empty
stdout
John Smith
Mike Black
George White