19 namespace seqan3::detail
34 template <
template <
typename ...>
typename template_t,
typename ...spec_t>
55 template <
template <
typename ...>
typename template_t,
typename ...spec_t>
56 struct instantiate<lazy<template_t, spec_t...>>
59 using type = template_t<spec_t...>;
68 requires requires {
typename instantiate<t>::type; }
70 using instantiate_t =
typename instantiate<t>::type;
81 template <
typename t,
bool condition>
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 requires requires {
typename instantiate_if<t, condition>::type; }
115 using instantiate_if_t =
typename instantiate_if<t, condition>::type;
121 template <
typename t,
bool condition>
123 requires requires { instantiate_if_t<t, condition>::value; }
125 inline constexpr
auto instantiate_if_v = instantiate_if_t<t, condition>::value;
143 template <
bool decision,
typename on_true_t,
typename on_false_t>
144 struct lazy_conditional : instantiate<std::conditional_t<decision, on_true_t, on_false_t>>
153 template <
bool decision,
typename on_true_t,
typename on_false_t>
155 requires requires {
typename instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>; }
157 using lazy_conditional_t = instantiate_t<std::conditional_t<decision, on_true_t, on_false_t>>;
Provides C++20 additions to the type_traits header.