ug_misc
0.1
Miscellaneous C++ header library
Loading...
Searching...
No Matches
xchg.hpp
Go to the documentation of this file.
1
/*
2
* SPDX-Licence-Identifier: MIT
3
*
4
* Copyright 2025 Larry Chips
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the “Software”), to deal
8
* in the Software without restriction, including without limitation the rights
9
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
* copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*/
24
#pragma once
25
26
#include "
ugmisc/features.hpp
"
27
28
#ifdef UGMISC_HAVE_CONSTEXPR_EXCHANGE
29
#include <algorithm>
30
#endif
31
#include <utility>
32
33
43
44
45
46
47
namespace
ugmisc {
48
49
50
51
59
template
<
class
T,
class
U=T>
60
constexpr
T
xchg
(T&
object
, U&& new_value) {
61
if
constexpr
(
Features::constexpr_swap_algorithms
) {
62
return
std::exchange(
object
, std::forward<U>(new_value));
63
}
else
{
64
T ret{std::move(
object
)};
65
object
= std::move(new_value);
66
return
ret;
67
}
68
}
69
70
71
72
73
}
/* ::ugmisc */
features.hpp
Feature detection.
ugmisc::Features::constexpr_swap_algorithms
static constexpr bool constexpr_swap_algorithms
Definition
features.hpp:430
ugmisc::xchg
constexpr T xchg(T &object, U &&new_value)
Definition
xchg.hpp:60
ugmisc
xchg.hpp
Generated by
1.14.0