diff --git a/octa/traits.h b/octa/traits.h index d4af6a3..8c541a4 100644 --- a/octa/traits.h +++ b/octa/traits.h @@ -47,7 +47,7 @@ namespace octa { static const T value = val; typedef T value_type; - typedef IntegralConstant type; + typedef IntegralConstant type; }; typedef IntegralConstant true_t; @@ -79,13 +79,19 @@ namespace octa { template struct IsFloatBase : false_t {}; - template<> struct IsFloatBase: true_t {}; - template<> struct IsFloatBase: true_t {}; + template<> struct IsFloatBase: true_t {}; + template<> struct IsFloatBase: true_t {}; template<> struct IsFloatBase: true_t {}; template struct IsFloat: IsFloatBase::type> {}; + /* is number */ + + template struct IsNumber: IntegralConstant::value || IsFloat::value) + > {}; + /* is pointer */ template struct IsPointerBase : false_t {}; @@ -100,6 +106,18 @@ namespace octa { (IsInteger::value || IsFloat::value || IsPointer::value) > {}; + /* is class */ + + struct IsClassBase { + template static char test(void (T::*)(void)); + template static int test(...); + }; + + template + struct IsClass: IntegralConstant(0)) == 1 + > {}; + /* type equality */ template struct IsEqual : false_t {};