deduction guides for std::span

From cppreference.com
< cpp‎ | container‎ | span
Defined in header <span>
template <class It, class End>
span(It, End) -> span<std::remove_reference_t<std::iter_reference_t<It>>>;
(1)
template<class T, std::size_t N>
span(T (&)[N]) -> span<T, N>;
(2)
template<class T, std::size_t N>
span(std::array<T, N>&) -> span<T, N>;
(3)
template<class T, std::size_t N>
span(const std::array<T, N>&) -> span<const T, N>;
(4)
template<class R>
span(R&&) -> span<std::remove_reference_t<std::ranges::range_reference_t<R>>>;
(5)

The following deduction guides are provided for span.

(1) allow the element type to be deduced from the iterator-sentinel pair This overload only participates in overload resolution 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 only participates in overload resolution if R satisfies contiguous_range