35 #ifndef _BLAZE_MATH_TRAITS_MULTTRAIT_H_ 36 #define _BLAZE_MATH_TRAITS_MULTTRAIT_H_ 66 template<
typename,
typename,
typename =
void >
struct MultTrait;
67 template<
typename,
typename,
typename =
void >
struct MultTraitEval1;
68 template<
typename,
typename,
typename =
void >
struct MultTraitEval2;
75 template<
typename T1,
typename T2 >
76 auto evalMultTrait( T1&, T2& )
77 ->
typename MultTraitEval1<T1,T2>::Type;
79 template<
typename T1,
typename T2 >
80 auto evalMultTrait(
const T1&,
const T2& )
81 ->
typename MultTrait<T1,T2>::Type;
83 template<
typename T1,
typename T2 >
84 auto evalMultTrait(
const volatile T1&,
const T2& )
85 ->
typename MultTrait<T1,T2>::Type;
87 template<
typename T1,
typename T2 >
88 auto evalMultTrait(
const T1&,
const volatile T2& )
89 ->
typename MultTrait<T1,T2>::Type;
91 template<
typename T1,
typename T2 >
92 auto evalMultTrait(
const volatile T1&,
const volatile T2& )
93 ->
typename MultTrait<T1,T2>::Type;
143 template<
typename T1
151 using Type = decltype( evalMultTrait( std::declval<T1&>(), std::declval<T2&>() ) );
163 template<
typename T >
180 template<
typename T1,
typename T2 >
185 using Type = CommonType_t< complex<T1> , T2 >;
197 template<
typename T1,
typename T2 >
202 using Type = CommonType_t< T1, complex<T2> >;
214 template<
typename T1,
typename T2 >
215 struct MultTrait< complex<T1>, complex<T2> >
219 using Type = CommonType_t< complex<T1>, complex<T2> >;
239 template<
typename T1,
typename T2 >
249 template<
typename T1
252 struct MultTraitEval1
256 using Type =
typename MultTraitEval2<T1,T2>::Type;
268 template<
typename T1
271 struct MultTraitEval2
275 struct MultType {
using Type = decltype( std::declval<T1>() * std::declval<T2>() ); };
276 struct Failure {
using Type = INVALID_TYPE; };
281 using Type =
typename If_t< HasMult_v<T1,T2>, MultType, Failure >::Type;
293 template<
typename T1,
typename T2 >
294 struct MultTraitEval2< T1, T2
296 IsColumnVector_v<T2> > >
300 using Type = MultTrait_t< typename T1::ElementType, typename T2::ElementType >;
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 IsRowVector 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.
Header file for the HasMult type trait.
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.
typename MultTrait< T1, T2 >::Type MultTrait_t
Auxiliary alias declaration for the MultTrait class template.The MultTrait_t alias declaration provid...
Definition: MultTrait.h:240
Header file for the CommonType type trait.
Utility type for generic codes.
Base template for the MultTrait class.
Definition: MultTrait.h:146
constexpr bool IsRowVector_v
Auxiliary variable template for the IsRowVector type trait.The IsRowVector_v variable template provid...
Definition: IsRowVector.h:143
Header file for the IsBuiltin type trait.
Header file for the complex data type.
Header file for the IsColumnVector type trait.