23 General utilities library [utilities]

23.3 Compile-time integer sequences [intseq]

23.3.1 In general [intseq.general]

The library provides a class template that can represent an integer sequence. When used as an argument to a function template the parameter pack defining the sequence can be deduced and used in a pack expansion. [Note: The index_­sequence alias template is provided for the common case of an integer sequence of type size_­t; see also [tuple.apply]. end note]

23.3.2 Class template integer_­sequence [intseq.intseq]

namespace std {
  template<class T, T... I>
    struct integer_sequence {
      using value_type = T;
      static constexpr size_t size() noexcept { return sizeof...(I); }
    };
}

T shall be an integer type.

23.3.3 Alias template make_­integer_­sequence [intseq.make]

template<class T, T N> using make_integer_sequence = integer_sequence<T, see below>;

If N is negative the program is ill-formed. The alias template make_­integer_­sequence denotes a specialization of integer_­sequence with N template non-type arguments. The type make_­integer_­sequence<T, N> denotes the type integer_­sequence<T, 0, 1, ..., N-1>. [Note: make_­integer_­sequence<int, 0> denotes the type integer_­sequence<int> end note]