fork(1) download
  1. #include <iostream>
  2. #include <string>
  3. #include <tuple>
  4. #include <type_traits>
  5. #include <utility>
  6. #include <vector>
  7.  
  8. template<int... Is>
  9. struct index_seq { };
  10.  
  11. template<int N, int... Is>
  12. struct make_index_seq : make_index_seq<N - 1, N - 1, Is...> { };
  13.  
  14. template<int... Is>
  15. struct make_index_seq<0, Is...> : index_seq<Is...> { };
  16.  
  17. template<class Cont, class Tup, int... Is>
  18. void emplace_back_impl(Cont& c, Tup&& tup, index_seq<Is...>)
  19. {
  20. using std::get;
  21. c.emplace_back(get<Is>(std::forward<Tup>(tup))...);
  22. }
  23.  
  24. template<class Cont, class... Tups>
  25. void emplace_multiple(Cont& c, Tups&&... tups)
  26. {
  27. int const unpack[]{
  28. 0, ((emplace_back_impl)(c, std::forward<Tups>(tups),
  29. make_index_seq<
  30. std::tuple_size<typename std::remove_reference<Tups>::type>{}
  31. >()), 0)...
  32. };
  33. static_cast<void>(unpack);
  34. }
  35.  
  36. int main()
  37. {
  38. std::vector<std::string> xs;
  39. emplace_multiple(xs, std::make_tuple("Hello, world!"), std::make_tuple(10, 'a'));
  40. for (auto const& i : xs) std::cout << i << '\n';
  41. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
Hello, world!
aaaaaaaaaa