VCCC  2024.05
VisualCamp Common C++ library
legacy_input_iterator.hpp
Go to the documentation of this file.
1 //
2 // Created by yonggyulee on 2023/12/25.
3 //
4 
5 #ifndef VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_INPUT_ITERATOR_HPP_
6 #define VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_INPUT_ITERATOR_HPP_
7 
8 #include <type_traits>
9 
20 
21 namespace vccc {
22 namespace detail {
23 
24 template<
25  typename I,
26  bool = conjunction<
27  LegacyIterator<I>,
28  equality_comparable<I>,
29  has_typename_difference_type<incrementable_traits<I>>,
30  has_typename_value_type<indirectly_readable_traits<I>>,
31  has_typename_type<iter_reference<I>>
32  >::value
33 >
34 struct LegacyInputIteratorRequiresStage1 : std::false_type {};
35 
36 template<typename I>
37 struct LegacyInputIteratorRequiresStage1<I, true>
38  : conjunction<
39  has_typename_type<common_reference<iter_reference_t<I>&&,
40  typename indirectly_readable_traits<I>::value_type&>>,
41  has_typename_type<common_reference<decltype(*std::declval<I&>()++)&&, // *i++ satisfied in LegacyIterator<I>
42  typename indirectly_readable_traits<I>::value_type&>>,
43  signed_integral<typename incrementable_traits<I>::difference_type>
44  > {};
45 
46 } // namespace detail
47 
56 struct LegacyInputIterator : std::false_type {};
57 
58 template<typename I>
59 struct LegacyInputIterator<I, true> : detail::LegacyInputIteratorRequiresStage1<I> {};
60 
63 
64 } // namespace vccc
65 
66 #endif // VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_INPUT_ITERATOR_HPP_
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: legacy_input_iterator.hpp:56