1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Copyright 2023 Matt Borland
- // Distributed under the Boost Software License, Version 1.0.
- // https://www.boost.org/LICENSE_1_0.txt
- #ifndef BOOST_CHARCONV_DETAIL_APPLY_SIGN_HPP
- #define BOOST_CHARCONV_DETAIL_APPLY_SIGN_HPP
- #include <boost/config.hpp>
- #include <boost/charconv/detail/emulated128.hpp>
- #include <boost/charconv/detail/type_traits.hpp>
- #include <type_traits>
- // We are purposefully converting values here
- #ifdef BOOST_MSVC
- # pragma warning(push)
- # pragma warning(disable: 4146)
- #elif defined(__GNUC__) && __GNUC__ >= 5
- # pragma GCC diagnostic push
- # pragma GCC diagnostic ignored "-Wconversion"
- #elif defined(__clang__)
- # pragma clang diagnostic push
- # pragma clang diagnostic ignored "-Wconversion"
- #endif
- namespace boost { namespace charconv { namespace detail {
- template <typename Integer, typename Unsigned_Integer = detail::make_unsigned_t<Integer>,
- typename std::enable_if<detail::is_signed<Integer>::value, bool>::type = true>
- constexpr Unsigned_Integer apply_sign(Integer val) noexcept
- {
- return -(static_cast<Unsigned_Integer>(val));
- }
- template <typename Unsigned_Integer, typename std::enable_if<!detail::is_signed<Unsigned_Integer>::value, bool>::type = true>
- constexpr Unsigned_Integer apply_sign(Unsigned_Integer val) noexcept
- {
- return val;
- }
- }}} // Namespaces
- #ifdef BOOST_MSVC
- # pragma warning(pop)
- #elif defined(__GNUC__) && __GNUC__ >= 5
- # pragma GCC diagnostic pop
- #elif defined(__clang__)
- # pragma clang diagnostic pop
- #endif
- #endif // BOOST_CHARCONV_DETAIL_APPLY_SIGN_HPP
|