32#ifndef FENNEC_LANG_CONDITIONAL_TYPES_H
33#define FENNEC_LANG_CONDITIONAL_TYPES_H
35#include <fennec/lang/type_identity.h>
82template<
bool B,
typename TrueT,
typename FalseT>
88template<
bool B,
typename TrueT,
typename FalseT>
94template<
typename T,
typename F>
99template<
typename T,
typename F>
100struct conditional<false, T, F> : type_identity<F>{};
113template<
typename DefaultT,
template<
typename...>
typename DetectT,
typename...ArgsT>
116 using type = DefaultT;
117 static constexpr bool is_detected =
false;
122template<
typename DefaultT,
template<
typename...>
typename DetectT,
typename...ArgsT>
127template<
typename DefaultT,
template<
typename...>
typename DetectT,
typename...ArgsT>
128 requires requires {
typename DetectT<ArgsT...>; }
129struct detect<DefaultT, DetectT, ArgsT...>
131 using type = DetectT<ArgsT...>;
132 static constexpr bool is_detected =
true;
151template<
bool B,
typename T =
void>
156template<
bool B,
typename T =
void>
161struct enable_if<true, T> {
using type = T; };
typename enable_if< B, T >::type enable_if_t
Shorthand for typename enable_if<B, T>::type
Definition conditional_types.h:157
typename detect< DefaultT, DetectT, ArgsT... >::type detect_t
Shorthand for typename detect<DefaultT, DetectT, ArgsT...>::type
Definition conditional_types.h:123
typename conditional< B, TrueT, FalseT >::type conditional_t
Shorthand for typename conditional<ConditionV, TrueT, FalseT>::type
Definition conditional_types.h:90
select between two types based on a condition
Definition conditional_types.h:83
Detect whether DetectT<ArgsT...> is a valid type.
Definition conditional_types.h:115
Leverage SFINAE to conditionally enable a function or class at compile-time.
Definition conditional_types.h:152
Base Class for Type Transformations.
Definition type_identity.h:49