15 #include <type_traits>
20 namespace seqan3::detail
32 template <
class T,
class U>
34 SEQAN3_CONCEPT weakly_equality_comparable_with =
38 std::convertible_to<decltype(t == u),
bool>;
39 std::convertible_to<decltype(t != u),
bool>;
40 std::convertible_to<decltype(u == t),
bool>;
41 std::convertible_to<decltype(u != t),
bool>;
46 template <
typename lhs_t,
typename rhs_t>
47 struct weakly_equality_comparable_with_trait :
56 template <
typename t1,
typename t2>
61 std::convertible_to<decltype(v1 < v2),
bool>;
62 std::convertible_to<decltype(v1 <= v2),
bool>;
63 std::convertible_to<decltype(v1 > v2),
bool>;
64 std::convertible_to<decltype(v1 >= v2),
bool>;
66 std::convertible_to<decltype(v2 < v1),
bool>;
67 std::convertible_to<decltype(v2 <= v1),
bool>;
68 std::convertible_to<decltype(v2 > v1),
bool>;
69 std::convertible_to<decltype(v2 >= v1),
bool>;
74 template <
typename lhs_t,
typename rhs_t>
92 template <
typename t,
typename u>
100 template <
typename t,
typename u>
109 template <
typename t>
111 SEQAN3_CONCEPT
arithmetic = std::is_arithmetic_v<t>;
119 template <
typename t>
131 template <
typename t>
133 (std::same_as<t, char> || std::same_as<t, unsigned char> || std::same_as<t, signed char> ||
135 std::same_as<t, char8_t> ||
137 std::same_as<t, char16_t> || std::same_as<t, char32_t> || std::same_as<t, wchar_t>);
145 template <
typename t>
155 template <
typename t>
157 SEQAN3_CONCEPT
trivially_copyable = std::copyable<t> && std::is_trivially_copyable_v<t>;
166 template <
typename t>
175 template <
typename t>
189 template <
typename t,
typename u>