From Jason Turner

[range.owning.view]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpy7c4z31u/{from.md → to.md} +56 -0
tmp/tmpy7c4z31u/{from.md → to.md} RENAMED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Class template `owning_view` <a id="range.owning.view">[[range.owning.view]]</a>
2
+
3
+ `owning_view` is a move-only view of the elements of some other range.
4
+
5
+ ``` cpp
6
+ namespace std::ranges {
7
+ template<range R>
8
+ requires movable<R> && (!is-initializer-list<R>) // see [range.refinements]
9
+ class owning_view : public view_interface<owning_view<R>> {
10
+ private:
11
+ R r_ = R(); // exposition only
12
+
13
+ public:
14
+ owning_view() requires default_initializable<R> = default;
15
+ constexpr owning_view(R&& t);
16
+
17
+ owning_view(owning_view&&) = default;
18
+ owning_view& operator=(owning_view&&) = default;
19
+
20
+ constexpr R& base() & noexcept { return r_; }
21
+ constexpr const R& base() const & noexcept { return r_; }
22
+ constexpr R&& base() && noexcept { return std::move(r_); }
23
+ constexpr const R&& base() const && noexcept { return std::move(r_); }
24
+
25
+ constexpr iterator_t<R> begin() { return ranges::begin(r_); }
26
+ constexpr sentinel_t<R> end() { return ranges::end(r_); }
27
+
28
+ constexpr auto begin() const requires range<const R>
29
+ { return ranges::begin(r_); }
30
+ constexpr auto end() const requires range<const R>
31
+ { return ranges::end(r_); }
32
+
33
+ constexpr bool empty() requires requires { ranges::empty(r_); }
34
+ { return ranges::empty(r_); }
35
+ constexpr bool empty() const requires requires { ranges::empty(r_); }
36
+ { return ranges::empty(r_); }
37
+
38
+ constexpr auto size() requires sized_range<R>
39
+ { return ranges::size(r_); }
40
+ constexpr auto size() const requires sized_range<const R>
41
+ { return ranges::size(r_); }
42
+
43
+ constexpr auto data() requires contiguous_range<R>
44
+ { return ranges::data(r_); }
45
+ constexpr auto data() const requires contiguous_range<const R>
46
+ { return ranges::data(r_); }
47
+ };
48
+ }
49
+ ```
50
+
51
+ ``` cpp
52
+ constexpr owning_view(R&& t);
53
+ ```
54
+
55
+ *Effects:* Initializes *r\_* with `std::move(t)`.
56
+