From Jason Turner

[range.access.cbegin]

Diff to HTML by rtfpessoa

tmp/tmp64u1tqaj/{from.md → to.md} RENAMED
@@ -1,12 +1,16 @@
1
  ### `ranges::cbegin` <a id="range.access.cbegin">[[range.access.cbegin]]</a>
2
 
3
  The name `ranges::cbegin` denotes a customization point object
4
- [[customization.point.object]]. The expression `ranges::{}cbegin(E)` for
5
- a subexpression `E` of type `T` is expression-equivalent to:
6
 
7
- - `ranges::begin(static_cast<const T&>(E))` if `E` is an lvalue.
8
- - Otherwise, `ranges::begin(static_cast<const T&&>(E))`.
 
 
 
9
 
10
  [*Note 1*: Whenever `ranges::cbegin(E)` is a valid expression, its type
11
- models `input_or_output_iterator`. — *end note*]
 
12
 
 
1
  ### `ranges::cbegin` <a id="range.access.cbegin">[[range.access.cbegin]]</a>
2
 
3
  The name `ranges::cbegin` denotes a customization point object
4
+ [[customization.point.object]]. Given a subexpression `E` with type `T`,
5
+ let `t` be an lvalue that denotes the reified object for `E`. Then:
6
 
7
+ - If `E` is an rvalue and `enable_borrowed_range<remove_cv_t<T>>` is
8
+ `false`, `ranges::cbegin(E)` is ill-formed.
9
+ - Otherwise, let `U` be `ranges::begin(possibly-const-range(t))`.
10
+ `ranges::cbegin(E)` is expression-equivalent to
11
+ `const_iterator<decltype(U)>(U)`.
12
 
13
  [*Note 1*: Whenever `ranges::cbegin(E)` is a valid expression, its type
14
+ models `input_or_output_iterator` and
15
+ `constant-iterator`. — *end note*]
16