16namespace seqan3::detail
28template <
template <
typename...>
typename template_t,
typename... spec_t>
51template <
template <
typename...>
typename template_t,
typename... spec_t>
52struct instantiate<lazy<template_t, spec_t...>>
55 using type = template_t<spec_t...>;
63 requires requires {
typename instantiate<t>::type; }
64using instantiate_t =
typename instantiate<t>::type;
76template <
typename t,
bool condition>
97template <
template <
typename...>
typename template_t,
typename... spec_t>
98struct instantiate_if<lazy<template_t, spec_t...>, true>
101 using type = template_t<spec_t...>;
108template <
typename t,
bool condition>
109 requires requires {
typename instantiate_if<t, condition>::type; }
110using instantiate_if_t =
typename instantiate_if<t, condition>::type;
116template <
typename t,
bool condition>
117 requires requires { instantiate_if_t<t, condition>::value; }
118inline constexpr auto instantiate_if_v = instantiate_if_t<t, condition>::value;
137template <
bool decision,
typename on_true_t,
typename on_false_t>
138struct lazy_conditional : instantiate<std::conditional_t<decision, on_true_t, on_false_t>>
147template <
bool decision,
typename on_true_t,
typename on_false_t>
148 requires requires {
typename instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>; }
149using lazy_conditional_t = instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>;