From Jason Turner

[special.mem.concepts]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmph0nw4z2g/{from.md → to.md} +65 -0
tmp/tmph0nw4z2g/{from.md → to.md} RENAMED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Special memory concepts <a id="special.mem.concepts">[[special.mem.concepts]]</a>
2
+
3
+ Some algorithms in this subclause are constrained with the following
4
+ exposition-only concepts:
5
+
6
+ ``` cpp
7
+ template<class I>
8
+ concept no-throw-input-iterator = // exposition only
9
+ input_iterator<I> &&
10
+ is_lvalue_reference_v<iter_reference_t<I>> &&
11
+ same_as<remove_cvref_t<iter_reference_t<I>>, iter_value_t<I>>;
12
+ ```
13
+
14
+ A type `I` models *`no-throw-input-iterator`* only if no exceptions are
15
+ thrown from increment, copy construction, move construction, copy
16
+ assignment, move assignment, or indirection through valid iterators.
17
+
18
+ [*Note 1*: This concept allows some `input_iterator`
19
+ [[iterator.concept.input]] operations to throw
20
+ exceptions. — *end note*]
21
+
22
+ ``` cpp
23
+ template<class S, class I>
24
+ concept no-throw-sentinel = sentinel_for<S, I>; // exposition only
25
+ ```
26
+
27
+ Types `S` and `I` model *`no-throw-sentinel`* only if no exceptions are
28
+ thrown from copy construction, move construction, copy assignment, move
29
+ assignment, or comparisons between valid values of type `I` and `S`.
30
+
31
+ [*Note 2*: This concept allows some `sentinel_for`
32
+ [[iterator.concept.sentinel]] operations to throw
33
+ exceptions. — *end note*]
34
+
35
+ ``` cpp
36
+ template<class R>
37
+ concept no-throw-input-range = // exposition only
38
+ range<R> &&
39
+ no-throw-input-iterator<iterator_t<R>> &&
40
+ no-throw-sentinel<sentinel_t<R>, iterator_t<R>>;
41
+ ```
42
+
43
+ A type `R` models *`no-throw-input-range`* only if no exceptions are
44
+ thrown from calls to `ranges::begin` and `ranges::end` on an object of
45
+ type `R`.
46
+
47
+ ``` cpp
48
+ template<class I>
49
+ concept no-throw-forward-iterator = // exposition only
50
+ no-throw-input-iterator<I> &&
51
+ forward_iterator<I> &&
52
+ no-throw-sentinel<I, I>;
53
+ ```
54
+
55
+ [*Note 3*: This concept allows some `forward_iterator`
56
+ [[iterator.concept.forward]] operations to throw
57
+ exceptions. — *end note*]
58
+
59
+ ``` cpp
60
+ template<class R>
61
+ concept no-throw-forward-range = // exposition only
62
+ no-throw-input-range<R> &&
63
+ no-throw-forward-iterator<iterator_t<R>>;
64
+ ```
65
+