#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>
    struct find : public types<Ts...>::template find<F>
	{
	};

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

template <>
struct types < >
{
	template <typename F>
	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;
}
