#ifndef SPROUT_CSTDLIB_ABS_HPP #define SPROUT_CSTDLIB_ABS_HPP #include #include #include namespace sprout { // Copyright (C) 2011 RiSK (sscrisk) // 7.20.6.1 abs,labs,及び llabs 関数 inline SPROUT_CONSTEXPR int abs(int j) { return j < 0 ? -j : j; } inline SPROUT_CONSTEXPR long labs(long j) { return j < 0 ? -j : j; } inline SPROUT_CONSTEXPR long long llabs(long long j) { return j < 0 ? -j : j; } inline SPROUT_CONSTEXPR long abs(long j) { return sprout::labs(j); } inline SPROUT_CONSTEXPR long long abs(long long j) { return sprout::llabs(j); } namespace { template< typename IntType, typename sprout::enabler_if< std::is_integral::value && std::is_signed::value >::type = sprout::enabler > inline SPROUT_CONSTEXPR IntType abs(IntType j) { return j < 0 ? -j : j; } template< typename IntType, typename sprout::enabler_if< std::is_integral::value && std::is_unsigned::value >::type = sprout::enabler > inline SPROUT_CONSTEXPR IntType abs(IntType j) { return j; } } // anonymous-namespace } // namespace sprout #endif // #ifndef SPROUT_CSTDLIB_ABS_HPP