101 typedef _Tp value_type;
102 typedef value_type* pointer;
103 typedef const value_type* const_pointer;
104 typedef value_type& reference;
105 typedef const value_type& const_reference;
106 typedef value_type* iterator;
107 typedef const value_type* const_iterator;
108 typedef std::size_t size_type;
109 typedef std::ptrdiff_t difference_type;
114 typedef __array_traits<_Tp, _Nm> _AT_Type;
115 typename _AT_Type::_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(_AT_Type::_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 [[__gnu__::__const__, __nodiscard__]]
193 size()
const noexcept {
return _Nm; }
195 [[__gnu__::__const__, __nodiscard__]]
197 max_size()
const noexcept {
return _Nm; }
199 [[__gnu__::__const__, __nodiscard__]]
201 empty()
const noexcept {
return size() == 0; }
205 _GLIBCXX17_CONSTEXPR reference
206 operator[](size_type __n)
noexcept
208 __glibcxx_requires_subscript(__n);
209 return _AT_Type::_S_ref(_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 _AT_Type::_S_ref(_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 _AT_Type::_S_ref(_M_elems, __n);
232 constexpr const_reference
233 at(size_type __n)
const
237 return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n)
238 : (std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
239 ">= _Nm (which is %zu)"),
241 _AT_Type::_S_ref(_M_elems, 0));
245 _GLIBCXX17_CONSTEXPR reference
248 __glibcxx_requires_nonempty();
253 constexpr const_reference
254 front()
const noexcept
256#if __cplusplus >= 201402L
257 __glibcxx_requires_nonempty();
259 return _AT_Type::_S_ref(_M_elems, 0);
263 _GLIBCXX17_CONSTEXPR reference
266 __glibcxx_requires_nonempty();
267 return _Nm ? *(end() - 1) : *end();
271 constexpr const_reference
272 back()
const noexcept
274#if __cplusplus >= 201402L
275 __glibcxx_requires_nonempty();
277 return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1)
278 : _AT_Type::_S_ref(_M_elems, 0);
281 [[__gnu__::__const__, __nodiscard__]]
282 _GLIBCXX17_CONSTEXPR pointer
284 {
return _AT_Type::_S_ptr(_M_elems); }
287 _GLIBCXX17_CONSTEXPR const_pointer
288 data()
const noexcept
289 {
return _AT_Type::_S_ptr(_M_elems); }