VCCC  2024.05
VisualCamp Common C++ library
legacy_forward_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_FORWARD_ITERATOR_HPP_
6 #define VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_FORWARD_ITERATOR_HPP_
7 
8 #include <type_traits>
9 
17 
18 namespace vccc {
19 namespace detail {
20 
21 template<
22  typename It,
23  bool =
24  conjunction<
25  constructible_from<It>,
26  std::is_reference<iter_reference_t<It>>, // iter_reference_t<It> satisfied in LegacyInputIterator,
27  same_as<
28  remove_cvref_t<iter_reference_t<It>>,
29  typename indirectly_readable_traits<It>::value_type>, // indirectly_readable_traits<It>::value already satisfied
30  convertible_to<decltype(std::declval<It&>()++), const It&>,
31  same_as<decltype(*std::declval<It&>()++), iter_reference_t<It>>
32  >::value
33 >
34 struct LegacyForwardIteratorRequire : std::false_type {};
35 
36 template<typename It>
37 struct LegacyForwardIteratorRequire<It, true> : std::true_type {};
38 
39 } // namespace detail
40 
49 struct LegacyForwardIterator : std::false_type {};
50 
51 template<typename It>
52 struct LegacyForwardIterator<It, true> : detail::LegacyForwardIteratorRequire<It> {};
53 
56 
57 } // namespace vccc
58 
59 #endif // VCCC_ITERATOR_ITERATOR_TRAITS_LEGACY_FORWARD_ITERATOR_HPP_
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: legacy_forward_iterator.hpp:49