#include <iostream>
#include <tuple>
template <typename T, typename Tuple>
struct TupleIndex;
template <typename T, typename ...Types>
struct TupleIndex <T, std::tuple <T, Types... >> {
static constexpr const std::size_t value = 0;
};
template <typename T, typename U, typename...Types>
struct TupleIndex <T, std::tuple <U, Types... >> {
static constexpr const std::size_t value = 1 + TupleIndex <T, std::tuple < Types... >>::value;
};
typedef std::tuple <double, char *, double, int, double> SupportedTypes;
int main() {
std::cout << TupleIndex<int, SupportedTypes>::value << std::endl;
SupportedTypes ss;
return 0;
}