21 namespace seqan3::detail
36 template <
template <
typename ...>
typename template_t,
typename ...spec_t>
57 template <
template <
typename ...>
typename template_t,
typename ...spec_t>
58 struct instantiate<lazy<template_t, spec_t...>>
61 using type = template_t<spec_t...>;
70 requires requires {
typename instantiate<t>::type; }
72 using instantiate_t =
typename instantiate<t>::type;
83 template <
typename t,
bool condition>
102 template <
template <
typename ...>
typename template_t,
typename ...spec_t>
103 struct instantiate_if<lazy<template_t, spec_t...>, true>
106 using type = template_t<spec_t...>;
113 template <
typename t,
bool condition>
115 requires requires {
typename instantiate_if<t, condition>::type; }
117 using instantiate_if_t =
typename instantiate_if<t, condition>::type;
123 template <
typename t,
bool condition>
125 requires requires { instantiate_if_t<t, condition>::value; }
127 inline constexpr
auto instantiate_if_v = instantiate_if_t<t, condition>::value;
145 template <
bool decision,
typename on_true_t,
typename on_false_t>
146 struct lazy_conditional : instantiate<std::conditional_t<decision, on_true_t, on_false_t>>
155 template <
bool decision,
typename on_true_t,
typename on_false_t>
157 requires requires {
typename instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>; }
159 using lazy_conditional_t = instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>;
179 template <
template <
typename ...>
typename query_t,
typename ...args_t>
180 struct is_class_template_declarable_with :
187 template <
template <
typename ...>
typename query_t,
typename ...args_t>
189 struct is_class_template_declarable_with<query_t, args_t...> :
public std::true_type
198 template <
template <
typename ...>
typename query_t,
typename ...args_t>
199 inline constexpr
bool is_class_template_declarable_with_v = is_class_template_declarable_with<query_t, args_t...>::value;