|
@@ -454,6 +454,13 @@ struct IntegerSequence {
|
|
template<unsigned... Indices>
|
|
template<unsigned... Indices>
|
|
using IndexSequence = IntegerSequence<unsigned, Indices...>;
|
|
using IndexSequence = IntegerSequence<unsigned, Indices...>;
|
|
|
|
|
|
|
|
+#if __has_builtin(__make_integer_seq)
|
|
|
|
+template<typename T, T N>
|
|
|
|
+using MakeIntegerSequence = __make_integer_seq<IntegerSequence, T, N>;
|
|
|
|
+#elif __has_builtin(__integer_pack)
|
|
|
|
+template<typename T, T N>
|
|
|
|
+using MakeIntegerSequence = IntegerSequence<T, __integer_pack(N)...>;
|
|
|
|
+#else
|
|
template<typename T, T N, T... Ts>
|
|
template<typename T, T N, T... Ts>
|
|
auto make_integer_sequence_impl()
|
|
auto make_integer_sequence_impl()
|
|
{
|
|
{
|
|
@@ -465,6 +472,7 @@ auto make_integer_sequence_impl()
|
|
|
|
|
|
template<typename T, T N>
|
|
template<typename T, T N>
|
|
using MakeIntegerSequence = decltype(make_integer_sequence_impl<T, N>());
|
|
using MakeIntegerSequence = decltype(make_integer_sequence_impl<T, N>());
|
|
|
|
+#endif
|
|
|
|
|
|
template<unsigned N>
|
|
template<unsigned N>
|
|
using MakeIndexSequence = MakeIntegerSequence<unsigned, N>;
|
|
using MakeIndexSequence = MakeIntegerSequence<unsigned, N>;
|