15 #include <type_traits> 31 template <
typename lhs_t,
typename rhs_t>
33 SEQAN3_CONCEPT WeaklyEqualityComparableByMembersWith = requires (lhs_t
const & lhs, rhs_t
const & rhs)
35 lhs.operator==(rhs);
std::Boolean<decltype(lhs.operator==(rhs))>;
36 lhs.operator!=(rhs);
std::Boolean<decltype(lhs.operator!=(rhs))>;
42 template <
typename lhs_t,
typename rhs_t>
44 SEQAN3_CONCEPT WeaklyOrderedByMembersWith = requires (lhs_t
const & lhs, rhs_t
const & rhs)
46 lhs.operator< (rhs);
std::Boolean<decltype(lhs.operator< (rhs))>;
47 lhs.operator> (rhs);
std::Boolean<decltype(lhs.operator> (rhs))>;
48 lhs.operator<=(rhs);
std::Boolean<decltype(lhs.operator<=(rhs))>;
49 lhs.operator>=(rhs);
std::Boolean<decltype(lhs.operator>=(rhs))>;
56 template <
typename source_t,
typename target_t>
58 SEQAN3_CONCEPT ConvertibleToByMember = requires (source_t s)
60 { s.operator target_t() } -> target_t;
80 template <
typename t1,
typename t2>
85 { v1 < v2 } ->
bool &&;
86 { v1 <= v2 } ->
bool &&;
87 { v2 > v1 } ->
bool &&;
88 { v2 >= v1 } ->
bool &&;
95 template <
typename t,
typename u>
97 SEQAN3_CONCEPT ImplicitlyConvertibleTo = std::is_convertible_v<t, u>;
103 template <
typename t,
typename u>
105 SEQAN3_CONCEPT ExplicitlyConvertibleTo = requires (t vt) { {
static_cast<u
>(vt)}; };
112 template <
typename t>
114 SEQAN3_CONCEPT Arithmetic = std::is_arithmetic_v<t>;
122 template <
typename t>
124 SEQAN3_CONCEPT FloatingPoint = Arithmetic<t> && std::is_floating_point_v<t>;
134 template <
typename t>
148 template <
typename t>
150 SEQAN3_CONCEPT TriviallyDestructible =
std::Destructible<t> && std::is_trivially_destructible_v<t>;
158 template <
typename t>
160 SEQAN3_CONCEPT TriviallyCopyable =
std::Copyable<t> && std::is_trivially_copyable_v<t>;
169 template <
typename t>
171 SEQAN3_CONCEPT Trivial = TriviallyCopyable<t> && TriviallyDestructible<t> && std::is_trivial_v<t>;
178 template <
typename t>
180 SEQAN3_CONCEPT StandardLayout = std::is_standard_layout_v<t>;
192 template <
typename t,
typename u>
194 SEQAN3_CONCEPT WeaklyAssignable = std::is_assignable_v<t, u>;
The main SeqAn3 namespace.
The concept std::Destructible specifies the concept of all types whose instances can safely be destro...
Adaptations of concepts from the Ranges TS.
Specifies that a type can be used in Boolean contexts.
Definition: aligned_sequence_concept.hpp:35
Subsumes std::Movable, std::CopyConstructible, and requires that the type be std::Assignable bool fro...
The concept std::Same<T, U> is satisfied if and only if T and U denote the same type.
The concept Integral is satisfied if and only if T is an integral type.