15 #include <type_traits>
19 namespace seqan3::detail
31 template <
template <
typename...>
typename template_t,
typename... spec_t>
45 struct instantiate : std::type_identity<t>
54 template <
template <
typename...>
typename template_t,
typename... spec_t>
55 struct instantiate<lazy<template_t, spec_t...>>
58 using type = template_t<spec_t...>;
67 using instantiate_t =
typename instantiate<t>::type;
79 template <
typename t,
bool condition>
90 struct instantiate_if<t, true> : std::type_identity<t>
100 template <
template <
typename...>
typename template_t,
typename... spec_t>
101 struct instantiate_if<lazy<template_t, spec_t...>, true>
104 using type = template_t<spec_t...>;
111 template <
typename t,
bool condition>
113 using instantiate_if_t =
typename instantiate_if<t, condition>::type;
119 template <
typename t,
bool condition>
121 inline constexpr
auto instantiate_if_v = instantiate_if_t<t, condition>::value;
140 template <
bool decision,
typename on_true_t,
typename on_false_t>
141 struct lazy_conditional : instantiate<std::conditional_t<decision, on_true_t, on_false_t>>
150 template <
bool decision,
typename on_true_t,
typename on_false_t>
151 requires requires {
typename instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>; }
152 using lazy_conditional_t = instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>;
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164