VariadicTemplatesに整数を渡す

型(のparameter pack)だったらtupleに渡せばいいみたいだけど,
intの並びだとstd::tupleは受け取ってくれないのでseqを定義した.

namespace jefuty { namespace mpl {
	// 特殊化に使うためのintの並び
	template<int... XS> struct seq { };
	// Seq中のN番目の要素にアクセスする
	template<int N, typename Seq>
	struct at ;
	// at N [X:XS] = at (N-1) XS
	template<int N, int X, int... XS>
	struct at<N, seq<X,XS...> > {
		static int const value = at<N-1, seq<XS...> >::value;
	};
	// at 0 [X:XS] = X
	template<int X, int... XS>
	struct at<0, seq<X,XS...> > {
		static int const value = X;
	};
	template<int... XS>
	struct head_ : at<0, seq<XS...>> { };
} // namespace mpl
} // namespace jefuty

int main () {
	using namespace jefuty;
	BOOST_STATIC_ASSERT((mpl::at<0,mpl::seq<1>>::value         == 1));
	BOOST_STATIC_ASSERT((mpl::at<1,mpl::seq<1,2,3,4,5>>::value == 2));
	BOOST_STATIC_ASSERT((mpl::at<2,mpl::seq<1,2,3,4,5>>::value == 3));
	BOOST_STATIC_ASSERT((mpl::at<3,mpl::seq<1,2,3,4,5>>::value == 4));
	BOOST_STATIC_ASSERT((mpl::at<4,mpl::seq<1,2,3,4,5>>::value == 5));
}

ふむ. 使わないとすぐ構文忘れますね.