16 #include <type_traits>
18 #include <meta/meta.hpp>
24 namespace seqan3::detail
36 template <
typename algorithm_
id_type>
54 template <config_element query_t, config_element ... compare_types>
55 struct is_configuration_valid :
57 (std::is_same_v<remove_cvref_t<decltype(query_t::id)>, remove_cvref_t<decltype(compare_types::id)>> && ...) &&
58 (compatibility_table<remove_cvref_t<decltype(query_t::id)>>
59 [static_cast<std::underlying_type_t<remove_cvref_t<decltype(query_t::id)>>>(query_t::id)]
60 [static_cast<std::underlying_type_t<remove_cvref_t<decltype(query_t::id)>>>(compare_types::id)] && ...),
70 template <
typename query_t,
typename ...compare_types>
71 inline constexpr
bool is_configuration_valid_v = is_configuration_valid<query_t, compare_types...>::value;
84 template <
template <
typename ...>
typename query_t>
85 struct is_same_configuration_f
91 template <
typename compare_type>
92 using invoke = is_type_specialisation_of<compare_type, query_t>;