1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <climits>
#include <type_traits>
#include <utility>
namespace detail {
template <typename T, std::enable_if_t<std::is_integral_v<T>, T> Filler, T Prefix, std::size_t N, T ...Elements>
struct repeat_seq {
using type = typename repeat_seq<T, Filler, Prefix, N - 1, Filler, Elements...>::type;
};
template <typename T, std::enable_if_t<std::is_integral_v<T>, T> Filler, T Prefix, T ...Elements>
struct repeat_seq<T, Filler, Prefix, std::size_t(0u), Elements...> {
using type = std::integer_sequence<T, Prefix, Elements...>;
};
}
template <int Prefix, int Filler, std::size_t N, int Suffix>
using gen_seq = typename detail::repeat_seq<int, Filler, Prefix, N, Suffix>::type;
static_assert(std::is_same_v<std::integer_sequence<int, INT_MIN, 42, 42, 42, 42, 42, INT_MAX>, gen_seq<INT_MIN, 42, 5, INT_MAX>>); |
Partager