5 #ifndef VCCC_ITERATOR_CONTIGUOUS_ITERATOR_HPP_
6 #define VCCC_ITERATOR_CONTIGUOUS_ITERATOR_HPP_
27 template<
typename I,
typename =
void>
28 struct explicit_contiguous_requires : std::false_type {};
30 struct explicit_contiguous_requires<
33 > : same_as<decltype( vccc::to_address( std::declval<I>() ) ), std::add_pointer_t<iter_reference_t<remove_cvref_t<I>>>> {};
36 struct contiguous_requires : implicit_expression_check<explicit_contiguous_requires, const I&> {};
42 struct contiguous_iterator_impl : std::false_type {};
45 struct contiguous_iterator_impl<I, true>
47 #if __cplusplus < 202002L
50 derived_from<ITER_CONCEPT<I>, contiguous_iterator_tag>,
51 #if __cplusplus < 202002L
53 derived_from<ITER_CONCEPT<I>, random_access_iterator_tag>,
54 LegacyRandomAccessIterator<I>
58 std::is_lvalue_reference<iter_reference_t<I>>,
59 same_as<iter_value_t<I>, remove_cvref_t<iter_reference_t<I>>>,
60 contiguous_requires<I>
88 struct contiguous_iterator : detail::contiguous_iterator_impl<I> {};
constexpr T * to_address(T *p) noexcept
Definition: to_address.hpp:37
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35