From Jason Turner

[move.iterator]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpi90p0avp/{from.md → to.md} +17 -5
tmp/tmpi90p0avp/{from.md → to.md} RENAMED
@@ -4,24 +4,24 @@
4
  namespace std {
5
  template<class Iterator>
6
  class move_iterator {
7
  public:
8
  using iterator_type = Iterator;
9
- using iterator_concept = input_iterator_tag;
10
- using iterator_category = see below;
11
  using value_type = iter_value_t<Iterator>;
12
  using difference_type = iter_difference_t<Iterator>;
13
  using pointer = Iterator;
14
  using reference = iter_rvalue_reference_t<Iterator>;
15
 
16
  constexpr move_iterator();
17
  constexpr explicit move_iterator(Iterator i);
18
  template<class U> constexpr move_iterator(const move_iterator<U>& u);
19
  template<class U> constexpr move_iterator& operator=(const move_iterator<U>& u);
20
 
21
- constexpr iterator_type base() const &;
22
- constexpr iterator_type base() &&;
23
  constexpr reference operator*() const;
24
 
25
  constexpr move_iterator& operator++();
26
  constexpr auto operator++(int);
27
  constexpr move_iterator& operator--();
@@ -54,11 +54,23 @@ namespace std {
54
  Iterator current; // exposition only
55
  };
56
  }
57
  ```
58
 
59
- The member *typedef-name* `iterator_category` denotes
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
  - `random_access_iterator_tag` if the type
62
  `iterator_traits<{}Iterator>::iterator_category` models
63
  `derived_from<random_access_iterator_tag>`, and
64
  - `iterator_traits<{}Iterator>::iterator_category` otherwise.
 
4
  namespace std {
5
  template<class Iterator>
6
  class move_iterator {
7
  public:
8
  using iterator_type = Iterator;
9
+ using iterator_concept = see below;
10
+ using iterator_category = see below; // not always present
11
  using value_type = iter_value_t<Iterator>;
12
  using difference_type = iter_difference_t<Iterator>;
13
  using pointer = Iterator;
14
  using reference = iter_rvalue_reference_t<Iterator>;
15
 
16
  constexpr move_iterator();
17
  constexpr explicit move_iterator(Iterator i);
18
  template<class U> constexpr move_iterator(const move_iterator<U>& u);
19
  template<class U> constexpr move_iterator& operator=(const move_iterator<U>& u);
20
 
21
+ constexpr const Iterator& base() const & noexcept;
22
+ constexpr Iterator base() &&;
23
  constexpr reference operator*() const;
24
 
25
  constexpr move_iterator& operator++();
26
  constexpr auto operator++(int);
27
  constexpr move_iterator& operator--();
 
54
  Iterator current; // exposition only
55
  };
56
  }
57
  ```
58
 
59
+ The member *typedef-name* `iterator_concept` is defined as follows:
60
+
61
+ - If `Iterator` models `random_access_iterator`, then `iterator_concept`
62
+ denotes `random_access_iterator_tag`.
63
+ - Otherwise, if `Iterator` models `bidirectional_iterator`, then
64
+ `iterator_concept` denotes `bidirectional_iterator_tag`.
65
+ - Otherwise, if `Iterator` models `forward_iterator`, then
66
+ `iterator_concept` denotes `forward_iterator_tag`.
67
+ - Otherwise, `iterator_concept` denotes `input_iterator_tag`.
68
+
69
+ The member *typedef-name* `iterator_category` is defined if and only if
70
+ the *qualified-id* `iterator_traits<Iterator>::iterator_category` is
71
+ valid and denotes a type. In that case, `iterator_category` denotes
72
 
73
  - `random_access_iterator_tag` if the type
74
  `iterator_traits<{}Iterator>::iterator_category` models
75
  `derived_from<random_access_iterator_tag>`, and
76
  - `iterator_traits<{}Iterator>::iterator_category` otherwise.