#include <type_traits>
template <typename T, typename... Ts> struct get_index;
template <typename T, typename... Ts>
struct get_index<T, T, Ts...> : std::integral_constant<std::size_t, 0> {};
template <typename T, typename Tail, typename... Ts>
struct get_index<T, Tail, Ts...> :
std::integral_constant<std::size_t, 1 + get_index<T, Ts...>::value> {};
static_assert(0 == get_index<char, char, int, void>::value, "");
static_assert(1 == get_index<int, char, int, void>::value, "");
static_assert(2 == get_index<void, char, int, void>::value, "");
int main()
{}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPiBzdHJ1Y3QgZ2V0X2luZGV4OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgpzdHJ1Y3QgZ2V0X2luZGV4PFQsIFQsIFRzLi4uPiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDA+IHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRhaWwsIHR5cGVuYW1lLi4uIFRzPgpzdHJ1Y3QgZ2V0X2luZGV4PFQsIFRhaWwsIFRzLi4uPiA6CiAgICBzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAxICsgZ2V0X2luZGV4PFQsIFRzLi4uPjo6dmFsdWU+IHt9OwoKc3RhdGljX2Fzc2VydCgwID09IGdldF9pbmRleDxjaGFyLCBjaGFyLCBpbnQsIHZvaWQ+Ojp2YWx1ZSwgIiIpOwpzdGF0aWNfYXNzZXJ0KDEgPT0gZ2V0X2luZGV4PGludCwgY2hhciwgaW50LCB2b2lkPjo6dmFsdWUsICIiKTsKc3RhdGljX2Fzc2VydCgyID09IGdldF9pbmRleDx2b2lkLCBjaGFyLCBpbnQsIHZvaWQ+Ojp2YWx1ZSwgIiIpOwoKaW50IG1haW4oKQp7fQo=