30 #ifndef _GLIBCXX_RANGE_ACCESS_H
31 #define _GLIBCXX_RANGE_ACCESS_H 1
33 #pragma GCC system_header
35 #if __cplusplus >= 201103L
40 namespace std _GLIBCXX_VISIBILITY(default)
42 _GLIBCXX_BEGIN_NAMESPACE_VERSION
49 template<
typename _Container>
50 [[__nodiscard__, __gnu__::__always_inline__]]
51 inline _GLIBCXX17_CONSTEXPR
auto
60 template<
typename _Container>
61 [[__nodiscard__, __gnu__::__always_inline__]]
62 inline _GLIBCXX17_CONSTEXPR
auto
71 template<
typename _Container>
72 [[__nodiscard__, __gnu__::__always_inline__]]
73 inline _GLIBCXX17_CONSTEXPR
auto
82 template<
typename _Container>
83 [[__nodiscard__, __gnu__::__always_inline__]]
84 inline _GLIBCXX17_CONSTEXPR
auto
92 template<
typename _Tp,
size_t _Nm>
93 [[__nodiscard__, __gnu__::__always_inline__]]
94 inline _GLIBCXX14_CONSTEXPR _Tp*
95 begin(_Tp (&__arr)[_Nm]) noexcept
103 template<
typename _Tp,
size_t _Nm>
104 [[__nodiscard__, __gnu__::__always_inline__]]
105 inline _GLIBCXX14_CONSTEXPR _Tp*
106 end(_Tp (&__arr)[_Nm]) noexcept
107 {
return __arr + _Nm; }
109 #if __cplusplus >= 201402L
111 template<
typename _Tp>
class valarray;
113 template<
typename _Tp> _Tp*
begin(valarray<_Tp>&) noexcept;
114 template<
typename _Tp>
const _Tp*
begin(
const valarray<_Tp>&) noexcept;
115 template<
typename _Tp> _Tp*
end(valarray<_Tp>&) noexcept;
116 template<
typename _Tp>
const _Tp*
end(
const valarray<_Tp>&) noexcept;
123 template<
typename _Container>
124 [[__nodiscard__, __gnu__::__always_inline__]]
135 template<
typename _Container>
136 [[__nodiscard__, __gnu__::__always_inline__]]
147 template<
typename _Container>
148 [[__nodiscard__, __gnu__::__always_inline__]]
149 inline _GLIBCXX17_CONSTEXPR
auto
151 {
return __cont.rbegin(); }
158 template<
typename _Container>
159 [[__nodiscard__, __gnu__::__always_inline__]]
160 inline _GLIBCXX17_CONSTEXPR
auto
162 {
return __cont.rbegin(); }
169 template<
typename _Container>
170 [[__nodiscard__, __gnu__::__always_inline__]]
171 inline _GLIBCXX17_CONSTEXPR
auto
180 template<
typename _Container>
181 [[__nodiscard__, __gnu__::__always_inline__]]
182 inline _GLIBCXX17_CONSTEXPR
auto
191 template<
typename _Tp,
size_t _Nm>
193 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*>
202 template<
typename _Tp,
size_t _Nm>
204 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*>
205 rend(_Tp (&__arr)[_Nm]) noexcept
213 template<
typename _Tp>
215 inline _GLIBCXX17_CONSTEXPR reverse_iterator<const _Tp*>
224 template<
typename _Tp>
226 inline _GLIBCXX17_CONSTEXPR reverse_iterator<const _Tp*>
235 template<
typename _Container>
236 [[__nodiscard__, __gnu__::__always_inline__]]
237 inline _GLIBCXX17_CONSTEXPR
auto
246 template<
typename _Container>
247 [[__nodiscard__, __gnu__::__always_inline__]]
248 inline _GLIBCXX17_CONSTEXPR
auto
254 #if __cplusplus >= 201703L
255 #define __cpp_lib_nonmember_container_access 201411L
261 template <
typename _Container>
262 [[nodiscard, __gnu__::__always_inline__]]
265 -> decltype(
__cont.size())
271 template <
typename _Tp,
size_t _Nm>
272 [[nodiscard, __gnu__::__always_inline__]]
274 size(
const _Tp (&)[_Nm]) noexcept
281 template <
typename _Container>
282 [[nodiscard, __gnu__::__always_inline__]]
285 -> decltype(
__cont.empty())
286 {
return __cont.empty(); }
291 template <
typename _Tp,
size_t _Nm>
292 [[nodiscard, __gnu__::__always_inline__]]
301 template <
typename _Tp>
302 [[nodiscard, __gnu__::__always_inline__]]
305 {
return __il.size() == 0;}
311 template <
typename _Container>
312 [[nodiscard, __gnu__::__always_inline__]]
315 -> decltype(
__cont.data())
322 template <
typename _Container>
323 [[nodiscard, __gnu__::__always_inline__]]
326 -> decltype(
__cont.data())
333 template <
typename _Tp,
size_t _Nm>
334 [[nodiscard, __gnu__::__always_inline__]]
336 data(_Tp (&__array)[_Nm]) noexcept
343 template <
typename _Tp>
344 [[nodiscard, __gnu__::__always_inline__]]
347 {
return __il.begin(); }
349 #if __cplusplus > 201703L
350 #define __cpp_lib_ssize 201902L
351 template<
typename _Container>
352 [[nodiscard, __gnu__::__always_inline__]]
354 ssize(
const _Container&
__cont)
355 noexcept(noexcept(
__cont.size()))
359 return static_cast<common_type_t<ptrdiff_t, type>
>(
__cont.size());
362 template<
typename _Tp, ptrdiff_t _Num>
363 [[nodiscard, __gnu__::__always_inline__]]
365 ssize(
const _Tp (&)[_Num]) noexcept
370 _GLIBCXX_END_NAMESPACE_VERSION
374 #endif // _GLIBCXX_RANGE_ACCESS_H