26 template <
class T1,
class T2>
50 template <
class U1,
class U2>
51 requires (std::is_constructible_v<T1, U1 &> && std::is_constructible_v<T2, U2 &>)
55 template <
class U1,
class U2>
56 requires (std::is_constructible_v<T1, U1 const> && std::is_constructible_v<T2, U2 const>)
60 template <
class U1,
class U2>
61 requires (std::is_constructible_v<T1, U1> && std::is_constructible_v<T2, U2>)
65 template <
class U1,
class U2>
66 requires (std::is_constructible_v<T1, U1 const> && std::is_constructible_v<T2, U2 const>)
77 template <
class U1,
class U2>
78 requires (std::is_constructible_v<T1, U1 &> && std::is_constructible_v<T2, U2 &>)
82 template <
class U1,
class U2>
83 requires (std::is_constructible_v<T1, U1 const> && std::is_constructible_v<T2, U2 const>)
87 template <
class U1,
class U2>
88 requires (std::is_constructible_v<T1, U1> && std::is_constructible_v<T2, U2>)
89 constexpr
common_pair(common_pair<U1, U2> && other) :
93 template <
class U1,
class U2>
94 requires (std::is_constructible_v<T1, U1 const> && std::is_constructible_v<T2, U2 const>)
95 constexpr
common_pair(common_pair<U1, U2>
const && other) :
105 template <
class U1,
class U2>
106 requires (std::is_constructible_v<T1, U1 &> && std::is_constructible_v<T2, U2 &>)
110 template <
class U1,
class U2>
111 requires (std::is_constructible_v<T1, U1 const> && std::is_constructible_v<T2, U2 const>)
115 template <
class U1,
class U2>
116 requires (std::is_constructible_v<T1, U1> && std::is_constructible_v<T2, U2>)
121 template <
class U1,
class U2>
122 requires (std::is_constructible_v<T1, U1 const> && std::is_constructible_v<T2, U2 const>)
133 template <
class U1,
class U2>
134 requires (std::is_assignable_v<T1, U1 &> && std::is_assignable_v<T2, U2 &>)
142 template <
class U1,
class U2>
143 requires (std::is_assignable_v<T1, U1 const> && std::is_assignable_v<T2, U2 const>)
151 template <
class U1,
class U2>
152 requires (std::is_assignable_v<T1, U1> && std::is_assignable_v<T2, U2>)
155 first = std::move(other.first);
156 second = std::move(other.second);
160 template <
class U1,
class U2>
161 requires (std::is_assignable_v<T1, U1 const> && std::is_assignable_v<T2, U2 const>)
164 first = std::move(other.first);
165 second = std::move(other.second);
169 template <
class U1,
class U2>
170 requires (std::is_assignable_v<T1 const, U1 &> && std::is_assignable_v<T2 const, U2 &>)
178 template <
class U1,
class U2>
179 requires (std::is_assignable_v<T1 const, U1 const> && std::is_assignable_v<T2 const, U2 const>)
187 template <
class U1,
class U2>
188 requires (std::is_assignable_v<T1 const, U1> && std::is_assignable_v<T2 const, U2>)
191 first = std::move(other.first);
192 second = std::move(other.second);
196 template <
class U1,
class U2>
197 requires (std::is_assignable_v<T1 const, U1 const> && std::is_assignable_v<T2 const, U2 const>)
200 first = std::move(other.first);
201 second = std::move(other.second);
211 template <
class U1,
class U2>
212 requires (std::is_assignable_v<T1, U1 &> && std::is_assignable_v<T2, U2 &>)
220 template <
class U1,
class U2>
221 requires (std::is_assignable_v<T1, U1 const> && std::is_assignable_v<T2, U2 const>)
229 template <
class U1,
class U2>
230 requires (std::is_assignable_v<T1, U1> && std::is_assignable_v<T2, U2>)
233 first = std::move(other.first);
234 second = std::move(other.second);
238 template <
class U1,
class U2>
239 requires (std::is_assignable_v<T1, U1 const> && std::is_assignable_v<T2, U2 const>)
242 first = std::move(other.first);
243 second = std::move(other.second);
247 template <
class U1,
class U2>
248 requires (std::is_assignable_v<T1 const, U1 &> && std::is_assignable_v<T2 const, U2 &>)
256 template <
class U1,
class U2>
257 requires (std::is_assignable_v<T1 const, U1 const> && std::is_assignable_v<T2 const, U2 const>)
265 template <
class U1,
class U2>
266 requires (std::is_assignable_v<T1 const, U1> && std::is_assignable_v<T2 const, U2>)
269 first = std::move(other.first);
270 second = std::move(other.second);
274 template <
class U1,
class U2>
275 requires (std::is_assignable_v<T1 const, U1 const> && std::is_assignable_v<T2 const, U2 const>)
278 first = std::move(other.first);
279 second = std::move(other.second);
289 template <
class U1,
class U2>
290 requires (std::is_constructible_v<U1, T1 &> && std::is_constructible_v<U2, T2 &>)
296 template <
class U1,
class U2>
297 requires (std::is_constructible_v<U1, T1 const> && std::is_constructible_v<U2, T2 const>)
303 template <
class U1,
class U2>
304 requires (std::is_constructible_v<U1, T1> && std::is_constructible_v<U2, T2>)
310 template <
class U1,
class U2>
311 requires (std::is_constructible_v<U1, T1 const> && std::is_constructible_v<U2, T2 const>)
329 template <
class U1,
class U2>
330 requires (std::equality_comparable_with<T1, U1> && std::equality_comparable_with<T2, U2>)
331 constexpr
friend bool operator==(
common_pair const & lhs, common_pair<U1, U2>
const & rhs)
333 return lhs.first == rhs.first && lhs.second == rhs.second;
343 template <
class U1,
class U2>
344 requires (std::equality_comparable_with<T1, U1> && std::equality_comparable_with<T2, U2>)
347 return lhs.first != rhs.first && lhs.second != rhs.second;
357 template <
class U1,
class U2>
358 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
359 constexpr
friend bool operator<(
common_pair const & lhs, common_pair<U1, U2>
const & rhs)
361 return lhs.first < rhs.first && lhs.second < rhs.second;
371 template <
class U1,
class U2>
372 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
375 return lhs.first <= rhs.first && lhs.second <= rhs.second;
385 template <
class U1,
class U2>
386 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
389 return lhs.first > rhs.first && lhs.second > rhs.second;
399 template <
class U1,
class U2>
400 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
403 return lhs.first >= rhs.first && lhs.second >= rhs.second;
406 #ifdef __cpp_lib_three_way_comparison
415 template <
class U1,
class U2>
416 requires (std::three_way_comparable_with<T1, U1> && std::three_way_comparable_with<T2, U2>)
417 constexpr
friend std::common_comparison_category_t<std::compare_three_way_result_t<U1, T1>,
418 std::compare_three_way_result_t<U2, T2>>
419 operator<=>(
common_pair const & lhs, common_pair<U1, U2>
const & rhs)
421 if (
auto cmp = lhs.first <=> rhs.first; cmp != 0)
423 return lhs.second <=> rhs.second;
438 template <
class U1,
class U2>
439 requires (std::equality_comparable_with<T1, U1> && std::equality_comparable_with<T2, U2>)
442 return lhs.first == rhs.first && lhs.second == rhs.second;
452 template <
class U1,
class U2>
453 requires (std::equality_comparable_with<T1, U1> && std::equality_comparable_with<T2, U2>)
456 return lhs.first != rhs.first && lhs.second != rhs.second;
466 template <
class U1,
class U2>
467 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
470 return lhs.first < rhs.first && lhs.second < rhs.second;
480 template <
class U1,
class U2>
481 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
484 return lhs.first <= rhs.first && lhs.second <= rhs.second;
494 template <
class U1,
class U2>
495 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
498 return lhs.first > rhs.first && lhs.second > rhs.second;
508 template <
class U1,
class U2>
509 requires (std::totally_ordered_with<T1, U1> && std::totally_ordered_with<T2, U2>)
512 return lhs.first >= rhs.first && lhs.second >= rhs.second;
515 #ifdef __cpp_lib_three_way_comparison
524 template <
class U1,
class U2>
525 requires (std::three_way_comparable_with<T1, U1> && std::three_way_comparable_with<T2, U2>)
526 constexpr
friend std::common_comparison_category_t<std::compare_three_way_result_t<U1, T1>,
527 std::compare_three_way_result_t<U2, T2>>
530 if (
auto cmp = lhs.first <=> rhs.first; cmp != 0)
532 return lhs.second <=> rhs.second;
539 template <
class T1,
class T2>
548 template <
class T1,
class T2>
549 struct tuple_size<
seqan3::
common_pair<T1, T2>> :
public tuple_size<std::pair<T1, T2>>
552 template <
size_t index,
class T1,
class T2>
553 struct tuple_element<index,
seqan3::
common_pair<T1, T2>> :
public tuple_element<index, std::pair<T1, T2>>
556 template <
class T1,
class T2,
class U1,
class U2>
563 template <
class T1,
class T2,
class U1,
class U2>
570 template <
class T1,
class T2,
class U1,
class U2>
577 template <
class T1,
class T2,
class U1,
class U2,
template <
class>
class TQual,
template <
class>
class UQual>
580 std::common_reference_t<TQual<T2>, UQual<U2>>>;
585 std::common_reference_t<TQual<T2>, UQual<U2>>>;
588 template <
class T1,
class T2,
class U1,
class U2,
template <
class>
class TQual,
template <
class>
class UQual>
591 std::common_reference_t<TQual<T2>, UQual<U2>>>;
596 std::common_reference_t<TQual<T2>, UQual<U2>>>;
599 template <
class T1,
class T2,
class U1,
class U2,
template <
class>
class TQual,
template <
class>
class UQual>
602 std::common_reference_t<TQual<T2>, UQual<U2>>>;
607 std::common_reference_t<TQual<T2>, UQual<U2>>>;
610 template <std::
size_t i,
class T1,
class T2>
617 template <std::
size_t i,
class T1,
class T2>
618 constexpr std::tuple_element_t<i, seqan3::common_pair<T1, T2>>
const &
625 template <std::
size_t i,
class T1,
class T2>
632 template <std::
size_t i,
class T1,
class T2>
633 constexpr std::tuple_element_t<i, seqan3::common_pair<T1, T2>>
const &&
640 template <
typename type,
class T1,
class T2>
647 template <
typename type,
class T1,
class T2>
654 template <
typename type,
class T1,
class T2>
661 template <
typename type,
class T1,
class T2>
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
constexpr auto const & get(configuration< configs_t... > const &config) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: configuration.hpp:415
common_pair(T1, T2) -> common_pair< T1, T2 >
Class template argument deduction guide.
SeqAn specific customisations in the standard namespace.
A std::pair implementation that incorporates most changes from C++23's standard library.
Definition: common_pair.hpp:28
common_pair(common_pair const &)=default
Defaulted.
common_pair & operator=(common_pair const &)=default
Defaulted.
common_pair()=default
Defaulted.
U2 & second
Constructs from arguments.
Definition: common_pair.hpp:52
requires(std::is_constructible_v< T1, U1 & > &&std::is_constructible_v< T2, U2 & >) const expr common_pair(U1 &first
Constructs from arguments.