IsClass and IsNumber traits
parent
0500e52295
commit
0311af0ffe
|
@ -47,7 +47,7 @@ namespace octa {
|
||||||
static const T value = val;
|
static const T value = val;
|
||||||
|
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
typedef IntegralConstant<T, v> type;
|
typedef IntegralConstant<T, val> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef IntegralConstant<bool, true> true_t;
|
typedef IntegralConstant<bool, true> true_t;
|
||||||
|
@ -79,13 +79,19 @@ namespace octa {
|
||||||
|
|
||||||
template<typename T> struct IsFloatBase : false_t {};
|
template<typename T> struct IsFloatBase : false_t {};
|
||||||
|
|
||||||
template<> struct IsFloatBase<float>: true_t {};
|
template<> struct IsFloatBase<float >: true_t {};
|
||||||
template<> struct IsFloatBase<double>: true_t {};
|
template<> struct IsFloatBase<double >: true_t {};
|
||||||
template<> struct IsFloatBase<ldouble>: true_t {};
|
template<> struct IsFloatBase<ldouble>: true_t {};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct IsFloat: IsFloatBase<typename RemoveConstVolatile<T>::type> {};
|
struct IsFloat: IsFloatBase<typename RemoveConstVolatile<T>::type> {};
|
||||||
|
|
||||||
|
/* is number */
|
||||||
|
|
||||||
|
template<typename T> struct IsNumber: IntegralConstant<bool,
|
||||||
|
(IsInteger<T>::value || IsFloat<T>::value)
|
||||||
|
> {};
|
||||||
|
|
||||||
/* is pointer */
|
/* is pointer */
|
||||||
|
|
||||||
template<typename > struct IsPointerBase : false_t {};
|
template<typename > struct IsPointerBase : false_t {};
|
||||||
|
@ -100,6 +106,18 @@ namespace octa {
|
||||||
(IsInteger<T>::value || IsFloat<T>::value || IsPointer<T>::value)
|
(IsInteger<T>::value || IsFloat<T>::value || IsPointer<T>::value)
|
||||||
> {};
|
> {};
|
||||||
|
|
||||||
|
/* is class */
|
||||||
|
|
||||||
|
struct IsClassBase {
|
||||||
|
template<typename T> static char test(void (T::*)(void));
|
||||||
|
template<typename > static int test(...);
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct IsClass: IntegralConstant<bool,
|
||||||
|
sizeof(IsClassBase::test<T>(0)) == 1
|
||||||
|
> {};
|
||||||
|
|
||||||
/* type equality */
|
/* type equality */
|
||||||
|
|
||||||
template<typename, typename> struct IsEqual : false_t {};
|
template<typename, typename> struct IsEqual : false_t {};
|
||||||
|
|
Loading…
Reference in New Issue