mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-03 19:22:27 +00:00
Release Cosmopolitan v3.6.0
This release is an atomic upgrade to GCC 14.1.0 with C23 and C++23
This commit is contained in:
parent
62ace3623a
commit
5660ec4741
1585 changed files with 117353 additions and 271644 deletions
126
third_party/libcxx/__ranges/concepts.h
vendored
126
third_party/libcxx/__ranges/concepts.h
vendored
|
@ -41,100 +41,92 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
|||
|
||||
namespace ranges {
|
||||
|
||||
// [range.range]
|
||||
// [range.range]
|
||||
|
||||
template <class _Tp>
|
||||
concept range = requires(_Tp& __t) {
|
||||
ranges::begin(__t); // sometimes equality-preserving
|
||||
ranges::end(__t);
|
||||
};
|
||||
template <class _Tp>
|
||||
concept range = requires(_Tp& __t) {
|
||||
ranges::begin(__t); // sometimes equality-preserving
|
||||
ranges::end(__t);
|
||||
};
|
||||
|
||||
template <class _Tp>
|
||||
concept input_range = range<_Tp> && input_iterator<iterator_t<_Tp>>;
|
||||
template <class _Tp>
|
||||
concept input_range = range<_Tp> && input_iterator<iterator_t<_Tp>>;
|
||||
|
||||
template<class _Range>
|
||||
concept borrowed_range = range<_Range> &&
|
||||
(is_lvalue_reference_v<_Range> || enable_borrowed_range<remove_cvref_t<_Range>>);
|
||||
template <class _Range>
|
||||
concept borrowed_range =
|
||||
range<_Range> && (is_lvalue_reference_v<_Range> || enable_borrowed_range<remove_cvref_t<_Range>>);
|
||||
|
||||
// `iterator_t` defined in <__ranges/access.h>
|
||||
// `iterator_t` defined in <__ranges/access.h>
|
||||
|
||||
template <range _Rp>
|
||||
using sentinel_t = decltype(ranges::end(std::declval<_Rp&>()));
|
||||
template <range _Rp>
|
||||
using sentinel_t = decltype(ranges::end(std::declval<_Rp&>()));
|
||||
|
||||
template <range _Rp>
|
||||
using range_difference_t = iter_difference_t<iterator_t<_Rp>>;
|
||||
template <range _Rp>
|
||||
using range_difference_t = iter_difference_t<iterator_t<_Rp>>;
|
||||
|
||||
template <range _Rp>
|
||||
using range_value_t = iter_value_t<iterator_t<_Rp>>;
|
||||
template <range _Rp>
|
||||
using range_value_t = iter_value_t<iterator_t<_Rp>>;
|
||||
|
||||
template <range _Rp>
|
||||
using range_reference_t = iter_reference_t<iterator_t<_Rp>>;
|
||||
template <range _Rp>
|
||||
using range_reference_t = iter_reference_t<iterator_t<_Rp>>;
|
||||
|
||||
template <range _Rp>
|
||||
using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rp>>;
|
||||
template <range _Rp>
|
||||
using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rp>>;
|
||||
|
||||
template <range _Rp>
|
||||
using range_common_reference_t = iter_common_reference_t<iterator_t<_Rp>>;
|
||||
template <range _Rp>
|
||||
using range_common_reference_t = iter_common_reference_t<iterator_t<_Rp>>;
|
||||
|
||||
// [range.sized]
|
||||
template <class _Tp>
|
||||
concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); };
|
||||
// [range.sized]
|
||||
template <class _Tp>
|
||||
concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); };
|
||||
|
||||
template<sized_range _Rp>
|
||||
using range_size_t = decltype(ranges::size(std::declval<_Rp&>()));
|
||||
template <sized_range _Rp>
|
||||
using range_size_t = decltype(ranges::size(std::declval<_Rp&>()));
|
||||
|
||||
// `disable_sized_range` defined in `<__ranges/size.h>`
|
||||
// `disable_sized_range` defined in `<__ranges/size.h>`
|
||||
|
||||
// [range.view], views
|
||||
// [range.view], views
|
||||
|
||||
// `enable_view` defined in <__ranges/enable_view.h>
|
||||
// `view_base` defined in <__ranges/enable_view.h>
|
||||
// `enable_view` defined in <__ranges/enable_view.h>
|
||||
// `view_base` defined in <__ranges/enable_view.h>
|
||||
|
||||
template <class _Tp>
|
||||
concept view =
|
||||
range<_Tp> &&
|
||||
movable<_Tp> &&
|
||||
enable_view<_Tp>;
|
||||
template <class _Tp>
|
||||
concept view = range<_Tp> && movable<_Tp> && enable_view<_Tp>;
|
||||
|
||||
template <class _Range>
|
||||
concept __simple_view =
|
||||
view<_Range> && range<const _Range> &&
|
||||
same_as<iterator_t<_Range>, iterator_t<const _Range>> &&
|
||||
template <class _Range>
|
||||
concept __simple_view =
|
||||
view<_Range> && range<const _Range> && same_as<iterator_t<_Range>, iterator_t<const _Range>> &&
|
||||
same_as<sentinel_t<_Range>, sentinel_t<const _Range>>;
|
||||
|
||||
// [range.refinements], other range refinements
|
||||
template <class _Rp, class _Tp>
|
||||
concept output_range = range<_Rp> && output_iterator<iterator_t<_Rp>, _Tp>;
|
||||
// [range.refinements], other range refinements
|
||||
template <class _Rp, class _Tp>
|
||||
concept output_range = range<_Rp> && output_iterator<iterator_t<_Rp>, _Tp>;
|
||||
|
||||
template <class _Tp>
|
||||
concept forward_range = input_range<_Tp> && forward_iterator<iterator_t<_Tp>>;
|
||||
template <class _Tp>
|
||||
concept forward_range = input_range<_Tp> && forward_iterator<iterator_t<_Tp>>;
|
||||
|
||||
template <class _Tp>
|
||||
concept bidirectional_range = forward_range<_Tp> && bidirectional_iterator<iterator_t<_Tp>>;
|
||||
template <class _Tp>
|
||||
concept bidirectional_range = forward_range<_Tp> && bidirectional_iterator<iterator_t<_Tp>>;
|
||||
|
||||
template <class _Tp>
|
||||
concept random_access_range =
|
||||
bidirectional_range<_Tp> && random_access_iterator<iterator_t<_Tp>>;
|
||||
template <class _Tp>
|
||||
concept random_access_range = bidirectional_range<_Tp> && random_access_iterator<iterator_t<_Tp>>;
|
||||
|
||||
template<class _Tp>
|
||||
concept contiguous_range =
|
||||
random_access_range<_Tp> &&
|
||||
contiguous_iterator<iterator_t<_Tp>> &&
|
||||
requires(_Tp& __t) {
|
||||
{ ranges::data(__t) } -> same_as<add_pointer_t<range_reference_t<_Tp>>>;
|
||||
};
|
||||
template <class _Tp>
|
||||
concept contiguous_range = random_access_range<_Tp> && contiguous_iterator<iterator_t<_Tp>> && requires(_Tp& __t) {
|
||||
{ ranges::data(__t) } -> same_as<add_pointer_t<range_reference_t<_Tp>>>;
|
||||
};
|
||||
|
||||
template <class _Tp>
|
||||
concept common_range = range<_Tp> && same_as<iterator_t<_Tp>, sentinel_t<_Tp>>;
|
||||
template <class _Tp>
|
||||
concept common_range = range<_Tp> && same_as<iterator_t<_Tp>, sentinel_t<_Tp>>;
|
||||
|
||||
template <class _Tp>
|
||||
inline constexpr bool __is_std_initializer_list = false;
|
||||
template <class _Tp>
|
||||
inline constexpr bool __is_std_initializer_list = false;
|
||||
|
||||
template <class _Ep>
|
||||
inline constexpr bool __is_std_initializer_list<initializer_list<_Ep>> = true;
|
||||
template <class _Ep>
|
||||
inline constexpr bool __is_std_initializer_list<initializer_list<_Ep>> = true;
|
||||
|
||||
template <class _Tp>
|
||||
concept viewable_range =
|
||||
template <class _Tp>
|
||||
concept viewable_range =
|
||||
range<_Tp> &&
|
||||
((view<remove_cvref_t<_Tp>> && constructible_from<remove_cvref_t<_Tp>, _Tp>) ||
|
||||
(!view<remove_cvref_t<_Tp>> &&
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue