#include<iostream>
#include<type_traits>

template <typename ...Ts>
struct types;

template <typename T, typename ...Ts>
struct types < T, Ts... > : public types<Ts...>
{
    template <typename F, int i = 0>
	struct find : public types<Ts...>::template find<F, i>
	{
	};

	template <int i>
	struct find < T, i > : public std::true_type
	{
		typedef T type;
	};
};

template <>
struct types < >
{
	template <typename F, int i = 0>
	struct find : public std::false_type
	{};
};


int main()
{
    using namespace std;
    cout << types<int, char>::find<int>::value << endl;
    cout << types<int, char>::find<float>::value << endl;
}
