blob: 81db94ab736fa4f4928d9c03cacc10baf10cacb8 [file] [log] [blame]
Hui Xie94461822022-11-04 11:53:381//===---------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===---------------------------------------------------------------------===//
8
9#ifndef _LIBCPP___FWD_SUBRANGE_H
10#define _LIBCPP___FWD_SUBRANGE_H
11
Nikolas Klauserf9d6d6f2024-02-12 07:32:2812#include <__concepts/copyable.h>
Hui Xie94461822022-11-04 11:53:3813#include <__config>
Louis Dionned6832a62024-09-05 12:28:3314#include <__cstddef/size_t.h>
Nikolas Klauserf9d6d6f2024-02-12 07:32:2815#include <__iterator/concepts.h>
Hui Xie94461822022-11-04 11:53:3816
17#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
18# pragma GCC system_header
19#endif
20
21#if _LIBCPP_STD_VER >= 20
22
Hui Xie94461822022-11-04 11:53:3823_LIBCPP_BEGIN_NAMESPACE_STD
24
25namespace ranges {
26
Nikolas Klauser3583bf32023-08-19 22:15:4727enum class subrange_kind : bool { unsized, sized };
Hui Xie94461822022-11-04 11:53:3828
29template <input_or_output_iterator _Iter, sentinel_for<_Iter> _Sent, subrange_kind _Kind>
30 requires(_Kind == subrange_kind::sized || !sized_sentinel_for<_Sent, _Iter>)
Nikolas Klauseraf9c04f2025-04-09 21:47:5731class subrange;
Hui Xie94461822022-11-04 11:53:3832
Nikolas Klauserf9d6d6f2024-02-12 07:32:2833template <size_t _Index, class _Iter, class _Sent, subrange_kind _Kind>
34 requires((_Index == 0 && copyable<_Iter>) || _Index == 1)
35_LIBCPP_HIDE_FROM_ABI constexpr auto get(const subrange<_Iter, _Sent, _Kind>&);
36
37template <size_t _Index, class _Iter, class _Sent, subrange_kind _Kind>
38 requires(_Index < 2)
39_LIBCPP_HIDE_FROM_ABI constexpr auto get(subrange<_Iter, _Sent, _Kind>&&);
40
Hui Xie94461822022-11-04 11:53:3841} // namespace ranges
42
Nikolas Klauserf9d6d6f2024-02-12 07:32:2843using ranges::get;
44
Hui Xie94461822022-11-04 11:53:3845_LIBCPP_END_NAMESPACE_STD
46
47#endif // _LIBCPP_STD_VER >= 20
48
49#endif // _LIBCPP___FWD_SUBRANGE_H