Blaze 3.9
IsDetected.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_UTIL_TYPETRAITS_ISDETECTED_H_
36#define _BLAZE_UTIL_TYPETRAITS_ISDETECTED_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
45
46
47namespace blaze {
48
49//=================================================================================================
50//
51// CLASS DEFINITION
52//
53//=================================================================================================
54
55//*************************************************************************************************
59struct NoneSuch {};
60//*************************************************************************************************
61
62
63//*************************************************************************************************
68template< typename Default, typename AlwaysVoid, template< typename... > class OP, typename... Ts >
69struct Detector
70{
71 using Value_t = FalseType;
72 using Type = Default;
73};
75//*************************************************************************************************
76
77
78//*************************************************************************************************
83template< typename Default, template< typename... > class OP, typename... Ts >
84struct Detector< Default, Void_t< OP<Ts...> >, OP, Ts... >
85{
86 using Value_t = TrueType;
87 using Type = OP<Ts...>;
88};
90//*************************************************************************************************
91
92
93//*************************************************************************************************
115template< typename Default, template< typename... > class OP, typename... Ts >
116using DetectedOr = Detector<Default,void,OP,Ts...>;
117//*************************************************************************************************
118
119
120//*************************************************************************************************
150template< template< typename... > class OP, typename... Ts >
151using IsDetected = typename DetectedOr<NoneSuch,OP,Ts...>::Value_t;
152//*************************************************************************************************
153
154
155//*************************************************************************************************
174template< template< typename... > class OP, typename... Ts >
175using Detected_t = typename DetectedOr<NoneSuch,OP,Ts...>::Type;
176//*************************************************************************************************
177
178
179//*************************************************************************************************
192template< template< typename... > class OP, typename... Ts >
193constexpr bool IsDetected_v = IsDetected<OP,Ts...>::value;
194//*************************************************************************************************
195
196
197//*************************************************************************************************
210template< typename Default, template< typename... > class OP, typename... Ts >
211using DetectedOr_t = typename DetectedOr<Default,OP,Ts...>::Type;
212//*************************************************************************************************
213
214} // namespace blaze
215
216#endif
Header file for the IntegralConstant class template.
Detector< Default, void, OP, Ts... > DetectedOr
Compile time detection of type properties.
Definition: IsDetected.h:116
typename DetectedOr< NoneSuch, OP, Ts... >::Value_t IsDetected
Compile time detection of type properties.
Definition: IsDetected.h:151
constexpr bool IsDetected_v
Auxiliary variable template for the IsDetected type trait.
Definition: IsDetected.h:193
typename DetectedOr< NoneSuch, OP, Ts... >::Type Detected_t
Compile time detection of type properties.
Definition: IsDetected.h:175
typename DetectedOr< Default, OP, Ts... >::Type DetectedOr_t
Auxiliary variable template for the DetectedOr type trait.
Definition: IsDetected.h:211
void Void_t
Compile time type check.
Definition: Void.h:64
BoolConstant< true > TrueType
Type traits base class.
Definition: IntegralConstant.h:132
BoolConstant< false > FalseType
Type/value traits base class.
Definition: IntegralConstant.h:121
Default result type for the Detected_t type trait.
Definition: IsDetected.h:59
Header file for the Void type trait.