44 #include <range/v3/range_concepts.hpp> 45 #include <range/v3/utility/functional.hpp> 61 template <
typename lhs_t,
typename rhs_t>
63 concept weakly_equality_comparable_by_members_with_concept = requires (lhs_t
const & lhs, rhs_t
const & rhs)
65 lhs.operator==(rhs);
std::Boolean<decltype(lhs.operator==(rhs))>;
66 lhs.operator!=(rhs);
std::Boolean<decltype(lhs.operator!=(rhs))>;
72 template <
typename lhs_t,
typename rhs_t>
74 concept weakly_ordered_by_members_with_concept = requires (lhs_t
const & lhs, rhs_t
const & rhs)
76 lhs.operator< (rhs);
std::Boolean<decltype(lhs.operator< (rhs))>;
77 lhs.operator> (rhs);
std::Boolean<decltype(lhs.operator> (rhs))>;
78 lhs.operator<=(rhs);
std::Boolean<decltype(lhs.operator<=(rhs))>;
79 lhs.operator>=(rhs);
std::Boolean<decltype(lhs.operator>=(rhs))>;
86 template <
typename source_t,
typename target_t>
88 concept convertible_to_by_member_concept = requires (source_t s)
90 { s.operator target_t() } -> target_t;
110 template <
typename t1,
typename t2>
112 concept weakly_ordered_with_concept = requires (std::remove_reference_t<t1>
const & v1,
113 std::remove_reference_t<t2>
const & v2)
115 { v1 < v2 } ->
bool &&;
116 { v1 <= v2 } ->
bool &&;
117 { v2 > v1 } ->
bool &&;
118 { v2 >= v1 } ->
bool &&;
125 template <
typename t,
typename u>
127 concept implicitly_convertible_to_concept = std::is_convertible_v<t, u>;
133 template <
typename t,
typename u>
135 concept explicitly_convertible_to_concept = requires (t vt) { {
static_cast<u
>(vt)}; };
142 template <
typename t>
144 concept arithmetic_concept = std::is_arithmetic_v<t>;
152 template <
typename t>
154 concept floating_point_concept = arithmetic_concept<t> && std::is_floating_point_v<t>;
164 template <
typename t>
178 template <
typename t>
180 concept trivially_destructible_concept =
std::Destructible<t> && std::is_trivially_destructible_v<t>;
188 template <
typename t>
190 concept trivially_copyable_concept =
std::Copyable<t> && std::is_trivially_copyable_v<t>;
199 template <
typename t>
201 concept trivial_concept = trivially_copyable_concept<t> && trivially_destructible_concept<t> && std::is_trivial_v<t>;
208 template <
typename t>
210 concept standard_layout_concept = std::is_standard_layout_v<t>;
222 template <
typename t,
typename u>
224 concept weakly_assignable_concept = std::is_assignable_v<t, u>;
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:58
The concept Integral is satisfied if and only if T is an integral type.
Adaptations of concepts from the Ranges TS.
The concept std::Same<T, U> is satisfied if and only if T and U denote the same type.
Definition: aligned_sequence_concept.hpp:288
Provides C++20 additions to the type_traits header.
Specifies that a type can be used in Boolean contexts.
The concept std::Destructible specifies the concept of all types whose instances can safely be destro...
Subsumes std::Movable, std::CopyConstructible, and requires that the type be std::Assignable bool fro...