From Jason Turner

[iterator.concept.readable]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpi2mbmnon/{from.md → to.md} +34 -0
tmp/tmpi2mbmnon/{from.md → to.md} RENAMED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Concept <a id="iterator.concept.readable">[[iterator.concept.readable]]</a>
2
+
3
+ Types that are indirectly readable by applying `operator*` model the
4
+ `indirectly_readable` concept, including pointers, smart pointers, and
5
+ iterators.
6
+
7
+ ``` cpp
8
+ template<class In>
9
+ concept indirectly-readable-impl =
10
+ requires(const In in) {
11
+ typename iter_value_t<In>;
12
+ typename iter_reference_t<In>;
13
+ typename iter_rvalue_reference_t<In>;
14
+ { *in } -> same_as<iter_reference_t<In>>;
15
+ { ranges::iter_move(in) } -> same_as<iter_rvalue_reference_t<In>>;
16
+ } &&
17
+ common_reference_with<iter_reference_t<In>&&, iter_value_t<In>&> &&
18
+ common_reference_with<iter_reference_t<In>&&, iter_rvalue_reference_t<In>&&> &&
19
+ common_reference_with<iter_rvalue_reference_t<In>&&, const iter_value_t<In>&>;
20
+ ```
21
+
22
+ ``` cpp
23
+ template<class In>
24
+ concept indirectly_readable =
25
+ indirectly-readable-impl<remove_cvref_t<In>>;
26
+ ```
27
+
28
+ Given a value `i` of type `I`, `I` models `indirectly_readable` only if
29
+ the expression `*i` is equality-preserving.
30
+
31
+ [*Note 1*: The expression `*i` is indirectly required to be valid via
32
+ the exposition-only `dereferenceable` concept
33
+ [[iterator.synopsis]]. — *end note*]
34
+