From Jason Turner

[range.access.crbegin]

Diff to HTML by rtfpessoa

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