C++ compile-time type tuple with several algorithms to imitate std::tuple behaviour
using my_empty_list = type_list<>;
using my_list = my_empty_list::add<double, int>; // -> type_list<double, int>
or just
using my_list = type_list<double, int>;
using my_list = type_list<int, float>;
// my_list::size -> 2
using my_list = type_list<double, float, double, char>;
using result = my_list::remove<float>; // -> type_list<double, double, char>
using my_list = type_list<double, float, double, char>;
using result = my_list::remove_all<double, char>; // -> type_list<float>
using my_list = type_list<int, float, char>;
using elem1 = my_list::get<1>; // float
using my_list = type_list<char, float>;
using my_list2 = type_list<int, std::string>;
using result = my_list::concat<my_list2>; // -> type_list<char, float, int, std::string>
Pretty easy, isn't it??