5 #ifndef VCCC_ITERATOR_INDIRECTLY_SWAPPABLE_HPP
6 #define VCCC_ITERATOR_INDIRECTLY_SWAPPABLE_HPP
18 template<
typename I1,
typename I2,
typename =
void>
19 struct indirectly_swappable_test_iter_swap : std::false_type {};
20 template<
typename I1,
typename I2>
21 struct indirectly_swappable_test_iter_swap<
22 I1, I2,
void_t<decltype(ranges::
iter_swap(std::declval<const I1&>(), std::declval<const I2&>()))>> : std::true_type {};
27 bool = conjunction< indirectly_readable<I1>, indirectly_readable<I2>>
::value
29 struct indirectly_swappable_impl
31 indirectly_swappable_test_iter_swap<I1, I1>,
32 indirectly_swappable_test_iter_swap<I2, I2>,
33 indirectly_swappable_test_iter_swap<I1, I2>,
34 indirectly_swappable_test_iter_swap<I2, I1>
37 template<
typename I1,
typename I2>
38 struct indirectly_swappable_impl<I1, I2, false> : std::false_type {};
45 template<
typename I1,
typename I2 = I1>
constexpr VCCC_INLINE_OR_STATIC detail_iter_swap::iter_swap_niebloid iter_swap
Definition: iter_swap.hpp:90
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: indirectly_swappable.hpp:46