template<class T> using Invoke = typename T::type;
template<unsigned...> struct seq{ using type = seq; };
template<class S1, class S2> struct concat;
template<unsigned... I1, unsigned... I2>
struct concat<seq<I1...>, seq<I2...>>
: seq<I1..., (sizeof...(I1)+I2)...>{};
template<class S1, class S2>
using Concat = Invoke<concat<S1, S2>>;
template<unsigned N> struct gen_seq;
template<unsigned N> using GenSeq = Invoke<gen_seq<N>>;
template<unsigned N>
struct gen_seq : Concat<GenSeq<N/2>, GenSeq<N - N/2>>{};
template<> struct gen_seq<0> : seq<>{};
template<> struct gen_seq<1> : seq<0>{};
元<类 A,类 B>构 序并;
元<整...A,整...B>构 序并<序列<A...>,序列<B...>>:
序列<A...,B...>{};
空 测试3(){
用 e=序列<2,3,6>;
用 g=序列<2,3,6>;
用 h=序并<e,g>::型;
类型啊<h>();
}
元<整 N,整 M,型名 T,整...O>
空 测试(序列<O...>&x,T&t){
打印(取<(O+M)%N>(t)...);
}
元<整 N,整 M,型名 T>
空 测试2(T&t){
造序<N>::型 p;测试<N,M>(p,t);
}