| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | #include <type_traits>
#include <utility>
 
namespace detail
{
    template <typename Seq1, std::size_t Offset, typename Seq2> struct concat_seq;
 
    template         <std::size_t            ...Is1, std::size_t Offset, std::size_t            ...Is2>
    struct concat_seq<std::index_sequence<Is1...>  ,             Offset, std::index_sequence<Is2...>  >
    {
        using type = std::index_sequence<Is1..., (Offset + Is2)...>;
    };
}
 
template <std::size_t N, std::size_t E>
using gen_seq = typename detail::concat_seq<typename std::make_index_sequence<E>, E + 1, typename std::make_index_sequence<(N > E) ? (N - E - 1) : 0>>::type;
 
static_assert(std::is_same_v<std::index_sequence<0, 1,    3, 4>, gen_seq<5, 2>>);
static_assert(std::is_same_v<std::index_sequence<   1, 2      >, gen_seq<3, 0>>);
static_assert(std::is_same_v<std::index_sequence<0, 1, 2, 3   >, gen_seq<4, 4>>); | 
Partager