5 #ifndef VCCC_ITERATOR_ITER_SWAP_HPP
6 #define VCCC_ITERATOR_ITER_SWAP_HPP
27 namespace detail_iter_swap {
29 template<
typename T,
typename U>
32 template<
typename T,
typename U>
35 template<
typename T,
typename U>
38 template<
typename T,
typename U,
bool =
disjunction<
44 template<
typename T,
typename U>
47 template<
typename I1,
typename I2,
bool = conjunction<indirectly_readable<I1>, indirectly_readable<I2>>::value >
49 template<
typename I1,
typename I2>
55 noexcept(noexcept(
iter_swap(std::forward<I1>(i1), std::forward<I2>(i2))))
57 (void)
iter_swap(std::forward<I1>(i1), std::forward<I2>(i2));
60 template<
typename I1,
typename I2, std::enable_if_t<
conjunction<
67 ranges::swap(*std::forward<I1>(i1), *std::forward<I2>(i2));
70 template<
typename I1,
typename I2, std::enable_if_t<
conjunction<
77 noexcept(noexcept( *i1 = vccc::detail::iter_exchange_move(std::forward<I2>(i2), std::forward<I1>(i1)) ))
79 (void)(*i1 = vccc::detail::iter_exchange_move(std::forward<I2>(i2), std::forward<I1>(i1)));
95 using namespace niebloid;
constexpr VCCC_INLINE_OR_STATIC detail_ranges_swap::swap_niebloid swap
swaps the values of two objects
Definition: swap.hpp:99
constexpr VCCC_INLINE_OR_STATIC detail_iter_swap::iter_swap_niebloid iter_swap
Definition: iter_swap.hpp:90
#define VCCC_INLINE_OR_STATIC
Definition: inline_or_static.hpp:9
void iter_swap(T, U)=delete
constexpr auto test_iter_swap(int) -> decltype(iter_swap(std::declval< T >(), std::declval< U >()), std::true_type{})
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: conjunction.hpp:22
Definition: disjunction.hpp:22
specifies that values may be moved from an indirectly_readable type to an indirectly_writable type an...
Definition: indirectly_movable_storable.hpp:50
Definition: is_class_or_enum.hpp:20
Definition: negation.hpp:23
Definition: iter_swap.hpp:52
constexpr void operator()(I1 &&i1, I2 &&i2) const noexcept(noexcept(ranges::swap(*i1, *i2)))
Definition: iter_swap.hpp:64
constexpr void operator()(I1 &&i1, I2 &&i2) const noexcept(noexcept(iter_swap(std::forward< I1 >(i1), std::forward< I2 >(i2))))
Definition: iter_swap.hpp:54
constexpr void operator()(I1 &&i1, I2 &&i2) const noexcept(noexcept(*i1=vccc::detail::iter_exchange_move(std::forward< I2 >(i2), std::forward< I1 >(i1))))
Definition: iter_swap.hpp:76
Definition: iter_swap.hpp:48
Definition: iter_swap.hpp:42
specifies that a type can be swapped or that two types can be swapped with each other
Definition: swappable_with.hpp:51