105 typedef _Tp value_type;
106 typedef value_type* pointer;
107 typedef const value_type* const_pointer;
108 typedef value_type& reference;
109 typedef const value_type& const_reference;
110 typedef value_type* iterator;
111 typedef const value_type* const_iterator;
112 typedef std::size_t size_type;
113 typedef std::ptrdiff_t difference_type;
118 typename __array_traits<_Tp, _Nm>::_Type _M_elems;
123 _GLIBCXX20_CONSTEXPR
void
124 fill(
const value_type& __u)
125 { std::fill_n(begin(), size(), __u); }
127 _GLIBCXX20_CONSTEXPR
void
129 noexcept(__array_traits<_Tp, _Nm>::_Is_nothrow_swappable::value)
130 { std::swap_ranges(begin(), end(), __other.begin()); }
133 [[__gnu__::__const__, __nodiscard__]]
134 _GLIBCXX17_CONSTEXPR iterator
136 {
return iterator(data()); }
139 _GLIBCXX17_CONSTEXPR const_iterator
140 begin()
const noexcept
141 {
return const_iterator(data()); }
143 [[__gnu__::__const__, __nodiscard__]]
144 _GLIBCXX17_CONSTEXPR iterator
146 {
return iterator(data() + _Nm); }
149 _GLIBCXX17_CONSTEXPR const_iterator
151 {
return const_iterator(data() + _Nm); }
153 [[__gnu__::__const__, __nodiscard__]]
154 _GLIBCXX17_CONSTEXPR reverse_iterator
156 {
return reverse_iterator(end()); }
159 _GLIBCXX17_CONSTEXPR const_reverse_iterator
160 rbegin()
const noexcept
161 {
return const_reverse_iterator(end()); }
163 [[__gnu__::__const__, __nodiscard__]]
164 _GLIBCXX17_CONSTEXPR reverse_iterator
166 {
return reverse_iterator(begin()); }
169 _GLIBCXX17_CONSTEXPR const_reverse_iterator
170 rend()
const noexcept
171 {
return const_reverse_iterator(begin()); }
174 _GLIBCXX17_CONSTEXPR const_iterator
175 cbegin()
const noexcept
176 {
return const_iterator(data()); }
179 _GLIBCXX17_CONSTEXPR const_iterator
180 cend()
const noexcept
181 {
return const_iterator(data() + _Nm); }
184 _GLIBCXX17_CONSTEXPR const_reverse_iterator
185 crbegin()
const noexcept
186 {
return const_reverse_iterator(end()); }
189 _GLIBCXX17_CONSTEXPR const_reverse_iterator
190 crend()
const noexcept
191 {
return const_reverse_iterator(begin()); }
194 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
196 size()
const noexcept {
return _Nm; }
198 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
200 max_size()
const noexcept {
return _Nm; }
202 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
204 empty()
const noexcept {
return size() == 0; }
208 _GLIBCXX17_CONSTEXPR reference
209 operator[](size_type __n)
noexcept
211 __glibcxx_requires_subscript(__n);
212 return _M_elems[__n];
216 constexpr const_reference
217 operator[](size_type __n)
const noexcept
219#if __cplusplus >= 201402L
220 __glibcxx_requires_subscript(__n);
222 return _M_elems[__n];
225 _GLIBCXX17_CONSTEXPR reference
229 std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
230 ">= _Nm (which is %zu)"),
232 return _M_elems[__n];
235 constexpr const_reference
236 at(size_type __n)
const
240 return __n < _Nm ? _M_elems[__n]
241 : (std::__throw_out_of_range_fmt(__N(
"array::at: __n (which is %zu) "
242 ">= _Nm (which is %zu)"),
248 _GLIBCXX17_CONSTEXPR reference
251 __glibcxx_requires_nonempty();
252 return _M_elems[(size_type)0];
256 constexpr const_reference
257 front()
const noexcept
259#if __cplusplus >= 201402L
260 __glibcxx_requires_nonempty();
262 return _M_elems[(size_type)0];
266 _GLIBCXX17_CONSTEXPR reference
269 __glibcxx_requires_nonempty();
270 return _M_elems[_Nm - 1];
274 constexpr const_reference
275 back()
const noexcept
277#if __cplusplus >= 201402L
278 __glibcxx_requires_nonempty();
280 return _M_elems[_Nm - 1];
283 [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
284 _GLIBCXX17_CONSTEXPR pointer
286 {
return static_cast<pointer
>(_M_elems); }
289 _GLIBCXX17_CONSTEXPR const_pointer
290 data()
const noexcept
291 {
return static_cast<const_pointer
>(_M_elems); }