cpp/ranges/data

Returns a pointer to the first element of a contiguous range.

If is an array type and  is incomplete, then the call to  is ill-formed, no diagnostic required.

If the argument is an lvalue or is, a call to  is expression-equivalent to:
 * , if that expression is valid and its type is a pointer to an object type.
 * 1) Otherwise,, if the expression  is valid and its type models std.

In all other cases, a call to is ill-formed, which can result in substitution failure when  appears in the immediate context of a template instantiation.