Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <int N>
- struct PrintNumber;
- template <int... Items>
- struct IndexSequence {
- };
- template <typename Sequence1, typename Sequence2>
- struct ConcatSequence;
- template<int... I1, int... I2>
- struct ConcatSequence<IndexSequence<I1...>, IndexSequence<I2...>> {
- using type = IndexSequence<I1..., I2...>;
- };
- template <typename Sequence, int... Items>
- struct T;
- template <typename Sequence, int Max, int First, int... Others>
- struct T<Sequence, Max, First, Others...> {
- using OtherSequence = typename ConcatSequence<Sequence, IndexSequence<(Max < First ? Max : First)>>::type;
- using U = T<OtherSequence, (Max < First ? First : Max), Others...>;
- U u;
- };
- template <typename Sequence, int Max>
- struct T<Sequence, Max>;
- template <int... Items, int Max>
- struct T<IndexSequence<Items...>, Max> {
- using U = int;
- using Next = T<IndexSequence<>, Items...>;
- Next next;
- PrintNumber<Max> _;
- };
- template <int Max>
- struct T<IndexSequence<>, Max> {
- using U = int;
- PrintNumber<Max> _;
- };
- int main() {
- static_assert(false, "Sort [2, 1, 7, 4, 9, 6, 8, 5, 3] at compile time:");
- T<IndexSequence<>, 2, 1, 7, 4, 9, 6, 8, 5, 3>::U test;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement