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