#include <iostream>
using namespace std;

template <int First, int... Numbers>
inline bool in_impl(int n)
{
    return n == First || in_impl<Numbers...>(n);
}

template <>
inline bool in_impl<int(0)>(int n)
{
	return false;
}

template <int... Numbers>
inline bool in(int n) 
{
	return in_impl<Numbers..., int(0)>(n);
}

enum E { E1, E2, E3, E4 };

int main() {
	std::cout << in<3, 5, 7, 9>(4) << '\n';
	std::cout << in<3, 5, 7, 9>(5) << '\n';
	std::cout << in<E2, E4>(E1) << '\n';
	std::cout << in<E2, E4>(E2) << '\n';
}