#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();
}