97 typedef _Tp value_type;
98 typedef value_type* pointer;
99 typedef const value_type* const_pointer;
100 typedef value_type& reference;
101 typedef const value_type& const_reference;
102 typedef value_type* iterator;
103 typedef const value_type* const_iterator;
104 typedef std::size_t size_type;
105 typedef std::ptrdiff_t difference_type;
110 typedef __array_traits<_Tp, _Nm> _AT_Type;
111 typename _AT_Type::_Type _M_elems;
116 _GLIBCXX20_CONSTEXPR
void
117 fill(
const value_type& __u)
118 { std::fill_n(begin(), size(), __u); }
120 _GLIBCXX20_CONSTEXPR
void
122 noexcept(_AT_Type::_Is_nothrow_swappable::value)
123 { std::swap_ranges(begin(), end(), __other.begin()); }
126 _GLIBCXX17_CONSTEXPR iterator
128 {
return iterator(data()); }
130 _GLIBCXX17_CONSTEXPR const_iterator
131 begin()
const noexcept
132 {
return const_iterator(data()); }
134 _GLIBCXX17_CONSTEXPR iterator
136 {
return iterator(data() + _Nm); }
138 _GLIBCXX17_CONSTEXPR const_iterator
140 {
return const_iterator(data() + _Nm); }
142 _GLIBCXX17_CONSTEXPR reverse_iterator
144 {
return reverse_iterator(end()); }
146 _GLIBCXX17_CONSTEXPR const_reverse_iterator
147 rbegin()
const noexcept
148 {
return const_reverse_iterator(end()); }
150 _GLIBCXX17_CONSTEXPR reverse_iterator
152 {
return reverse_iterator(begin()); }
154 _GLIBCXX17_CONSTEXPR const_reverse_iterator
155 rend()
const noexcept
156 {
return const_reverse_iterator(begin()); }
158 _GLIBCXX17_CONSTEXPR const_iterator
159 cbegin()
const noexcept
160 {
return const_iterator(data()); }
162 _GLIBCXX17_CONSTEXPR const_iterator
163 cend()
const noexcept
164 {
return const_iterator(data() + _Nm); }
166 _GLIBCXX17_CONSTEXPR const_reverse_iterator
167 crbegin()
const noexcept
168 {
return const_reverse_iterator(end()); }
170 _GLIBCXX17_CONSTEXPR const_reverse_iterator
171 crend()
const noexcept
172 {
return const_reverse_iterator(begin()); }
176 size()
const noexcept {
return _Nm; }
179 max_size()
const noexcept {
return _Nm; }
181 _GLIBCXX_NODISCARD
constexpr bool
182 empty()
const noexcept {
return size() == 0; }
185 _GLIBCXX17_CONSTEXPR reference
186 operator[](size_type __n)
noexcept
188 __glibcxx_requires_subscript(__n);
189 return _AT_Type::_S_ref(_M_elems, __n);
192 constexpr const_reference
193 operator[](size_type __n)
const noexcept
195#if __cplusplus >= 201402L
196 __glibcxx_requires_subscript(__n);
198 return _AT_Type::_S_ref(_M_elems, __n);
201 _GLIBCXX17_CONSTEXPR reference
205 std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
206 ">= _Nm (which is %zu)"),
208 return _AT_Type::_S_ref(_M_elems, __n);
211 constexpr const_reference
212 at(size_type __n)
const
216 return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n)
217 : (std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
218 ">= _Nm (which is %zu)"),
220 _AT_Type::_S_ref(_M_elems, 0));
223 _GLIBCXX17_CONSTEXPR reference
226 __glibcxx_requires_nonempty();
230 constexpr const_reference
231 front()
const noexcept
233#if __cplusplus >= 201402L
234 __glibcxx_requires_nonempty();
236 return _AT_Type::_S_ref(_M_elems, 0);
239 _GLIBCXX17_CONSTEXPR reference
242 __glibcxx_requires_nonempty();
243 return _Nm ? *(end() - 1) : *end();
246 constexpr const_reference
247 back()
const noexcept
249#if __cplusplus >= 201402L
250 __glibcxx_requires_nonempty();
252 return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1)
253 : _AT_Type::_S_ref(_M_elems, 0);
256 _GLIBCXX17_CONSTEXPR pointer
258 {
return _AT_Type::_S_ptr(_M_elems); }
260 _GLIBCXX17_CONSTEXPR const_pointer
261 data()
const noexcept
262 {
return _AT_Type::_S_ptr(_M_elems); }