15 #include <type_traits>
20 namespace seqan3::detail
31 template <
typename simd_t>
32 SEQAN3_CONCEPT simd_concept = requires (simd_t a, simd_t b)
34 typename simd_traits<std::remove_reference_t<simd_t>>::scalar_type;
35 typename simd_traits<std::remove_reference_t<simd_t>>::mask_type;
36 typename simd_traits<std::remove_reference_t<simd_t>>::swizzle_type;
43 { a[0] } ->
typename simd_traits<std::remove_reference_t<simd_t>>::scalar_type;
46 requires
std::same_as<decltype(a == b),
typename simd_traits<std::remove_reference_t<simd_t>>::mask_type>;
47 requires
std::same_as<decltype(a != b),
typename simd_traits<std::remove_reference_t<simd_t>>::mask_type>;
48 requires
std::same_as<decltype(a < b),
typename simd_traits<std::remove_reference_t<simd_t>>::mask_type>;
49 requires
std::same_as<decltype(a > b),
typename simd_traits<std::remove_reference_t<simd_t>>::mask_type>;
50 requires
std::same_as<decltype(a <= b),
typename simd_traits<std::remove_reference_t<simd_t>>::mask_type>;
51 requires
std::same_as<decltype(a >= b),
typename simd_traits<std::remove_reference_t<simd_t>>::mask_type>;
86 template <
typename simd_t>
88 SEQAN3_CONCEPT simd_concept = !std::is_pointer_v<std::decay_t<simd_t>> && detail::simd_concept<simd_t>;