From Jason Turner

[span.overview]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpcxzn4vn3/{from.md → to.md} +10 -1
tmp/tmpcxzn4vn3/{from.md → to.md} RENAMED
@@ -1,6 +1,6 @@
1
- #### Overview <a id="span.overview">[[span.overview]]</a>
2
 
3
  A `span` is a view over a contiguous sequence of objects, the storage of
4
  which is owned by some other object.
5
 
6
  All member functions of `span` have constant time complexity.
@@ -18,11 +18,13 @@ namespace std {
18
  using pointer = element_type*;
19
  using const_pointer = const element_type*;
20
  using reference = element_type&;
21
  using const_reference = const element_type&;
22
  using iterator = implementation-defined // type of span::iterator; // see [span.iterators]
 
23
  using reverse_iterator = std::reverse_iterator<iterator>;
 
24
  static constexpr size_type extent = Extent;
25
 
26
  // [span.cons], constructors, copy, and assignment
27
  constexpr span() noexcept;
28
  template<class It>
@@ -70,12 +72,16 @@ namespace std {
70
  constexpr pointer data() const noexcept;
71
 
72
  // [span.iterators], iterator support
73
  constexpr iterator begin() const noexcept;
74
  constexpr iterator end() const noexcept;
 
 
75
  constexpr reverse_iterator rbegin() const noexcept;
76
  constexpr reverse_iterator rend() const noexcept;
 
 
77
 
78
  private:
79
  pointer data_; // exposition only
80
  size_type size_; // exposition only
81
  };
@@ -91,8 +97,11 @@ namespace std {
91
  template<class R>
92
  span(R&&) -> span<remove_reference_t<ranges::range_reference_t<R>>>;
93
  }
94
  ```
95
 
 
 
 
96
  `ElementType` is required to be a complete object type that is not an
97
  abstract class type.
98
 
 
1
+ ##### Overview <a id="span.overview">[[span.overview]]</a>
2
 
3
  A `span` is a view over a contiguous sequence of objects, the storage of
4
  which is owned by some other object.
5
 
6
  All member functions of `span` have constant time complexity.
 
18
  using pointer = element_type*;
19
  using const_pointer = const element_type*;
20
  using reference = element_type&;
21
  using const_reference = const element_type&;
22
  using iterator = implementation-defined // type of span::iterator; // see [span.iterators]
23
+ using const_iterator = std::const_iterator<iterator>;
24
  using reverse_iterator = std::reverse_iterator<iterator>;
25
+ using const_reverse_iterator = std::const_iterator<reverse_iterator>;
26
  static constexpr size_type extent = Extent;
27
 
28
  // [span.cons], constructors, copy, and assignment
29
  constexpr span() noexcept;
30
  template<class It>
 
72
  constexpr pointer data() const noexcept;
73
 
74
  // [span.iterators], iterator support
75
  constexpr iterator begin() const noexcept;
76
  constexpr iterator end() const noexcept;
77
+ constexpr const_iterator cbegin() const noexcept { return begin(); }
78
+ constexpr const_iterator cend() const noexcept { return end(); }
79
  constexpr reverse_iterator rbegin() const noexcept;
80
  constexpr reverse_iterator rend() const noexcept;
81
+ constexpr const_reverse_iterator crbegin() const noexcept { return rbegin(); }
82
+ constexpr const_reverse_iterator crend() const noexcept { return rend(); }
83
 
84
  private:
85
  pointer data_; // exposition only
86
  size_type size_; // exposition only
87
  };
 
97
  template<class R>
98
  span(R&&) -> span<remove_reference_t<ranges::range_reference_t<R>>>;
99
  }
100
  ```
101
 
102
+ `span<ElementType, Extent>` is a trivially copyable type
103
+ [[term.trivially.copyable.type]].
104
+
105
  `ElementType` is required to be a complete object type that is not an
106
  abstract class type.
107