Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::ranges::data(3)	      C++ Standard Libary	  std::ranges::data(3)

NAME
       std::ranges::data - std::ranges::data

Synopsis
	  Defined in header <ranges>
	  Defined in header <iterator>
	  inline namespace /* unspecified */ {

	      inline  constexpr	 /*  unspecified  */  data  = /*	(since
       C++20)
	  unspecified */;					   (customiza-
       tion point object)

	  }
	  Call signature
	  template< class T >

	      requires	 /*  see  below	 */				(since
       C++20)
	  constexpr std::remove_reference_t<

	      ranges::range_reference_t<T>>* data( T&& t );

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

	  If T is an array type	and std::remove_all_extents_t<std::remove_ref-
       erence_t<T>> is
	  incomplete, then the call to ranges::data is ill-formed, no diagnos-
       tic required.

	  If   the   argument	is   an	   lvalue    or	   ranges::enable_bor-
       rowed_range<std::remove_cv_t<T>>
	  is true, a call to ranges::data is expression-equivalent to:

	   1. decay-copy(t.data())
	      (until C++23)
	      auto(t.data())
	      (since  C++23),  if  that	 expression is valid and its type is a
       pointer to an
	      object type.
	   2. Otherwise, std::to_address(ranges::begin(t)), if the  expression
       ranges::begin(t)
	      is valid and its type models std::contiguous_iterator.

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

Notes
	  If the argument is an	rvalue (i.e. T is an object type) and
	  ranges::enable_borrowed_range<std::remove_cv_t<T>>   is  false,  the
       call to
	  ranges::data is ill-formed, which also results in substitution fail-
       ure.

	  If ranges::data(e) is	valid for an expression	e, then	it  returns  a
       pointer to an
	  object.

	  The  C++20  standard	requires  that if the underlying data function
       call returns a
	  prvalue, the return value is move-constructed	from the  materialized
       temporary
	  object. All implementations directly return the prvalue instead. The
       requirement is
	  corrected  by	the post-C++20 proposal	P0849R8	to match the implemen-
       tations.

Example
       // Run this code

	#include <cstring>
	#include <iostream>
	#include <ranges>
	#include <string>

	int main()
	{
	    std::string	s{"Hello world!\n"};

	    char a[20];	// storage for a C-style string
	    std::strcpy(a, std::ranges::data(s));
	    // [data(s), data(s) + size(s)] is guaranteed to be	an NTBS

	    std::cout << a;
	}

Output:
	Hello world!

See also
	  ranges::cdata	obtains	a pointer to the beginning of a	read-only con-
       tiguous range
	  (C++20)	(customization point object)
	  ranges::begin	returns	an iterator to the beginning of	a range
	  (C++20)	(customization point object)
	  data		obtains	the pointer to the underlying array
	  (C++17)	(function template)

http://cppreference.com		  2024.06.10		  std::ranges::data(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::data&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help