35#ifndef _BLAZE_MATH_TRAITS_MAPTRAIT_H_
36#define _BLAZE_MATH_TRAITS_MAPTRAIT_H_
58template<
typename... >
struct MapTrait;
59template<
typename,
typename,
typename =
void >
struct UnaryMapTraitEval1;
60template<
typename,
typename,
typename =
void >
struct UnaryMapTraitEval2;
61template<
typename,
typename,
typename =
void >
struct UnaryMapTraitEval3;
62template<
typename,
typename,
typename,
typename =
void >
struct BinaryMapTraitEval1;
63template<
typename,
typename,
typename,
typename =
void >
struct BinaryMapTraitEval2;
64template<
typename,
typename,
typename,
typename =
void >
struct BinaryMapTraitEval3;
71template<
typename T,
typename OP >
72auto evalMapTrait(
const volatile T&, OP ) -> UnaryMapTraitEval1<T,OP>;
74template<
typename T1,
typename T2,
typename OP >
75auto evalMapTrait(
const volatile T1&,
const volatile T2&, OP ) -> BinaryMapTraitEval1<T1,T2,OP>;
110template<
typename... Args >
112 :
public decltype( evalMapTrait( std::declval<Args&>()... ) )
130template<
typename... Args >
143struct UnaryMapTraitEval1
144 :
public UnaryMapTraitEval2<T,OP>
155template<
size_t ID,
typename OP >
156struct UnaryMapTraitEval1<GroupTag<ID>,OP,void>
160 using Type = GroupTag<ID>;
175struct UnaryMapTraitEval2
176 :
public UnaryMapTraitEval3<T,OP>
190struct UnaryMapTraitEval3
203struct UnaryMapTraitEval3< T, OP
204 ,
Void_t< decltype( std::declval<OP>()( std::declval<T>() ) ) > >
208 using Type = RemoveCVRef_t< decltype( std::declval<OP>()( std::declval<T>() ) ) >;
224struct BinaryMapTraitEval1
225 :
public BinaryMapTraitEval2<T1,T2,OP>
236template<
size_t ID,
typename OP >
237struct BinaryMapTraitEval1<GroupTag<ID>,GroupTag<ID>,OP,void>
241 using Type = GroupTag<ID>;
257struct BinaryMapTraitEval2
258 :
public BinaryMapTraitEval3<T1,T2,OP>
273struct BinaryMapTraitEval3
287struct BinaryMapTraitEval3< T1, T2, OP
288 ,
Void_t< decltype( std::declval<OP>()( std::declval<T1>(), std::declval<T2>() ) ) > >
292 using Type = RemoveCVRef_t< decltype( std::declval<OP>()( std::declval<T1>(), std::declval<T2>() ) ) >;
Header file for the GroupTag class template.
Header file for the RemoveCVRef type trait.
typename MapTrait< Args... >::Type MapTrait_t
Auxiliary alias declaration for the MapTrait class template.
Definition: MapTrait.h:131
void Void_t
Compile time type check.
Definition: Void.h:64
Base template for the MapTrait class.
Definition: MapTrait.h:113