template<int N>
struct generator
{
	static template<class Head, class... Tail>
	T prototype(Head _head, Tail _args)
	{
		return generator<N-1>::prototype(_args);
	}
};


template<>
struct generator<1>
{
	static template<class Head>
	T prototype(Head _head)
	{
		return _head;
	}
};

int main()
{
	generator<10>::prototype(1,1,1,1,1, 1,1,1,1,1);
	auto a = generator<3>::prototype;
	
	return 0;
}