Blaze 3.9
HasMult.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_TYPETRAITS_HASMULT_H_
36#define _BLAZE_MATH_TYPETRAITS_HASMULT_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
43#include <utility>
46#include <blaze/util/EnableIf.h>
49
50
51namespace blaze {
52
53//=================================================================================================
54//
55// CLASS DEFINITION
56//
57//=================================================================================================
58
59//*************************************************************************************************
64template< typename T1, typename T2, typename = void >
65struct HasMultHelper
66 : public FalseType
67{};
69//*************************************************************************************************
70
71
72//*************************************************************************************************
78template< typename T1, typename T2 >
79struct HasMultHelper< T1, T2, Void_t< decltype( std::declval<T1>() * std::declval<T2>() ) > >
80 : public TrueType
81{};
83//*************************************************************************************************
84
85
86//*************************************************************************************************
105template< typename T1, typename T2, typename = void >
107 : public HasMultHelper<T1,T2>
108{};
109//*************************************************************************************************
110
111
112//*************************************************************************************************
117template< typename T1, typename T2 >
118struct HasMult< T1, T2, EnableIf_t< IsVector_v<T1> && IsVector_v<T2> > >
120{};
122//*************************************************************************************************
123
124
125//*************************************************************************************************
130template< typename T1, typename T2 >
131struct HasMult< T1, T2, EnableIf_t< IsMatrix_v<T1> && IsVector_v<T2> > >
132 : public HasMult< typename T1::ElementType, typename T2::ElementType >
133{};
135//*************************************************************************************************
136
137
138//*************************************************************************************************
143template< typename T1, typename T2 >
144struct HasMult< T1, T2, EnableIf_t< IsVector_v<T1> && IsMatrix_v<T2> > >
145 : public HasMult< typename T1::ElementType, typename T2::ElementType >
146{};
148//*************************************************************************************************
149
150
151//*************************************************************************************************
156template< typename T1, typename T2 >
157struct HasMult< T1, T2, EnableIf_t< IsMatrix_v<T1> && IsMatrix_v<T2> > >
158 : public HasMult< typename T1::ElementType, typename T2::ElementType >
159{};
161//*************************************************************************************************
162
163
164//*************************************************************************************************
177template< typename T1, typename T2 >
179//*************************************************************************************************
180
181} // namespace blaze
182
183#endif
Header file for the EnableIf class template.
Header file for the IntegralConstant class template.
Header file for the IsMatrix type trait.
Header file for the IsVector type trait.
constexpr bool HasMult_v
Auxiliary variable template for the HasMult type trait.
Definition: HasMult.h:178
constexpr bool IsVector_v
Auxiliary variable template for the IsVector type trait.
Definition: IsVector.h:125
constexpr bool IsMatrix_v
Auxiliary variable template for the IsMatrix type trait.
Definition: IsMatrix.h:124
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
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:138
Availability of a multiplication operator for the given data types.
Definition: HasMult.h:108
Header file for the Void type trait.