From Jason Turner

[iterator.concept.sentinel]

Diff to HTML by rtfpessoa

tmp/tmpz3vmskft/{from.md → to.md} RENAMED
@@ -7,19 +7,20 @@ denote a range.
7
  ``` cpp
8
  template<class S, class I>
9
  concept sentinel_for =
10
  semiregular<S> &&
11
  input_or_output_iterator<I> &&
12
- weakly-equality-comparable-with<S, I>; // See [concept.equalitycomparable]
13
  ```
14
 
15
  Let `s` and `i` be values of type `S` and `I` such that \[`i`, `s`)
16
  denotes a range. Types `S` and `I` model `sentinel_for<S, I>` only if
17
 
18
  - `i == s` is well-defined.
19
  - If `bool(i != s)` then `i` is dereferenceable and \[`++i`, `s`)
20
  denotes a range.
 
21
 
22
  The domain of `==` is not static. Given an iterator `i` and sentinel `s`
23
  such that \[`i`, `s`) denotes a range and `i != s`, `i` and `s` are not
24
  required to continue to denote a range after incrementing any other
25
  iterator equal to `i`. Consequently, `i == s` is no longer required to
 
7
  ``` cpp
8
  template<class S, class I>
9
  concept sentinel_for =
10
  semiregular<S> &&
11
  input_or_output_iterator<I> &&
12
+ weakly-equality-comparable-with<S, I>; // see [concept.equalitycomparable]
13
  ```
14
 
15
  Let `s` and `i` be values of type `S` and `I` such that \[`i`, `s`)
16
  denotes a range. Types `S` and `I` model `sentinel_for<S, I>` only if
17
 
18
  - `i == s` is well-defined.
19
  - If `bool(i != s)` then `i` is dereferenceable and \[`++i`, `s`)
20
  denotes a range.
21
+ - `assignable_from<I&, S>` is either modeled or not satisfied.
22
 
23
  The domain of `==` is not static. Given an iterator `i` and sentinel `s`
24
  such that \[`i`, `s`) denotes a range and `i != s`, `i` and `s` are not
25
  required to continue to denote a range after incrementing any other
26
  iterator equal to `i`. Consequently, `i == s` is no longer required to