diff --git a/include/loki/TypeTraits.h b/include/loki/TypeTraits.h index b9aa6ae..449b33e 100644 --- a/include/loki/TypeTraits.h +++ b/include/loki/TypeTraits.h @@ -199,12 +199,18 @@ namespace Loki enum { isConst = 1 }; }; + template struct UnConst + { + typedef U V::* Result; + enum { isConst = 1 }; + }; + template struct UnVolatile { typedef U Result; enum { isVolatile = 0 }; }; - + template struct UnVolatile { typedef U Result; @@ -212,11 +218,18 @@ namespace Loki }; template struct UnVolatile - { + { typedef U& Result; enum { isVolatile = 1 }; }; + template struct UnVolatile + { + typedef U V::* Result; + enum { isVolatile = 1 }; + }; + + public: typedef typename UnConst::Result NonConstType; @@ -235,11 +248,15 @@ namespace Loki enum { isReference = ReferenceTraits::result }; enum { isMemberPointer = PToMTraits::result }; - enum { isStdUnsignedInt = TL::IndexOf::value>= 0 }; - enum { isStdSignedInt = TL::IndexOf::value>= 0 }; - enum { isStdIntegral = isStdUnsignedInt || isStdSignedInt || TL::IndexOf::value >= 0 }; - enum { isStdFloat = TL::IndexOf::value>= 0 }; + enum { isStdUnsignedInt = TL::IndexOf::value >= 0 || + TL::IndexOf::ReferredType>::value >= 0}; + enum { isStdSignedInt = TL::IndexOf::value >= 0 || + TL::IndexOf::ReferredType>::value >= 0}; + enum { isStdIntegral = isStdUnsignedInt || isStdSignedInt || + TL::IndexOf::value >= 0 || + TL::IndexOf::ReferredType>::value >= 0}; + enum { isStdFloat = TL::IndexOf::value >= 0 || + TL::IndexOf::ReferredType>::value >= 0}; enum { isStdArith = isStdIntegral || isStdFloat }; enum { isStdFundamental = isStdArith || isStdFloat || Conversion::sameType };