22 #ifndef CTKCMDLINEMODULEBACKENDFPTYPETRAITS_H 23 #define CTKCMDLINEMODULEBACKENDFPTYPETRAITS_H 26 namespace CmdLineModuleBackendFunctionPointer {
30 template<
bool flag,
typename T,
typename U>
36 template<
typename T,
typename U>
47 template<
class U>
struct PointerTraits
49 enum { result =
false };
52 template<
class U>
struct PointerTraits<U*>
54 enum { result =
true };
57 template<
class U>
struct ReferenceTraits
59 enum { result =
false };
62 template<
class U>
struct ReferenceTraits<U&>
64 enum { result =
true };
68 template<
class U>
struct UnConst
72 template<
class U>
struct UnConst<const U>
82 enum { isPointer = PointerTraits<T>::result };
83 enum { isReference = ReferenceTraits<T>::result };
89 template<
bool C,
typename T =
void>
98 template<
typename,
typename>
101 static bool const value =
false;
107 static bool const value =
true;
110 template<
typename B,
typename D>
114 static char (& Test(B*))[1];
115 static char (& Test(...))[2];
116 static bool const value =
sizeof Test(MakeD()) == 1 &&
125 #endif // CTKCMDLINEMODULEBACKENDFPTYPETRAITS_H
Select< isPointer, typename UnConst< PointeeType >::Result, typename Select< isReference, typename UnConst< ReferenceType >::Result, typename UnConst< T >::Result >::Result >::Result RawType
ReferenceTraits< T >::ReferenceType ReferenceType
PointerTraits< T >::PointeeType PointeeType