5 #ifndef VCCC_ALGORITHM_RANGES_DETAIL_INPUT_RANGE_CHECK_HPP_
6 #define VCCC_ALGORITHM_RANGES_DETAIL_INPUT_RANGE_CHECK_HPP_
21 template<
typename F,
typename I,
typename...>
class Test,
22 template<
typename I>
class IteratorModel,
23 typename I,
typename S,
typename Proj,
typename Pred,
29 struct algo_check_unary_iterator : Test<Pred, projected<I, Proj>> {};
32 template<
typename F,
typename I,
typename...>
class Test,
33 template<
typename I>
class IteratorModel,
34 typename I,
typename S,
typename Proj,
typename Pred
36 struct algo_check_unary_iterator<Test, IteratorModel, I, S, Proj, Pred, false> : std::false_type {};
40 template<
typename F,
typename I1,
typename I2>
class Test,
41 template<
typename I>
class IteratorModel,
42 typename I,
typename S,
typename T,
typename Proj,
typename Pred,
48 struct algo_check_binary_iterator : Test<Pred, projected<I, Proj>, T> {};
51 template<
typename F,
typename I1,
typename I2>
class Test,
52 template<
typename I>
class IteratorModel,
53 typename I,
typename S,
typename T,
typename Proj,
typename Pred>
54 struct algo_check_binary_iterator<Test, IteratorModel, I, S, T, Proj, Pred, false> : std::false_type {};
60 template<
typename F,
typename I,
typename...>
class Test,
61 typename I,
typename Proj,
typename Pred,
64 struct algo_check_unary_range_2 : Test<Pred, projected<I, Proj>> {};
67 template<
typename F,
typename I,
typename...>
class Test,
68 typename I,
typename Proj,
typename Pred
70 struct algo_check_unary_range_2<Test, I, Proj, Pred, false> : std::false_type {};
73 template<
typename F,
typename I,
typename...>
class Test,
74 template<
typename R>
class RangeModel,
75 typename R,
typename Proj,
typename Pred,
78 struct algo_check_unary_range : algo_check_unary_range_2<Test, iterator_t<R>, Proj, Pred> {};
81 template<
typename F,
typename I,
typename...>
class Test,
82 template<
typename R>
class RangeModel,
83 typename R,
typename Proj,
typename Pred
85 struct algo_check_unary_range<Test, RangeModel, R, Proj, Pred, false> : std::false_type {};
90 template<
typename F,
typename I1,
typename I2>
class Test,
91 typename I,
typename T,
typename Proj,
typename Pred,
93 struct algo_check_binary_range_2 : Test<Pred, projected<I, Proj>, T> {};
96 template<
typename F,
typename I1,
typename I2>
class Test,
97 typename I,
typename T,
typename Proj,
typename Pred>
98 struct algo_check_binary_range_2<Test, I, T, Proj, Pred, false> : std::false_type {};
101 template<
typename F,
typename I1,
typename I2>
class Test,
102 template<
typename R>
class RangeModel,
103 typename R,
typename T,
typename Proj,
typename Pred,
105 struct algo_check_binary_range : algo_check_binary_range_2<Test, iterator_t<R>, T, Proj, Pred> {};
108 template<
typename F,
typename I1,
typename I2>
class Test,
109 template<
typename R>
class RangeModel,
110 typename R,
typename T,
typename Proj,
typename Pred>
111 struct algo_check_binary_range<Test, RangeModel, R, T, Proj, Pred, false> : std::false_type {};
117 template<
template<
typename F,
typename I,
typename...>
class Test,
typename I,
typename S,
typename Proj,
typename Pred>
118 struct algo_check_unary_input_iterator : algo_check_unary_iterator<Test, input_iterator, I, S, Proj, Pred> {};
125 template<
typename F,
typename I,
typename...>
class Test,
126 typename I,
typename S,
typename Proj,
typename Pred>
127 struct algo_check_unary_forward_iterator : algo_check_unary_iterator<Test, forward_iterator, I, S, Proj, Pred> {};
134 template<
typename F,
typename I1,
typename I2>
class Test,
135 typename I,
typename S,
typename T,
typename Proj,
typename Pred>
136 struct algo_check_binary_input_iterator : algo_check_binary_iterator<Test, input_iterator, I, S, T, Proj, Pred> {};
142 template<
template<
typename F,
typename I,
typename...>
class Test,
typename R,
typename Proj,
typename Pred>
143 struct algo_check_unary_input_range : algo_check_unary_range<Test, input_range, R, Proj, Pred> {};
148 template<
template<
typename F,
typename I,
typename...>
class Test,
typename R,
typename Proj,
typename Pred>
149 struct algo_check_unary_forward_range : algo_check_unary_range<Test, forward_range, R, Proj, Pred> {};
154 template<
typename F,
typename I1,
typename I2>
class Test,
155 typename R,
typename T,
typename Proj,
typename Pred>
156 struct algo_check_binary_input_range : algo_check_binary_range<Test, input_range, R, T, Proj, Pred> {};
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35