std::contiguous_iterator(3)

NAME
std::contiguous_iterator - std::contiguous_iterator

Synopsis
   Defined in header <iterator>
   template< class I >
       concept contiguous_iterator =
           std::random_access_iterator<I> &&
           std::derived_from</*ITER_CONCEPT*/<I>,
   std::contiguous_iterator_tag> &&
           std::is_lvalue_reference_v<std::iter_reference_t<I>> &&
           std::same_as< (since
               std::iter_value_t<I>, C++20)
   std::remove_cvref_t<std::iter_reference_t<I>>
           > &&
           requires(const I& i) {
               { std::to_address(i) } ->
                 std::same_as<std::add_pointer_t<std::iter_reference_t<I>>>;
           };
   The contiguous_iterator concept refines random_access_iterator by providing a
   guarantee the denoted elements are stored contiguously in the memory.

Notes
   contiguous_iterator is modeled by every pointer type to complete object type.
   Iterator types in the standard library that are required to satisfy the
   LegacyContiguousIterator requirements in C++17 are also required to model
   contiguous_iterator in C++20.

See also
                        specifies that a bidirectional_iterator is a random-access
   random_access_iterator iterator, supporting advancement in constant time and
   (C++20) subscripting
                        (concept)