5 #ifndef VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_RANDOM_ACCESS_ITERATOR_HPP_
6 #define VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_RANDOM_ACCESS_ITERATOR_HPP_
20 template<
typename I,
typename D,
typename =
void>
21 struct is_iter_add_assignmentable : std::false_type {};
22 template<
typename I,
typename D>
23 struct is_iter_add_assignmentable<I, D,
void_t<decltype(
std::declval<I&>() += std::declval<D&>())>>
24 : same_as<decltype(std::declval<I&>() += std::declval<D&>()), I&> {};
26 template<
typename I,
typename D,
typename =
void>
27 struct is_iter_sub_assignmentable : std::false_type {};
28 template<
typename I,
typename D>
29 struct is_iter_sub_assignmentable<I, D,
void_t<decltype(
std::declval<I&>() -= std::declval<D&>())>>
30 : same_as<decltype(std::declval<I&>() -= std::declval<D&>()), I&> {};
32 template<
typename I,
typename D,
typename =
void,
typename =
void>
33 struct is_iter_addable : std::false_type {};
34 template<
typename I,
typename D>
35 struct is_iter_addable<I, D,
36 void_t<decltype(
std::declval<I&>() + std::declval<D&>())>,
37 void_t<decltype(std::declval<D&>() + std::declval<I&>())>>
39 same_as<decltype(std::declval<I&>() + std::declval<D&>()), I>,
40 same_as<decltype(std::declval<D&>() + std::declval<I&>()), I>
43 template<
typename I,
typename D,
typename =
void,
typename =
void>
44 struct is_iter_subtractable : std::false_type {};
45 template<
typename I,
typename D>
46 struct is_iter_subtractable<I, D,
47 void_t<decltype(
std::declval<I&>() - std::declval<D&>())>,
48 void_t<decltype(std::declval<I&>() - std::declval<I&>())>>
50 same_as<decltype(std::declval<I&>() - std::declval<D&>()), I>,
51 same_as<decltype(std::declval<I&>() - std::declval<I&>()), D>
54 template<
typename I,
typename D,
typename =
void>
55 struct is_iter_subscriptable : std::false_type {};
57 template<
typename I,
typename D>
58 struct is_iter_subscriptable<I, D,
void_t<decltype(
std::declval<I&>()[std::declval<D&>()] )>>
59 : convertible_to<decltype( std::declval<I&>()[std::declval<D&>()] ), iter_reference_t<I>> {};
61 template<
typename I,
typename D>
62 struct LegacyRandomAccessIteratorStage2
64 is_iter_add_assignmentable<I, D>,
65 is_iter_sub_assignmentable<I, D>,
66 is_iter_addable<I, D>,
67 is_iter_subtractable<I, D>,
68 is_iter_subscriptable<I, D>
72 struct LegacyRandomAccessIteratorStage1 : std::false_type {};
74 template<
typename I,
typename D>
75 struct LegacyRandomAccessIteratorStage1<I, D, true> : LegacyRandomAccessIteratorStage2<I, D> {};
86 template<
typename I,
bool = conjunction<LegacyB
idirectionalIterator<I>, totally_ordered<I>>::value>
91 : detail::LegacyRandomAccessIteratorStage1<I, typename incrementable_traits<I>::difference_type> {};
Definition: matrix.hpp:495
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: legacy_random_access_iterator.hpp:87