5 #ifndef VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_BIDIRECTIONAL_ITERATOR_HPP_
6 #define VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_BIDIRECTIONAL_ITERATOR_HPP_
22 template<
typename T,
typename =
void>
23 struct is_pre_decrementable : std::false_type {};
26 struct is_pre_decrementable<T,
void_t<decltype( --
std::declval<T&>() )>>
27 : same_as<decltype( --std::declval<T&>() ), T&> {};
29 template<
typename T,
typename =
void>
30 struct is_post_decrementable : std::false_type {};
33 struct is_post_decrementable<T,
void_t<decltype(
std::declval<T&>()-- )>>
34 : convertible_to<decltype(std::declval<T&>()--), const T&> {};
38 bool = dereferenceable<decltype(std::declval<It&>()--)>::
value
40 struct LegacyBidirectionalIteratorRequireStage2 : std::false_type {};
43 struct LegacyBidirectionalIteratorRequireStage2<It, true>
44 : same_as<decltype(*std::declval<It&>()--), iter_reference_t<It>> {};
51 is_pre_decrementable<It>,
52 is_post_decrementable<It>
55 struct LegacyBidirectionalIteratorRequireStage1 : std::false_type {};
58 struct LegacyBidirectionalIteratorRequireStage1<It, true> : LegacyBidirectionalIteratorRequireStage2<It> {};
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_bidirectional_iterator.hpp:70