30#ifndef _GLIBCXX_RANGE_ACCESS_H
31#define _GLIBCXX_RANGE_ACCESS_H 1
34#pragma GCC system_header
37#if __cplusplus >= 201103L
42namespace std _GLIBCXX_VISIBILITY(default)
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
52 template<
typename _Container>
53 [[__nodiscard__, __gnu__::__always_inline__]]
54 inline _GLIBCXX17_CONSTEXPR
auto
55 begin(_Container& __cont)
noexcept(
noexcept(__cont.begin()))
56 ->
decltype(__cont.begin())
57 {
return __cont.begin(); }
64 template<
typename _Container>
65 [[__nodiscard__, __gnu__::__always_inline__]]
66 inline _GLIBCXX17_CONSTEXPR
auto
67 begin(
const _Container& __cont)
noexcept(
noexcept(__cont.begin()))
68 ->
decltype(__cont.begin())
69 {
return __cont.begin(); }
77 template<
typename _Container>
78 [[__nodiscard__, __gnu__::__always_inline__]]
79 inline _GLIBCXX17_CONSTEXPR
auto
80 end(_Container& __cont)
noexcept(
noexcept(__cont.end()))
81 ->
decltype(__cont.end())
82 {
return __cont.end(); }
90 template<
typename _Container>
91 [[__nodiscard__, __gnu__::__always_inline__]]
92 inline _GLIBCXX17_CONSTEXPR
auto
93 end(
const _Container& __cont)
noexcept(
noexcept(__cont.end()))
94 ->
decltype(__cont.end())
95 {
return __cont.end(); }
102 template<
typename _Tp,
size_t _Nm>
103 [[__nodiscard__, __gnu__::__always_inline__]]
104 inline _GLIBCXX14_CONSTEXPR _Tp*
114 template<
typename _Tp,
size_t _Nm>
115 [[__nodiscard__, __gnu__::__always_inline__]]
116 inline _GLIBCXX14_CONSTEXPR _Tp*
117 end(_Tp (&__arr)[_Nm])
noexcept
118 {
return __arr + _Nm; }
120#if __cplusplus >= 201402L
122#if __glibcxx_valarray < 202511L
123 template<
typename _Tp>
class valarray;
125 template<
typename _Tp> _Tp*
begin(valarray<_Tp>&)
noexcept;
126 template<
typename _Tp>
const _Tp*
begin(
const valarray<_Tp>&)
noexcept;
127 template<
typename _Tp> _Tp*
end(valarray<_Tp>&)
noexcept;
128 template<
typename _Tp>
const _Tp*
end(
const valarray<_Tp>&)
noexcept;
137 template<
typename _Container>
138 [[__nodiscard__, __gnu__::__always_inline__]]
150 template<
typename _Container>
151 [[__nodiscard__, __gnu__::__always_inline__]]
163 template<
typename _Container>
164 [[__nodiscard__, __gnu__::__always_inline__]]
165 inline _GLIBCXX17_CONSTEXPR
auto
166 rbegin(_Container& __cont)
noexcept(
noexcept(__cont.rbegin()))
167 ->
decltype(__cont.rbegin())
168 {
return __cont.rbegin(); }
176 template<
typename _Container>
177 [[__nodiscard__, __gnu__::__always_inline__]]
178 inline _GLIBCXX17_CONSTEXPR
auto
179 rbegin(
const _Container& __cont)
noexcept(
noexcept(__cont.rbegin()))
180 ->
decltype(__cont.rbegin())
181 {
return __cont.rbegin(); }
189 template<
typename _Container>
190 [[__nodiscard__, __gnu__::__always_inline__]]
191 inline _GLIBCXX17_CONSTEXPR
auto
192 rend(_Container& __cont)
noexcept(
noexcept(__cont.rend()))
193 ->
decltype(__cont.rend())
194 {
return __cont.rend(); }
202 template<
typename _Container>
203 [[__nodiscard__, __gnu__::__always_inline__]]
204 inline _GLIBCXX17_CONSTEXPR
auto
205 rend(
const _Container& __cont)
noexcept(
noexcept(__cont.rend()))
206 ->
decltype(__cont.rend())
207 {
return __cont.rend(); }
215 template<
typename _Tp,
size_t _Nm>
217 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*>
227 template<
typename _Tp,
size_t _Nm>
229 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*>
230 rend(_Tp (&__arr)[_Nm])
noexcept
239 template<
typename _Tp>
241 inline _GLIBCXX17_CONSTEXPR reverse_iterator<const _Tp*>
251 template<
typename _Tp>
253 inline _GLIBCXX17_CONSTEXPR reverse_iterator<const _Tp*>
263 template<
typename _Container>
264 [[__nodiscard__, __gnu__::__always_inline__]]
265 inline _GLIBCXX17_CONSTEXPR
auto
276 template<
typename _Container>
277 [[__nodiscard__, __gnu__::__always_inline__]]
278 inline _GLIBCXX17_CONSTEXPR
auto
285#ifdef __glibcxx_nonmember_container_access
291 template <
typename _Container>
292 [[nodiscard, __gnu__::__always_inline__]]
294 size(
const _Container& __cont)
noexcept(
noexcept(__cont.size()))
295 ->
decltype(__cont.size())
296 {
return __cont.size(); }
304 template <
typename _Tp,
size_t _Nm>
305 [[nodiscard, __gnu__::__always_inline__]]
307 size(
const _Tp (&)[_Nm])
noexcept
315 template <
typename _Container>
316 [[nodiscard, __gnu__::__always_inline__]]
318 empty(
const _Container& __cont)
noexcept(
noexcept(__cont.empty()))
319 ->
decltype(__cont.empty())
320 {
return __cont.empty(); }
327 template <
typename _Tp,
size_t _Nm>
328 [[nodiscard, __gnu__::__always_inline__]]
333#if __glibcxx_initializer_list < 202511L
339 template <
typename _Tp>
340 [[nodiscard, __gnu__::__always_inline__]]
342 empty(initializer_list<_Tp> __il)
noexcept
343 {
return __il.size() == 0;}
351 template <
typename _Container>
352 [[nodiscard, __gnu__::__always_inline__]]
354 data(_Container& __cont)
noexcept(
noexcept(__cont.data()))
355 ->
decltype(__cont.data())
356 {
return __cont.data(); }
363 template <
typename _Container>
364 [[nodiscard, __gnu__::__always_inline__]]
366 data(
const _Container& __cont)
noexcept(
noexcept(__cont.data()))
367 ->
decltype(__cont.data())
368 {
return __cont.data(); }
375 template <
typename _Tp,
size_t _Nm>
376 [[nodiscard, __gnu__::__always_inline__]]
378 data(_Tp (&__array)[_Nm])
noexcept
381#if __glibcxx_initializer_list < 202511L
387 template <
typename _Tp>
388 [[nodiscard, __gnu__::__always_inline__]]
390 data(initializer_list<_Tp> __il)
noexcept
391 {
return __il.begin(); }
395#ifdef __glibcxx_ssize
401 template<
typename _Container>
402 [[nodiscard, __gnu__::__always_inline__]]
404 ssize(
const _Container& __cont)
noexcept(
noexcept(__cont.size()))
415 template<
typename _Tp, ptrdiff_t _Num>
416 [[nodiscard, __gnu__::__always_inline__]]
421_GLIBCXX_END_NAMESPACE_VERSION
typename make_signed< _Tp >::type make_signed_t
Alias template for make_signed.
typename common_type< _Tp... >::type common_type_t
Alias template for common_type.
ISO C++ entities toplevel namespace is std.
constexpr auto rbegin(_Container &__cont) noexcept(noexcept(__cont.rbegin())) -> decltype(__cont.rbegin())
Return a reverse iterator pointing to the last element of the container.
constexpr auto cend(const _Container &__cont) noexcept(noexcept(std::end(__cont))) -> decltype(std::end(__cont))
Return an iterator pointing to one past the last element of the const container.
constexpr auto end(_Container &__cont) noexcept(noexcept(__cont.end())) -> decltype(__cont.end())
Return an iterator pointing to one past the last element of the container.
constexpr auto empty(const _Container &__cont) noexcept(noexcept(__cont.empty())) -> decltype(__cont.empty())
Return whether a container is empty.
constexpr auto crbegin(const _Container &__cont) noexcept(noexcept(std::rbegin(__cont))) -> decltype(std::rbegin(__cont))
Return a reverse iterator pointing to the last element of the const container.
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
Return the size of a container.
constexpr auto data(_Container &__cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data())
Return the data pointer of a container.
constexpr auto cbegin(const _Container &__cont) noexcept(noexcept(std::begin(__cont))) -> decltype(std::begin(__cont))
Return an iterator pointing to the first element of the const container.
constexpr auto rend(_Container &__cont) noexcept(noexcept(__cont.rend())) -> decltype(__cont.rend())
Return a reverse iterator pointing one past the first element of the container.
constexpr auto ssize(const _Container &__cont) noexcept(noexcept(__cont.size())) -> common_type_t< ptrdiff_t, make_signed_t< decltype(__cont.size())> >
Return the size of a container, as a signed integer.
constexpr auto begin(_Container &__cont) noexcept(noexcept(__cont.begin())) -> decltype(__cont.begin())
Return an iterator pointing to the first element of the container.
constexpr auto crend(const _Container &__cont) noexcept(noexcept(std::rend(__cont))) -> decltype(std::rend(__cont))
Return a reverse iterator pointing one past the first element of the const container.