using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
#endif // __glibcxx_integer_sequence
+#if __cpp_structured_bindings >= 202411L
+#if __has_builtin(__integer_pack)
+ template <auto _Num, typename _Tp = decltype(_Num)>
+ inline constexpr _Tp
+ _IotaArray[_Num] = {__integer_pack(_Tp(_Num))...};
+#elif defined __glibcxx_integer_sequence
+ template <auto _Num, typename _Tp = decltype(_Num), typename = make_integer_sequence<_Tp, _Num>>
+ inline constexpr _Tp
+ _IotaArray[_Num];
+
+ template <auto _Num, typename _Tp, _Tp... _Is>
+ inline constexpr _Tp
+ _IotaArray<_Num, _Tp, integer_sequence<_Tp, _Is...>>[_Num] = {_Is...};
+#endif // __integer_pack
+#endif // __cpp_structured_bindings >= 202411L
+
#if __cplusplus >= 201703L
struct in_place_t {
--- /dev/null
+// { dg-do compile { target c++26 } }
+
+#include <utility>
+#include <type_traits>
+
+template<auto N>
+void test()
+{
+ constexpr auto [id0, ...ids] = std::_IotaArray<N>;
+ static_assert( std::is_same_v<decltype(id0), const decltype(N)> );
+ static_assert( sizeof...(ids) == N - 1 );
+ static_assert( (id0 + ... + ids) == N*(N-1)/2 );
+}
+
+int main()
+{
+ test<1>();
+ test<4u>();
+ test<8ull>();
+}