diff --git a/octa/traits.h b/octa/traits.h index d0e42af..d4af6a3 100644 --- a/octa/traits.h +++ b/octa/traits.h @@ -6,6 +6,8 @@ #ifndef OCTA_TRAITS_H #define OCTA_TRAITS_H +#include + #include "octa/types.h" namespace octa { @@ -86,9 +88,8 @@ namespace octa { /* is pointer */ - template struct IsPointerBase: false_t {}; - - template<> struct IsPointerBase: true_t {}; + template struct IsPointerBase : false_t {}; + template struct IsPointerBase: true_t {}; template struct IsPointer: IsPointerBase::type> {}; @@ -101,15 +102,30 @@ namespace octa { /* type equality */ - template - struct IsEqual { - static const bool value = false; - }; + template struct IsEqual : false_t {}; + template struct IsEqual: true_t {}; - template - struct IsEqual { - static const bool value = true; - }; + /* is lvalue reference */ + + template struct IsLvalueReference : false_t {}; + template struct IsLvalueReference: true_t {}; + + /* is rvalue reference */ + + template struct IsRvalueReference : false_t {}; + template struct IsRvalueReference: true_t {}; + + /* is reference */ + + template struct IsReference: IntegralConstant::value || IsRvalueReference::value) + > {}; + + /* is array */ + + template struct IsArray : false_t {}; + template struct IsArray: true_t {}; + template struct IsArray: true_t {}; } #endif \ No newline at end of file