19namespace seqan3::detail
31template <
template <
typename...>
typename template_t,
typename... spec_t>
54template <
template <
typename...>
typename template_t,
typename... spec_t>
55struct instantiate<lazy<template_t, spec_t...>>
58 using type = template_t<spec_t...>;
66 requires requires {
typename instantiate<t>::type; }
67using instantiate_t =
typename instantiate<t>::type;
79template <
typename t,
bool condition>
100template <
template <
typename...>
typename template_t,
typename... spec_t>
101struct instantiate_if<lazy<template_t, spec_t...>, true>
104 using type = template_t<spec_t...>;
111template <
typename t,
bool condition>
112 requires requires {
typename instantiate_if<t, condition>::type; }
113using instantiate_if_t =
typename instantiate_if<t, condition>::type;
119template <
typename t,
bool condition>
120 requires requires { instantiate_if_t<t, condition>::value; }
121inline constexpr auto instantiate_if_v = instantiate_if_t<t, condition>::value;
140template <
bool decision,
typename on_true_t,
typename on_false_t>
141struct lazy_conditional : instantiate<std::conditional_t<decision, on_true_t, on_false_t>>
150template <
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>>; }
152using lazy_conditional_t = instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>;