#include <iostream>
#include <string>
#include <tuple>
#include <type_traits>
#include <utility>
#include <vector>
template<int... Is>
struct index_seq { };
template<int N, int... Is>
struct make_index_seq : make_index_seq<N - 1, N - 1, Is...> { };
template<int... Is>
struct make_index_seq<0, Is...> : index_seq<Is...> { };
template<class Cont, class Tup, int... Is>
void emplace_back_impl(Cont& c, Tup&& tup, index_seq<Is...>)
{
using std::get;
c.emplace_back(get<Is>(std::forward<Tup>(tup))...);
}
template<class Cont, class... Tups>
void emplace_multiple(Cont& c, Tups&&... tups)
{
int const unpack[]{
0, ((emplace_back_impl)(c, std::forward<Tups>(tups),
make_index_seq<
std::tuple_size<typename std::remove_reference<Tups>::type>{}
>()), 0)...
};
static_cast<void>(unpack);
}
int main()
{
std::vector<std::string> xs;
emplace_multiple(xs, std::make_tuple("Hello, world!"), std::make_tuple(10, 'a'));
for (auto const& i : xs) std::cout << i << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZTxpbnQuLi4gSXM+CnN0cnVjdCBpbmRleF9zZXEgeyB9OwoKdGVtcGxhdGU8aW50IE4sIGludC4uLiBJcz4Kc3RydWN0IG1ha2VfaW5kZXhfc2VxIDogbWFrZV9pbmRleF9zZXE8TiAtIDEsIE4gLSAxLCBJcy4uLj4geyB9OwoKdGVtcGxhdGU8aW50Li4uIElzPgpzdHJ1Y3QgbWFrZV9pbmRleF9zZXE8MCwgSXMuLi4+IDogaW5kZXhfc2VxPElzLi4uPiB7IH07Cgp0ZW1wbGF0ZTxjbGFzcyBDb250LCBjbGFzcyBUdXAsIGludC4uLiBJcz4Kdm9pZCBlbXBsYWNlX2JhY2tfaW1wbChDb250JiBjLCBUdXAmJiB0dXAsIGluZGV4X3NlcTxJcy4uLj4pCnsKCXVzaW5nIHN0ZDo6Z2V0OwogICAgYy5lbXBsYWNlX2JhY2soZ2V0PElzPihzdGQ6OmZvcndhcmQ8VHVwPih0dXApKS4uLik7Cn0KCnRlbXBsYXRlPGNsYXNzIENvbnQsIGNsYXNzLi4uIFR1cHM+CnZvaWQgZW1wbGFjZV9tdWx0aXBsZShDb250JiBjLCBUdXBzJiYuLi4gdHVwcykKewogICAgaW50IGNvbnN0IHVucGFja1tdewogICAgICAgIDAsICgoZW1wbGFjZV9iYWNrX2ltcGwpKGMsIHN0ZDo6Zm9yd2FyZDxUdXBzPih0dXBzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2luZGV4X3NlcTwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0dXBsZV9zaXplPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUdXBzPjo6dHlwZT57fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4oKSksIDApLi4uCiAgICB9OwogICAgc3RhdGljX2Nhc3Q8dm9pZD4odW5wYWNrKTsKfQoKaW50IG1haW4oKQp7CglzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4geHM7CgllbXBsYWNlX211bHRpcGxlKHhzLCBzdGQ6Om1ha2VfdHVwbGUoIkhlbGxvLCB3b3JsZCEiKSwgc3RkOjptYWtlX3R1cGxlKDEwLCAnYScpKTsKCWZvciAoYXV0byBjb25zdCYgaSA6IHhzKSBzdGQ6OmNvdXQgPDwgaSA8PCAnXG4nOwp9