#include <iostream>
#include <tuple>
#include <vector>
namespace detail
{
template <typename... Ts>
struct tuple_change { };
template <typename... Ts>
struct tuple_change<std::tuple<Ts...>>
{
using type = std::tuple<std::vector<Ts>...>;
};
template <int... Is>
struct index { };
template <int N, int... Is>
struct gen_seq : gen_seq<N - 1, N - 1, Is...> { };
template <int... Is>
struct gen_seq<0, Is...> : index<Is...> { };
}
template <typename... Args, int... Is>
void fill(std::tuple<Args...>& var, detail::index<Is...>)
{
auto l = { (std::get<Is>(var).assign(5, 11), 0)... };
// here I just decided to make the size 5
(void)l;
}
template <typename... Args>
void fill(std::tuple<Args...>& var)
{
fill(var, detail::gen_seq<sizeof...(Args)>{});
}
template <typename T>
static void print(std::vector<T>& v)
{
for (auto a : v)
{
std::cout << std::boolalpha << a << std::endl;
}
std::cout << std::endl;
}
template <typename... Ts, int... Is>
static void print(std::tuple<Ts...>& var, detail::index<Is...>)
{
auto l = { (print(std::get<Is>(var)), 0)... };
(void)l;
}
template <typename... Ts>
static void print(std::tuple<Ts...>& var)
{
print(var, detail::gen_seq<sizeof...(Ts)>{});
}
using result_type = detail::tuple_change<std::tuple<int, bool>>::type;
int main()
{
result_type r;
fill(r);
print(r);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx2ZWN0b3I+CgpuYW1lc3BhY2UgZGV0YWlsCnsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KICAgIHN0cnVjdCB0dXBsZV9jaGFuZ2UgeyB9OwoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KICAgIHN0cnVjdCB0dXBsZV9jaGFuZ2U8c3RkOjp0dXBsZTxUcy4uLj4+CiAgICB7CiAgICAgICAgdXNpbmcgdHlwZSA9IHN0ZDo6dHVwbGU8c3RkOjp2ZWN0b3I8VHM+Li4uPjsKICAgIH07CgogICAgdGVtcGxhdGUgPGludC4uLiBJcz4KICAgIHN0cnVjdCBpbmRleCB7IH07CgogICAgdGVtcGxhdGUgPGludCBOLCBpbnQuLi4gSXM+CiAgICBzdHJ1Y3QgZ2VuX3NlcSA6IGdlbl9zZXE8TiAtIDEsIE4gLSAxLCBJcy4uLj4geyB9OwoKICAgIHRlbXBsYXRlIDxpbnQuLi4gSXM+CiAgICBzdHJ1Y3QgZ2VuX3NlcTwwLCBJcy4uLj4gOiBpbmRleDxJcy4uLj4geyB9Owp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncywgaW50Li4uIElzPgp2b2lkIGZpbGwoc3RkOjp0dXBsZTxBcmdzLi4uPiYgdmFyLCBkZXRhaWw6OmluZGV4PElzLi4uPikKewogICAgYXV0byBsID0geyAoc3RkOjpnZXQ8SXM+KHZhcikuYXNzaWduKDUsIDExKSwgMCkuLi4gfTsKICAgIC8vIGhlcmUgSSBqdXN0IGRlY2lkZWQgdG8gbWFrZSB0aGUgc2l6ZSA1CiAgICAodm9pZClsOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4Kdm9pZCBmaWxsKHN0ZDo6dHVwbGU8QXJncy4uLj4mIHZhcikKewogICAgZmlsbCh2YXIsIGRldGFpbDo6Z2VuX3NlcTxzaXplb2YuLi4oQXJncyk+e30pOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RhdGljIHZvaWQgcHJpbnQoc3RkOjp2ZWN0b3I8VD4mIHYpCnsKICAgIGZvciAoYXV0byBhIDogdikKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgYSA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHMsIGludC4uLiBJcz4Kc3RhdGljIHZvaWQgcHJpbnQoc3RkOjp0dXBsZTxUcy4uLj4mIHZhciwgZGV0YWlsOjppbmRleDxJcy4uLj4pCnsKICAgIGF1dG8gbCA9IHsgKHByaW50KHN0ZDo6Z2V0PElzPih2YXIpKSwgMCkuLi4gfTsKICAgICh2b2lkKWw7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4Kc3RhdGljIHZvaWQgcHJpbnQoc3RkOjp0dXBsZTxUcy4uLj4mIHZhcikKewogICAgcHJpbnQodmFyLCBkZXRhaWw6Omdlbl9zZXE8c2l6ZW9mLi4uKFRzKT57fSk7Cn0KCnVzaW5nIHJlc3VsdF90eXBlID0gZGV0YWlsOjp0dXBsZV9jaGFuZ2U8c3RkOjp0dXBsZTxpbnQsIGJvb2w+Pjo6dHlwZTsKCmludCBtYWluKCkKewogICAgcmVzdWx0X3R5cGUgcjsKCiAgICBmaWxsKHIpOwogICAgcHJpbnQocik7Cn0=