Iros
 
Loading...
Searching...
No Matches
swap.h
Go to the documentation of this file.
1#pragma once
2
5#include "di/meta/util.h"
8#include "di/util/forward.h"
9
10namespace di::util {
11constexpr inline struct SwapFunction {
12 template<typename T, typename U>
14 constexpr void operator()(T&& a, U&& b) const {
15 di::function::tag_invoke(*this, util::forward<T>(a), util::forward<U>(b));
16 }
17
18 template<typename T, typename U>
21 constexpr void operator()(T& a, U& b) const {
22 auto temp = auto(util::forward<T>(a));
23 a = util::forward<U>(b);
24 b = util::forward<T>(temp);
25 }
27}
28
29namespace di::concepts {
30template<typename T>
31concept Swappable = requires(T& a, T& b) { di::util::swap(a, b); };
32
33template<typename T, typename U>
34concept SwappableWith = requires(T&& a, U&& b) {
35 di::util::swap(util::forward<T>(a), util::forward<T>(a));
36 di::util::swap(util::forward<T>(a), util::forward<U>(b));
37 di::util::swap(util::forward<U>(b), util::forward<T>(a));
38 di::util::swap(util::forward<U>(b), util::forward<U>(b));
39};
40}
41
42namespace di {
45using util::swap;
46}
Definition operations.h:11
Definition operations.h:49
Definition swap.h:34
Definition swap.h:31
Definition tag_invoke.h:33
Definition any_storable.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition vocab.h:96
constexpr struct di::util::SwapFunction swap
Definition zstring_parser.h:9
constexpr struct di::util::SwapFunction swap
Definition swap.h:11