#pragma once #ifndef __FILE_Detail_CP_Arithmetic_Hpp #define __FILE_Detail_CP_Arithmetic_Hpp #include "detail/CP/CHash.hpp" namespace Internal { /** * Traits class which tests if a type is arithmetic. */ template struct TIsArithmeticTool { constexpr static bool Value = false; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template <> struct TIsArithmeticTool { constexpr static bool Value = true; }; template struct TIsArithmeticTool { constexpr static bool Value = TIsArithmeticTool::Value; }; template struct TIsArithmeticTool< volatile T> { constexpr static bool Value = TIsArithmeticTool::Value; }; template struct TIsArithmeticTool { constexpr static bool Value = TIsArithmeticTool::Value; }; } template constexpr bool TIsArithmetic = Internal::TIsArithmeticTool::Value; namespace Internal { /** * Traits class which tests if a type is a signed integral type. */ template struct TIsSignedTool { constexpr static bool Value = false; }; template <> struct TIsSignedTool { constexpr static bool Value = true; }; template <> struct TIsSignedTool { constexpr static bool Value = true; }; template <> struct TIsSignedTool { constexpr static bool Value = true; }; template <> struct TIsSignedTool { constexpr static bool Value = true; }; template struct TIsSignedTool { constexpr static bool Value = TIsSignedTool::Value; }; template struct TIsSignedTool< volatile T> { constexpr static bool Value = TIsSignedTool::Value; }; template struct TIsSignedTool { constexpr static bool Value = TIsSignedTool::Value; }; } template constexpr bool TIsSigned = Internal::TIsSignedTool::Value; #endif // !__FILE_Detail_CP_Arithmetic_Hpp