[range.prim.data] (original) (raw)
25 Ranges library [ranges]
25.3 Range access [range.access]
25.3.15 ranges::data [range.prim.data]
Given a subexpression E with type T, let t be an lvalue that denotes the reified object for E.
Then:
- If E is an rvalue andenable_borrowed_range<remove_cv_t<T>> is false,ranges::data(E) is ill-formed.
- Otherwise, if T is an array type ([dcl.array]) andremove_all_extents_t<T> is an incomplete type,ranges::data(E) is ill-formed with no diagnostic required.
- Otherwise, if auto(t.data()) is a valid expression of pointer to object type,ranges::data(E) is expression-equivalent toauto(t.data()).
- Otherwise, if ranges::begin(t) is a valid expression whose type modelscontiguous_iterator,ranges::data(E) is expression-equivalent toto_address(ranges::begin(t)).
- Otherwise, ranges::data(E) is ill-formed.
[Note 1:
Diagnosable ill-formed cases above result in substitution failure when ranges::data(E)appears in the immediate context of a template instantiation.
— _end note_]
[Note 2:
Whenever ranges::data(E) is a valid expression, it has pointer to object type.
— _end note_]