brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 023cee6 Raw
79 lines · c
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//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-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP___RANGES_ALL_H11#define _LIBCPP___RANGES_ALL_H12 13#include <__config>14#include <__functional/compose.h>         // TODO(modules): Those should not be required15#include <__functional/perfect_forward.h> //16#include <__iterator/concepts.h>17#include <__iterator/iterator_traits.h>18#include <__ranges/access.h>19#include <__ranges/concepts.h>20#include <__ranges/owning_view.h>21#include <__ranges/range_adaptor.h>22#include <__ranges/ref_view.h>23#include <__type_traits/decay.h>24#include <__utility/auto_cast.h>25#include <__utility/declval.h>26#include <__utility/forward.h>27 28#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)29#  pragma GCC system_header30#endif31 32_LIBCPP_BEGIN_NAMESPACE_STD33 34#if _LIBCPP_STD_VER >= 2035 36namespace ranges::views {37 38namespace __all {39struct __fn : __range_adaptor_closure<__fn> {40  template <class _Tp>41    requires ranges::view<decay_t<_Tp>>42  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const noexcept(43      noexcept(_LIBCPP_AUTO_CAST(std::forward<_Tp>(__t)))) -> decltype(_LIBCPP_AUTO_CAST(std::forward<_Tp>(__t))) {44    return _LIBCPP_AUTO_CAST(std::forward<_Tp>(__t));45  }46 47  template <class _Tp>48    requires(!ranges::view<decay_t<_Tp>>) && requires(_Tp&& __t) { ranges::ref_view{std::forward<_Tp>(__t)}; }49  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const50      noexcept(noexcept(ranges::ref_view{std::forward<_Tp>(__t)})) {51    return ranges::ref_view{std::forward<_Tp>(__t)};52  }53 54  template <class _Tp>55    requires(56        !ranges::view<decay_t<_Tp>> && !requires(_Tp&& __t) { ranges::ref_view{std::forward<_Tp>(__t)}; } &&57        requires(_Tp&& __t) { ranges::owning_view{std::forward<_Tp>(__t)}; })58  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const59      noexcept(noexcept(ranges::owning_view{std::forward<_Tp>(__t)})) {60    return ranges::owning_view{std::forward<_Tp>(__t)};61  }62};63} // namespace __all64 65inline namespace __cpo {66inline constexpr auto all = __all::__fn{};67} // namespace __cpo68 69template <ranges::viewable_range _Range>70using all_t = decltype(views::all(std::declval<_Range>()));71 72} // namespace ranges::views73 74#endif // _LIBCPP_STD_VER >= 2075 76_LIBCPP_END_NAMESPACE_STD77 78#endif // _LIBCPP___RANGES_ALL_H79