24 Ranges library [ranges]

24.3 Range access [range.access]

24.3.11 ranges​::​data [range.prim.data]

The name data denotes a customization point object ([customization.point.object]).
The expression ranges​::​data(E) for a subexpression E is expression-equivalent to:
  • If E is an lvalue, decay-copy(E.data()) if it is a valid expression of pointer to object type.
  • Otherwise, if ranges​::​begin(E) is a valid expression whose type models contiguous_­iterator, to_­address(ranges​::​begin(E)).
  • Otherwise, ranges​::​data(E) is ill-formed.
    : This case can result in substitution failure when ranges​::​data(E) appears in the immediate context of a template instantiation. — end note
Whenever ranges​::​data(E) is a valid expression, it has pointer to object type.
— end note