/* Type traits for OctaSTD. * * This file is part of OctaSTD. See COPYING.md for futher information. */ #ifndef OCTA_TRAITS_H #define OCTA_TRAITS_H #include "octa/types.h" namespace octa { template struct IntegralConstant { static const T value = val; typedef T value_type; typedef IntegralConstant type; }; typedef IntegralConstant true_t; typedef IntegralConstant false_t; template const T IntegralConstant::value; template struct IsInteger: false_t {}; template struct IsFloat : false_t {}; template struct IsPointer: false_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsInteger: true_t {}; template<> struct IsFloat: true_t {}; template<> struct IsFloat: true_t {}; template<> struct IsFloat: true_t {}; template<> struct IsPointer: true_t {}; template struct IsPOD: IntegralConstant::value || IsFloat::value || IsPointer::value) > {}; template struct IsEqual { static const bool value = false; }; template struct IsEqual { static const bool value = true; }; } #endif