VCCC  2024.05
VisualCamp Common C++ library
indirect_strict_weak_order.hpp
Go to the documentation of this file.
1 //
2 // Created by yonggyulee on 2023/12/24.
3 //
4 
5 #ifndef VCCC_ITERATOR_INDIRECT_STRICT_WEAK_ORDER_HPP
6 #define VCCC_ITERATOR_INDIRECT_STRICT_WEAK_ORDER_HPP
7 
8 #include <type_traits>
9 
18 
19 namespace vccc {
20 namespace detail {
21 
22 template<
23  typename F,
24  typename I1,
25  typename I2,
26  bool = conjunction<
27  indirectly_readable<I1>,
28  indirectly_readable<I2>,
29  copy_constructible<F>,
30  has_typename_type<iter_common_reference<I1>>,
31  has_typename_type<iter_common_reference<I2>>
32  >::value /* false */
33 >
34 struct indirect_strict_weak_order_impl_1 : std::false_type {};
35 
36 
37 template<typename F, typename I1, typename I2>
38 struct indirect_strict_weak_order_impl_1<F, I1, I2, true>
39  : conjunction<
40  strict_weak_order<F&, iter_value_t<I1>&, iter_value_t<I2>&>,
41  strict_weak_order<F&, iter_value_t<I1>&, iter_reference_t<I2>&>,
42  strict_weak_order<F&, iter_reference_t<I1>&, iter_value_t<I2>&>,
43  strict_weak_order<F&, iter_reference_t<I1>&, iter_reference_t<I2>&>,
44  strict_weak_order<F&, iter_common_reference_t<I1>, iter_common_reference_t<I2>>
45  > {};
46 
47 } // namespace detail
48 
51 
62 template<typename F, typename I1, typename I2 = I1>
63 struct indirect_strict_weak_order : detail::indirect_strict_weak_order_impl_1<F, I1, I2> {};
64 
66 
67 } // namespace vccc
68 
69 #endif // VCCC_ITERATOR_INDIRECT_STRICT_WEAK_ORDER_HPP
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
specifies that a callable type, when invoked with the result of dereferencing two indirectly_readable...
Definition: indirect_strict_weak_order.hpp:63