7 template <
class T1,
class T2>
25 explicit(!std::is_convertible_v<const first_type&, first_type> ||
26 !std::is_convertible_v<const second_type&, second_type>)
28 noexcept(std::is_nothrow_copy_constructible_v<first_type>&&
29 std::is_nothrow_copy_constructible_v<second_type>)
30 requires(std::is_copy_constructible_v<first_type>&&
31 std::is_copy_constructible_v<second_type>) :
37 template <
class U1,
class U2>
38 explicit(!std::is_convertible_v<U1&&, first_type> ||
39 !std::is_convertible_v<U2&&, second_type>)
40 BSTTuple(U1&& a_first, U2&& a_second)
41 noexcept(std::is_nothrow_constructible_v<first_type, U1&&>&&
42 std::is_nothrow_constructible_v<second_type, U2&&>)
43 requires(std::is_constructible_v<first_type, U1&&>&&
44 std::is_constructible_v<second_type, U2&&>) :
50 template <
class U1,
class U2>
51 explicit(!std::is_convertible_v<const U1&, first_type> ||
52 !std::is_convertible_v<const U2&, second_type>)
54 noexcept(std::is_nothrow_constructible_v<first_type, const U1&>&&
55 std::is_nothrow_constructible_v<second_type, const U2&>)
56 requires(std::is_constructible_v<first_type, const U1&>&&
57 std::is_constructible_v<second_type, const U2&>) :
63 template <
class U1,
class U2>
64 explicit(!std::is_convertible_v<U1&&, first_type> ||
65 !std::is_convertible_v<U2&&, second_type>)
67 noexcept(std::is_nothrow_constructible_v<first_type, U1&&>&&
68 std::is_nothrow_constructible_v<second_type, U2&&>)
69 requires(std::is_constructible_v<first_type, U1&&>&&
70 std::is_constructible_v<second_type, U2&&>) :
79 BSTTuple(std::piecewise_construct_t, std::tuple<Args1...> a_firstArgs, std::tuple<Args2...> a_secondArgs) :
80 BSTTuple(a_firstArgs, a_secondArgs,
std::index_sequence_for<Args1...>(),
std::index_sequence_for<Args2...>())
90 BSTTuple(Tuple1& a_firstArgs, Tuple2& a_secondArgs, std::index_sequence<I1...>, std::index_sequence<I2...>) :
106 noexcept(std::is_nothrow_copy_assignable_v<first_type>&&
107 std::is_nothrow_copy_assignable_v<second_type>)
108 requires(std::is_copy_assignable_v<first_type>&&
109 std::is_copy_assignable_v<second_type>)
111 if (
this != std::addressof(a_rhs)) {
119 template <
class U1,
class U2>
121 noexcept(std::is_nothrow_assignable_v<first_type&, const U1&>&&
122 std::is_nothrow_assignable_v<second_type&, const U2&>)
123 requires(std::is_assignable_v<first_type&, const U1&>&&
124 std::is_assignable_v<second_type&, const U2&>)
133 noexcept(std::is_nothrow_move_assignable_v<first_type>&&
134 std::is_nothrow_move_assignable_v<second_type>)
135 requires(std::is_move_assignable_v<first_type>&&
136 std::is_move_assignable_v<second_type>)
138 if (
this != std::addressof(a_rhs)) {
146 template <
class U1,
class U2>
148 noexcept(std::is_nothrow_assignable_v<first_type&, U1>&&
149 std::is_nothrow_assignable_v<second_type&, U2>)
150 requires(std::is_assignable_v<first_type&, U1>&&
151 std::is_assignable_v<second_type&, U2>)
161 noexcept(std::is_nothrow_swappable_v<first_type>&&
162 std::is_nothrow_swappable_v<second_type>)
165 if (
this != std::addressof(a_rhs)) {
178 template <
class T1,
class T2>
179 [[nodiscard]]
auto make_pair(T1&& a_first, T2&& a_second)
185 return result_t(std::forward<T1>(a_first), std::forward<T2>(a_second));
188 template <
class T1,
class T2>
195 return result_t(std::forward<T1>(a_first), std::forward<T2>(a_second));
198 template <
class T1,
class T2>
204 template <
class T1,
class T2>
213 template <
class T1,
class T2>
215 noexcept(noexcept(a_lhs.swap(a_rhs)))
217 std::is_swappable_v<T2>)
222 template <
class T1,
class T2>
#define KEEP_FOR_RE()
Definition: PCH.h:713
Definition: AbsorbEffect.h:6
auto make_pair(T1 &&a_first, T2 &&a_second)
Definition: BSTTuple.h:179
BSTTuple(T1, T2) -> BSTTuple< T1, T2 >
constexpr bool operator==(const BSTSmartPointer< T1 > &a_lhs, const BSTSmartPointer< T2 > &a_rhs)
Definition: BSTSmartPointer.h:241
void swap(BSTTuple< T1, T2 > &a_lhs, BSTTuple< T1, T2 > &a_rhs) noexcept(noexcept(a_lhs.swap(a_rhs))) requires(std
Definition: BSTTuple.h:214
auto make_tuple(T1 &&a_first, T2 &&a_second)
Definition: BSTTuple.h:189
bool operator<(const BSTTuple< T1, T2 > &a_lhs, const BSTTuple< T1, T2 > &a_rhs)
Definition: BSTTuple.h:205
requires(std::invocable< std::remove_reference_t< EF >>) class scope_exit
Definition: PCH.h:151
Definition: EffectArchetypes.h:65
BSTTuple & operator=(const BSTTuple &a_rhs) noexcept(std::is_nothrow_copy_assignable_v< first_type > &&std::is_nothrow_copy_assignable_v< second_type >) requires(std
Definition: BSTTuple.h:105
U2 &a_rhs noexcept(std::is_nothrow_constructible_v< first_type, const U1 & > &&std::is_nothrow_constructible_v< second_type, const U2 & >) requires(std
Definition: BSTTuple.h:54
U2 &&a_rhs noexcept(std::is_nothrow_constructible_v< first_type, U1 && > &&std::is_nothrow_constructible_v< second_type, U2 && >) requires(std
Definition: BSTTuple.h:67
BSTTuple & operator=(const BSTTuple< U1, U2 > &a_rhs) noexcept(std::is_nothrow_assignable_v< first_type &, const U1 & > &&std::is_nothrow_assignable_v< second_type &, const U2 & >) requires(std
Definition: BSTTuple.h:120
BSTTuple(std::piecewise_construct_t, std::tuple< Args1... > a_firstArgs, std::tuple< Args2... > a_secondArgs)
Definition: BSTTuple.h:79
first_type first
Definition: BSTTuple.h:172
second_type second
Definition: BSTTuple.h:173
T2 second_type
Definition: BSTTuple.h:12
BSTTuple & operator=(BSTTuple< U1, U2 > &&a_rhs) noexcept(std::is_nothrow_assignable_v< first_type &, U1 > &&std::is_nothrow_assignable_v< second_type &, U2 >) requires(std
Definition: BSTTuple.h:147
void swap(BSTTuple &a_rhs) noexcept(std::is_nothrow_swappable_v< first_type > &&std::is_nothrow_swappable_v< second_type >)
Definition: BSTTuple.h:160
BSTTuple & operator=(BSTTuple &&a_rhs) noexcept(std::is_nothrow_move_assignable_v< first_type > &&std::is_nothrow_move_assignable_v< second_type >) requires(std
Definition: BSTTuple.h:132
T1 first_type
Definition: BSTTuple.h:11
BSTTuple(BSTTuple &&)=default
U2 &&a_second noexcept(std::is_nothrow_constructible_v< first_type, U1 && > &&std::is_nothrow_constructible_v< second_type, U2 && >) requires(std
Definition: BSTTuple.h:41
const second_type &a_second noexcept(std::is_nothrow_copy_constructible_v< first_type > &&std::is_nothrow_copy_constructible_v< second_type >) requires(std
Definition: BSTTuple.h:28
BSTTuple(const BSTTuple &)=default
BSTTuple() noexcept(std::is_nothrow_default_constructible_v< first_type > &&std::is_nothrow_default_constructible_v< second_type >) requires(std
Definition: BSTTuple.h:15