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

FreeBSD Manual Pages

  
 
  

home | help
deductiongu...forstd::span(3) C++ Standard Libarydeductiongu...forstd::span(3)

NAME
       deductionguidesforstd::span - deductionguidesforstd::span

Synopsis
	  Defined in header <span>
	  template <class It, class EndOrSize>
	  span(It,			  EndOrSize)			    ->
       (1)
	  span<std::remove_reference_t<std::iter_reference_t<It>>>;
	  template<class	     T,		    std::size_t		    N>
       (2)
	  span(T (&)[N]) -> span<T, N>;
	  template<class	     T,		    std::size_t		    N>
       (3)
	  span(std::array<T, N>&) -> span<T, N>;
	  template<class	     T,		    std::size_t		    N>
       (4)
	  span(const std::array<T, N>&)	-> span<const T, N>;
	  template<class						    R>
       (5)
	  span(R&&) ->	span<std::remove_reference_t<std::ranges::range_refer-
       ence_t<R>>>;

	  The following	deduction guides are provided for span.

	  (1)  allow the element type to be deduced from the iterator-sentinel
       pair. This
	  overload participates	in overload resolution only if It satisfies
	  contiguous_iterator

	  (2-4)	allow the static extent	to be deduced from built-in arrays and
       std::array.

	  (5) allow the	element	type to	be deduced from	ranges.	This  overload
       participates in
	  overload resolution only if R	satisfies contiguous_range

Example
       // Run this code

	#include <array>
	#include <cstddef>
	#include <iomanip>
	#include <iostream>
	#include <span>
	#include <string_view>
	#include <vector>

	void  print(std::string_view  rem  =  "",  std::size_t	size_of	 =  0,
       std::size_t extent = 0) {
	    if (rem.empty()) {
		std::cout << "name  sizeof  extent\n\n";
		return;
	    }
	    std::cout << std::setw(4) <<  rem  <<  "   "  <<  std::setw(6)  <<
       size_of << "  ";
	    if (extent == std::dynamic_extent)
		std::cout << "dynamic";
	    else
		std::cout << extent;
	    std::cout << '\n';
	}

	int main() {
	    int	a[] {1,	2, 3, 4, 5};

	    print();
	    std::span s1 {std::begin(a), std::end(a)}; // guide	(1)
	    print("s1",	sizeof s1, s1.extent);

	    std::span s2 {std::begin(a), 3}; //	guide (1)
	    print("s2",	sizeof s2, s2.extent);

	    std::span s3 {a}; // guide (2)
	    print("s3",	sizeof s3, s3.extent);

	    std::span<int>  s4	{a};  // does not use a	guide, makes a dynamic
       span
	    print("s4",	sizeof s4, s4.extent);

	    std::array arr {6, 7, 8};
	    std::span s5 {arr};	// guide (3)
	    print("s5",	sizeof s5, s5.extent);
	    s5[0] = 42;	// OK, element_type is 'int'

	    const std::array arr2 {9, 10, 11};
	    std::span s6 {arr2}; // guide (4)
	    print("s6",	sizeof s6, s6.extent);
	    // s6[0] = 42; // Error: element_type is 'const int'

	    std::vector	v {66, 69, 99};
	    std::span s7 {v}; // guide (5)
	    print("s7",	sizeof s7, s7.extent);
	}

Output:
	name  sizeof  extent

	  s1	  16  dynamic
	  s2	  16  dynamic
	  s3	   8  5
	  s4	  16  dynamic
	  s5	   8  3
	  s6	   8  3
	  s7	  16  dynamic

http://cppreference.com		  2022.07.31	 deductiongu...forstd::span(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=deductionguidesforstd::span&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help