Changeset View
Changeset View
Standalone View
Standalone View
libcxx/include/__iterator/concepts.h
Show First 20 Lines • Show All 161 Lines • ▼ Show 20 Lines | concept contiguous_iterator = | ||||
derived_from<_ITER_CONCEPT<_Ip>, contiguous_iterator_tag> && | derived_from<_ITER_CONCEPT<_Ip>, contiguous_iterator_tag> && | ||||
is_lvalue_reference_v<iter_reference_t<_Ip>> && | is_lvalue_reference_v<iter_reference_t<_Ip>> && | ||||
same_as<iter_value_t<_Ip>, remove_cvref_t<iter_reference_t<_Ip>>> && | same_as<iter_value_t<_Ip>, remove_cvref_t<iter_reference_t<_Ip>>> && | ||||
(is_pointer_v<_Ip> || requires { sizeof(__pointer_traits_element_type<_Ip>); }) && | (is_pointer_v<_Ip> || requires { sizeof(__pointer_traits_element_type<_Ip>); }) && | ||||
requires(const _Ip& __i) { | requires(const _Ip& __i) { | ||||
{ _VSTD::to_address(__i) } -> same_as<add_pointer_t<iter_reference_t<_Ip>>>; | { _VSTD::to_address(__i) } -> same_as<add_pointer_t<iter_reference_t<_Ip>>>; | ||||
}; | }; | ||||
template<class _Ip> | template<class _Ip> | ||||
concept __has_arrow = input_iterator<_Ip> && (is_pointer_v<_Ip> || requires(_Ip __i) { __i.operator->(); }); | concept __has_arrow = input_iterator<_Ip> && (is_pointer_v<_Ip> || requires(_Ip __i) { __i.operator->(); }); | ||||
// [indirectcallable.indirectinvocable] | // [indirectcallable.indirectinvocable] | ||||
template<class _Fp, class _It> | template<class _Fp, class _It> | ||||
concept indirectly_unary_invocable = | concept indirectly_unary_invocable = | ||||
indirectly_readable<_It> && | indirectly_readable<_It> && | ||||
copy_constructible<_Fp> && | copy_constructible<_Fp> && | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | concept indirect_strict_weak_order = | ||||
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> && | strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_value_t<_It2>&> && | ||||
strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> && | strict_weak_order<_Fp&, iter_reference_t<_It1>, iter_reference_t<_It2>> && | ||||
strict_weak_order<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>; | strict_weak_order<_Fp&, iter_common_reference_t<_It1>, iter_common_reference_t<_It2>>; | ||||
template<class _Fp, class... _Its> | template<class _Fp, class... _Its> | ||||
requires (indirectly_readable<_Its> && ...) && invocable<_Fp, iter_reference_t<_Its>...> | requires (indirectly_readable<_Its> && ...) && invocable<_Fp, iter_reference_t<_Its>...> | ||||
using indirect_result_t = invoke_result_t<_Fp, iter_reference_t<_Its>...>; | using indirect_result_t = invoke_result_t<_Fp, iter_reference_t<_Its>...>; | ||||
template<class _In, class _Out> | |||||
concept indirectly_movable = | |||||
indirectly_readable<_In> && | |||||
indirectly_writable<_Out, iter_rvalue_reference_t<_In>>; | |||||
template<class _In, class _Out> | |||||
concept indirectly_movable_storable = | |||||
indirectly_movable<_In, _Out> && | |||||
indirectly_writable<_Out, iter_value_t<_In>> && | |||||
movable<iter_value_t<_In>> && | |||||
constructible_from<iter_value_t<_In>, iter_rvalue_reference_t<_In>> && | |||||
assignable_from<iter_value_t<_In>&, iter_rvalue_reference_t<_In>>; | |||||
// clang-format on | // clang-format on | ||||
#endif // !defined(_LIBCPP_HAS_NO_RANGES) | #endif // !defined(_LIBCPP_HAS_NO_RANGES) | ||||
_LIBCPP_END_NAMESPACE_STD | _LIBCPP_END_NAMESPACE_STD | ||||
_LIBCPP_POP_MACROS | _LIBCPP_POP_MACROS | ||||
#endif // _LIBCPP___ITERATOR_CONCEPTS_H | #endif // _LIBCPP___ITERATOR_CONCEPTS_H |