#include <iostream>
#include <tuple>
#include <typeinfo>
template <typename Tuple, typename Sequence> class Class;
template <typename ...Ts, std::size_t ...Is>
class Class<std::tuple<Ts...>, std::index_sequence<Is...>>
{
public:
void do_stuff_with_list_1()
{
int dummy[] = {0, ((std::cout << " " << typeid(Ts).name()), 0)...};
(void) dummy;
std::cout << std::endl;
}
void do_stuff_with_list_2()
{
int dummy[] = {0, ((std::cout << " " << Is), 0)...};
(void) dummy;
std::cout << std::endl;
}
};
int main()
{
Class<std::tuple<int, char, std::string>, std::index_sequence<4, 8, 15, 16, 23, 42>> c;
c.do_stuff_with_list_1();
c.do_stuff_with_list_2();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx0eXBlaW5mbz4KCnRlbXBsYXRlIDx0eXBlbmFtZSBUdXBsZSwgdHlwZW5hbWUgU2VxdWVuY2U+IGNsYXNzIENsYXNzOwoKdGVtcGxhdGUgPHR5cGVuYW1lIC4uLlRzLCBzdGQ6OnNpemVfdCAuLi5Jcz4KY2xhc3MgQ2xhc3M8c3RkOjp0dXBsZTxUcy4uLj4sIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+Pgp7CnB1YmxpYzoKICAgIHZvaWQgZG9fc3R1ZmZfd2l0aF9saXN0XzEoKQogICAgewogICAgICAgIGludCBkdW1teVtdID0gezAsICgoc3RkOjpjb3V0IDw8ICIgIiA8PCB0eXBlaWQoVHMpLm5hbWUoKSksIDApLi4ufTsKICAgICAgICAodm9pZCkgZHVtbXk7CiAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICB2b2lkIGRvX3N0dWZmX3dpdGhfbGlzdF8yKCkKICAgIHsKICAgICAgICBpbnQgZHVtbXlbXSA9IHswLCAoKHN0ZDo6Y291dCA8PCAiICIgPDwgSXMpLCAwKS4uLn07CiAgICAgICAgKHZvaWQpIGR1bW15OyAKICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgfQoKfTsKCmludCBtYWluKCkKewogICAgQ2xhc3M8c3RkOjp0dXBsZTxpbnQsIGNoYXIsIHN0ZDo6c3RyaW5nPiwgc3RkOjppbmRleF9zZXF1ZW5jZTw0LCA4LCAxNSwgMTYsIDIzLCA0Mj4+IGM7CiAgICAKICAgIGMuZG9fc3R1ZmZfd2l0aF9saXN0XzEoKTsKICAgIGMuZG9fc3R1ZmZfd2l0aF9saXN0XzIoKTsKfQ==