2 //===----------------------------------------------------------------------===//
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 #ifndef _LIBCPP___ITERATOR_REVERSE_ACCESS_H
11 #define _LIBCPP___ITERATOR_REVERSE_ACCESS_H
14 #include <__iterator/reverse_iterator.h>
15 #include <initializer_list>
17 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
18 # pragma GCC system_header
21 _LIBCPP_BEGIN_NAMESPACE_STD
23 #if _LIBCPP_STD_VER >= 14
25 template <class _Tp
, size_t _Np
>
26 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 reverse_iterator
<_Tp
*> rbegin(_Tp (&__array
)[_Np
]) {
27 return reverse_iterator
<_Tp
*>(__array
+ _Np
);
30 template <class _Tp
, size_t _Np
>
31 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 reverse_iterator
<_Tp
*> rend(_Tp (&__array
)[_Np
]) {
32 return reverse_iterator
<_Tp
*>(__array
);
36 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 reverse_iterator
<const _Ep
*> rbegin(initializer_list
<_Ep
> __il
) {
37 return reverse_iterator
<const _Ep
*>(__il
.end());
41 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 reverse_iterator
<const _Ep
*> rend(initializer_list
<_Ep
> __il
) {
42 return reverse_iterator
<const _Ep
*>(__il
.begin());
46 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17
auto rbegin(_Cp
& __c
) -> decltype(__c
.rbegin()) {
51 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17
auto rbegin(const _Cp
& __c
) -> decltype(__c
.rbegin()) {
56 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17
auto rend(_Cp
& __c
) -> decltype(__c
.rend()) {
61 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17
auto rend(const _Cp
& __c
) -> decltype(__c
.rend()) {
66 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17
auto crbegin(const _Cp
& __c
) -> decltype(std::rbegin(__c
)) {
67 return std::rbegin(__c
);
71 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17
auto crend(const _Cp
& __c
) -> decltype(std::rend(__c
)) {
72 return std::rend(__c
);
75 #endif // _LIBCPP_STD_VER >= 14
77 _LIBCPP_END_NAMESPACE_STD
79 #endif // _LIBCPP___ITERATOR_REVERSE_ACCESS_H