7 template <
class T1,
class T2>
26 explicit(!std::is_convertible_v<const first_type&, first_type> ||
27 !std::is_convertible_v<const second_type&, second_type>)
29 noexcept(std::is_nothrow_copy_constructible_v<first_type>&&
30 std::is_nothrow_copy_constructible_v<second_type>)
31 requires(std::is_copy_constructible_v<first_type> &&
32 std::is_copy_constructible_v<second_type>)
39 template <
class U1,
class U2>
40 explicit(!std::is_convertible_v<U1&&, first_type> ||
41 !std::is_convertible_v<U2&&, second_type>)
42 BSTTuple(U1&& a_first, U2&& a_second)
43 noexcept(std::is_nothrow_constructible_v<first_type, U1&&>&&
44 std::is_nothrow_constructible_v<second_type, U2&&>)
45 requires(std::is_constructible_v<first_type, U1 &&> &&
46 std::is_constructible_v<second_type, U2 &&>)
48 first(std::forward<U1>(a_first)),
49 second(std::forward<U2>(a_second))
53 template <
class U1,
class U2>
54 explicit(!std::is_convertible_v<const U1&, first_type> ||
55 !std::is_convertible_v<const U2&, second_type>)
57 noexcept(std::is_nothrow_constructible_v<first_type, const U1&>&&
58 std::is_nothrow_constructible_v<second_type, const U2&>)
59 requires(std::is_constructible_v<first_type, const U1&> &&
60 std::is_constructible_v<second_type, const U2&>)
67 template <
class U1,
class U2>
68 explicit(!std::is_convertible_v<U1&&, first_type> ||
69 !std::is_convertible_v<U2&&, second_type>)
71 noexcept(std::is_nothrow_constructible_v<first_type, U1&&>&&
72 std::is_nothrow_constructible_v<second_type, U2&&>)
73 requires(std::is_constructible_v<first_type, U1 &&> &&
74 std::is_constructible_v<second_type, U2 &&>)
84 BSTTuple(std::piecewise_construct_t, std::tuple<Args1...> a_firstArgs, std::tuple<Args2...> a_secondArgs) :
85 BSTTuple(a_firstArgs, a_secondArgs,
std::index_sequence_for<Args1...>(),
std::index_sequence_for<Args2...>())
95 BSTTuple(Tuple1& a_firstArgs, Tuple2& a_secondArgs, std::index_sequence<I1...>, std::index_sequence<I2...>) :
111 noexcept(std::is_nothrow_copy_assignable_v<first_type>&&
112 std::is_nothrow_copy_assignable_v<second_type>)
113 requires(std::is_copy_assignable_v<first_type> &&
114 std::is_copy_assignable_v<second_type>)
116 if (
this != std::addressof(a_rhs)) {
124 template <
class U1,
class U2>
126 noexcept(std::is_nothrow_assignable_v<first_type&, const U1&>&&
127 std::is_nothrow_assignable_v<second_type&, const U2&>)
128 requires(std::is_assignable_v<first_type&, const U1&> &&
129 std::is_assignable_v<second_type&, const U2&>)
138 noexcept(std::is_nothrow_move_assignable_v<first_type>&&
139 std::is_nothrow_move_assignable_v<second_type>)
140 requires(std::is_move_assignable_v<first_type> &&
141 std::is_move_assignable_v<second_type>)
143 if (
this != std::addressof(a_rhs)) {
151 template <
class U1,
class U2>
153 noexcept(std::is_nothrow_assignable_v<first_type&, U1>&&
154 std::is_nothrow_assignable_v<second_type&, U2>)
155 requires(std::is_assignable_v<first_type&, U1> &&
156 std::is_assignable_v<second_type&, U2>)
166 noexcept(std::is_nothrow_swappable_v<first_type>&&
167 std::is_nothrow_swappable_v<second_type>)
170 if (
this != std::addressof(a_rhs)) {
181 template <
class T1,
class T2>
182 [[nodiscard]]
auto make_pair(T1&& a_first, T2&& a_second)
188 return result_t(std::forward<T1>(a_first), std::forward<T2>(a_second));
191 template <
class T1,
class T2>
198 return result_t(std::forward<T1>(a_first), std::forward<T2>(a_second));
201 template <
class T1,
class T2>
207 template <
class T1,
class T2>
216 template <
class T1,
class T2>
218 noexcept(
noexcept(a_lhs.swap(a_rhs)))
219 requires(std::is_swappable_v<T1> &&
220 std::is_swappable_v<T2>)
225 template <
class T1,
class T2>
Definition AbsorbEffect.h:6
auto make_pair(T1 &&a_first, T2 &&a_second)
Definition BSTTuple.h:182
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)))
Definition BSTTuple.h:217
auto make_tuple(T1 &&a_first, T2 &&a_second)
Definition BSTTuple.h:192
bool operator<(const BSTTuple< T1, T2 > &a_lhs, const BSTTuple< T1, T2 > &a_rhs)
Definition BSTTuple.h:208
Definition EffectArchetypes.h:65
BSTTuple() noexcept(std::is_nothrow_default_constructible_v< first_type > &&std::is_nothrow_default_constructible_v< second_type >)
Definition BSTTuple.h:15
BSTTuple(std::piecewise_construct_t, std::tuple< Args1... > a_firstArgs, std::tuple< Args2... > a_secondArgs)
Definition BSTTuple.h:84
first_type first
Definition BSTTuple.h:177
second_type second
Definition BSTTuple.h:178
const second_type &a_second noexcept(std::is_nothrow_copy_constructible_v< first_type > &&std::is_nothrow_copy_constructible_v< second_type >)
Definition BSTTuple.h:29
BSTTuple & operator=(BSTTuple &&a_rhs) noexcept(std::is_nothrow_move_assignable_v< first_type > &&std::is_nothrow_move_assignable_v< second_type >)
Definition BSTTuple.h:137
BSTTuple & operator=(const BSTTuple &a_rhs) noexcept(std::is_nothrow_copy_assignable_v< first_type > &&std::is_nothrow_copy_assignable_v< second_type >)
Definition BSTTuple.h:110
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 >)
Definition BSTTuple.h:152
void swap(BSTTuple &a_rhs) noexcept(std::is_nothrow_swappable_v< first_type > &&std::is_nothrow_swappable_v< second_type >)
Definition BSTTuple.h:165
T1 first_type
Definition BSTTuple.h:11
BSTTuple(BSTTuple &&)=default
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 & >)
Definition BSTTuple.h:125
BSTTuple(const BSTTuple &)=default