35 #ifndef _BLAZE_MATH_TRAITS_ADDTRAIT_H_ 36 #define _BLAZE_MATH_TRAITS_ADDTRAIT_H_ 64 template<
typename,
typename,
typename =
void >
struct AddTrait;
65 template<
typename,
typename,
typename =
void >
struct AddTraitEval1;
66 template<
typename,
typename,
typename =
void >
struct AddTraitEval2;
73 template<
typename T1,
typename T2 >
74 auto evalAddTrait( T1&, T2& )
75 ->
typename AddTraitEval1<T1,T2>::Type;
77 template<
typename T1,
typename T2 >
78 auto evalAddTrait(
const T1&,
const T2& )
79 ->
typename AddTrait<T1,T2>::Type;
81 template<
typename T1,
typename T2 >
82 auto evalAddTrait(
const volatile T1&,
const T2& )
83 ->
typename AddTrait<T1,T2>::Type;
85 template<
typename T1,
typename T2 >
86 auto evalAddTrait(
const T1&,
const volatile T2& )
87 ->
typename AddTrait<T1,T2>::Type;
89 template<
typename T1,
typename T2 >
90 auto evalAddTrait(
const volatile T1&,
const volatile T2& )
91 ->
typename AddTrait<T1,T2>::Type;
141 template<
typename T1
149 using Type = decltype( evalAddTrait( std::declval<T1&>(), std::declval<T2&>() ) );
161 template<
typename T >
178 template<
typename T1,
typename T2 >
183 using Type = CommonType_t< complex<T1> , T2 >;
195 template<
typename T1,
typename T2 >
200 using Type = CommonType_t< T1, complex<T2> >;
212 template<
typename T1,
typename T2 >
213 struct AddTrait< complex<T1>, complex<T2> >
217 using Type = CommonType_t< complex<T1>, complex<T2> >;
237 template<
typename T1,
typename T2 >
247 template<
typename T1
254 using Type =
typename AddTraitEval2<T1,T2>::Type;
266 template<
typename T1
273 struct AddType {
using Type = decltype( std::declval<T1>() + std::declval<T2>() ); };
274 struct Failure {
using Type = INVALID_TYPE; };
279 using Type =
typename If_t< HasAdd_v<T1,T2>, AddType, Failure >::Type;
typename Decay< T >::Type Decay_t
Auxiliary alias declaration for the Decay type trait.The Decay_t alias declaration provides a conveni...
Definition: Decay.h:98
Header file for the HasAdd type trait.
Header file for the Decay type trait.
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.The EnableIf_t alias declaration provides a convenient...
Definition: EnableIf.h:138
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the If class template.
typename AddTrait< T1, T2 >::Type AddTrait_t
Auxiliary alias declaration for the AddTrait class template.The AddTrait_t alias declaration provides...
Definition: AddTrait.h:238
constexpr bool IsBuiltin_v
Auxiliary variable template for the IsBuiltin type trait.The IsBuiltin_v variable template provides a...
Definition: IsBuiltin.h:95
Header file for the EnableIf class template.
Header file for the CommonType type trait.
Base template for the AddTrait class.
Definition: AddTrait.h:144
Utility type for generic codes.
Header file for the IsBuiltin type trait.
Header file for the complex data type.