2.5 KiB
[iterator.concept.readable]
24 Iterators library [iterators]
24.3 Iterator requirements [iterator.requirements]
24.3.4 Iterator concepts [iterator.concepts]
24.3.4.2 Concept indirectly_readable [iterator.concept.readable]
Types that are indirectly readable by applying operator* model the indirectly_readable concept, including pointers, smart pointers, and iterators.
templateconcept indirectly-readable-impl = // exposition onlyrequires(const In in) {typename iter_value_t; typename iter_reference_t; typename iter_rvalue_reference_t; { *in } -> same_as<iter_reference_t>; { ranges::iter_move(in) } -> same_as<iter_rvalue_reference_t>; } &&common_reference_with<iter_reference_t&&, iter_value_t&> &&common_reference_with<iter_reference_t&&, iter_rvalue_reference_t&&> &&common_reference_with<iter_rvalue_reference_t&&, const iter_value_t&>;
templateconcept indirectly_readable =indirectly-readable-impl<remove_cvref_t>;
Given a value i of type I, I models indirectly_readable only if the expression *i is equality-preserving.