104 typedef _Tp value_type;
105 typedef value_type* pointer;
106 typedef const value_type* const_pointer;
107 typedef value_type& reference;
108 typedef const value_type& const_reference;
109 typedef value_type* iterator;
110 typedef const value_type* const_iterator;
111 typedef std::size_t size_type;
112 typedef std::ptrdiff_t difference_type;
117 typename __array_traits<_Tp, _Nm>::_Type _M_elems;
122 _GLIBCXX20_CONSTEXPR
void
123 fill(
const value_type& __u)
124 { std::fill_n(begin(), size(), __u); }
126 _GLIBCXX20_CONSTEXPR
void
128 noexcept(__array_traits<_Tp, _Nm>::_Is_nothrow_swappable::value)
129 { std::swap_ranges(begin(), end(), __other.begin()); }
132 [[__gnu__::__const__, __nodiscard__]]
133 _GLIBCXX17_CONSTEXPR iterator
135 {
return iterator(data()); }
138 _GLIBCXX17_CONSTEXPR const_iterator
139 begin()
const noexcept
140 {
return const_iterator(data()); }
142 [[__gnu__::__const__, __nodiscard__]]
143 _GLIBCXX17_CONSTEXPR iterator
145 {
return iterator(data() + _Nm); }
148 _GLIBCXX17_CONSTEXPR const_iterator
150 {
return const_iterator(data() + _Nm); }
152 [[__gnu__::__const__, __nodiscard__]]
153 _GLIBCXX17_CONSTEXPR reverse_iterator
155 {
return reverse_iterator(end()); }
158 _GLIBCXX17_CONSTEXPR const_reverse_iterator
159 rbegin()
const noexcept
160 {
return const_reverse_iterator(end()); }
162 [[__gnu__::__const__, __nodiscard__]]
163 _GLIBCXX17_CONSTEXPR reverse_iterator
165 {
return reverse_iterator(begin()); }
168 _GLIBCXX17_CONSTEXPR const_reverse_iterator
169 rend()
const noexcept
170 {
return const_reverse_iterator(begin()); }
173 _GLIBCXX17_CONSTEXPR const_iterator
174 cbegin()
const noexcept
175 {
return const_iterator(data()); }
178 _GLIBCXX17_CONSTEXPR const_iterator
179 cend()
const noexcept
180 {
return const_iterator(data() + _Nm); }
183 _GLIBCXX17_CONSTEXPR const_reverse_iterator
184 crbegin()
const noexcept
185 {
return const_reverse_iterator(end()); }
188 _GLIBCXX17_CONSTEXPR const_reverse_iterator
189 crend()
const noexcept
190 {
return const_reverse_iterator(begin()); }
193 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
195 size()
const noexcept {
return _Nm; }
197 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
199 max_size()
const noexcept {
return _Nm; }
201 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
203 empty()
const noexcept {
return size() == 0; }
207 _GLIBCXX17_CONSTEXPR reference
208 operator[](size_type __n)
noexcept
210 __glibcxx_requires_subscript(__n);
211 return _M_elems[__n];
215 constexpr const_reference
216 operator[](size_type __n)
const noexcept
218#if __cplusplus >= 201402L
219 __glibcxx_requires_subscript(__n);
221 return _M_elems[__n];
224 _GLIBCXX17_CONSTEXPR reference
228 std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
229 ">= _Nm (which is %zu)"),
231 return _M_elems[__n];
234 constexpr const_reference
235 at(size_type __n)
const
239 return __n < _Nm ? _M_elems[__n]
240 : (std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
241 ">= _Nm (which is %zu)"),
247 _GLIBCXX17_CONSTEXPR reference
250 __glibcxx_requires_nonempty();
251 return _M_elems[(size_type)0];
255 constexpr const_reference
256 front()
const noexcept
258#if __cplusplus >= 201402L
259 __glibcxx_requires_nonempty();
261 return _M_elems[(size_type)0];
265 _GLIBCXX17_CONSTEXPR reference
268 __glibcxx_requires_nonempty();
269 return _M_elems[_Nm - 1];
273 constexpr const_reference
274 back()
const noexcept
276#if __cplusplus >= 201402L
277 __glibcxx_requires_nonempty();
279 return _M_elems[_Nm - 1];
282 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
283 _GLIBCXX17_CONSTEXPR pointer
285 {
return static_cast<pointer
>(_M_elems); }
288 _GLIBCXX17_CONSTEXPR const_pointer
289 data()
const noexcept
290 {
return static_cast<const_pointer
>(_M_elems); }