102 typedef _Tp value_type;
103 typedef value_type* pointer;
104 typedef const value_type* const_pointer;
105 typedef value_type& reference;
106 typedef const value_type& const_reference;
107 typedef value_type* iterator;
108 typedef const value_type* const_iterator;
109 typedef std::size_t size_type;
110 typedef std::ptrdiff_t difference_type;
115 typename __array_traits<_Tp, _Nm>::_Type _M_elems;
120 _GLIBCXX20_CONSTEXPR
void
121 fill(
const value_type& __u)
122 { std::fill_n(begin(), size(), __u); }
124 _GLIBCXX20_CONSTEXPR
void
126 noexcept(__array_traits<_Tp, _Nm>::_Is_nothrow_swappable::value)
127 { std::swap_ranges(begin(), end(), __other.begin()); }
130 [[__gnu__::__const__, __nodiscard__]]
131 _GLIBCXX17_CONSTEXPR iterator
133 {
return iterator(data()); }
136 _GLIBCXX17_CONSTEXPR const_iterator
137 begin()
const noexcept
138 {
return const_iterator(data()); }
140 [[__gnu__::__const__, __nodiscard__]]
141 _GLIBCXX17_CONSTEXPR iterator
143 {
return iterator(data() + _Nm); }
146 _GLIBCXX17_CONSTEXPR const_iterator
148 {
return const_iterator(data() + _Nm); }
150 [[__gnu__::__const__, __nodiscard__]]
151 _GLIBCXX17_CONSTEXPR reverse_iterator
153 {
return reverse_iterator(end()); }
156 _GLIBCXX17_CONSTEXPR const_reverse_iterator
157 rbegin()
const noexcept
158 {
return const_reverse_iterator(end()); }
160 [[__gnu__::__const__, __nodiscard__]]
161 _GLIBCXX17_CONSTEXPR reverse_iterator
163 {
return reverse_iterator(begin()); }
166 _GLIBCXX17_CONSTEXPR const_reverse_iterator
167 rend()
const noexcept
168 {
return const_reverse_iterator(begin()); }
171 _GLIBCXX17_CONSTEXPR const_iterator
172 cbegin()
const noexcept
173 {
return const_iterator(data()); }
176 _GLIBCXX17_CONSTEXPR const_iterator
177 cend()
const noexcept
178 {
return const_iterator(data() + _Nm); }
181 _GLIBCXX17_CONSTEXPR const_reverse_iterator
182 crbegin()
const noexcept
183 {
return const_reverse_iterator(end()); }
186 _GLIBCXX17_CONSTEXPR const_reverse_iterator
187 crend()
const noexcept
188 {
return const_reverse_iterator(begin()); }
191 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
193 size()
const noexcept {
return _Nm; }
195 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
197 max_size()
const noexcept {
return _Nm; }
199 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
201 empty()
const noexcept {
return size() == 0; }
205 _GLIBCXX17_CONSTEXPR reference
206 operator[](size_type __n)
noexcept
208 __glibcxx_requires_subscript(__n);
209 return _M_elems[__n];
213 constexpr const_reference
214 operator[](size_type __n)
const noexcept
216#if __cplusplus >= 201402L
217 __glibcxx_requires_subscript(__n);
219 return _M_elems[__n];
222 _GLIBCXX17_CONSTEXPR reference
226 std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
227 ">= _Nm (which is %zu)"),
229 return _M_elems[__n];
232 constexpr const_reference
233 at(size_type __n)
const
237 return __n < _Nm ? _M_elems[__n]
238 : (std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
239 ">= _Nm (which is %zu)"),
245 _GLIBCXX17_CONSTEXPR reference
248 __glibcxx_requires_nonempty();
249 return _M_elems[(size_type)0];
253 constexpr const_reference
254 front()
const noexcept
256#if __cplusplus >= 201402L
257 __glibcxx_requires_nonempty();
259 return _M_elems[(size_type)0];
263 _GLIBCXX17_CONSTEXPR reference
266 __glibcxx_requires_nonempty();
267 return _M_elems[_Nm - 1];
271 constexpr const_reference
272 back()
const noexcept
274#if __cplusplus >= 201402L
275 __glibcxx_requires_nonempty();
277 return _M_elems[_Nm - 1];
280 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
281 _GLIBCXX17_CONSTEXPR pointer
283 {
return static_cast<pointer
>(_M_elems); }
286 _GLIBCXX17_CONSTEXPR const_pointer
287 data()
const noexcept
288 {
return static_cast<const_pointer
>(_M_elems); }