1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #ifndef BOOST_UNORDERED_DETAIL_NARROW_CAST_HPP
- #define BOOST_UNORDERED_DETAIL_NARROW_CAST_HPP
- #include <boost/unordered/detail/static_assert.hpp>
- #include <boost/config.hpp>
- #include <type_traits>
- namespace boost{
- namespace unordered{
- namespace detail{
- template<typename To,typename From>
- constexpr To narrow_cast(From x) noexcept
- {
- BOOST_UNORDERED_STATIC_ASSERT(std::is_integral<From>::value);
- BOOST_UNORDERED_STATIC_ASSERT(std::is_integral<To>::value);
- BOOST_UNORDERED_STATIC_ASSERT(sizeof(From)>=sizeof(To));
- return static_cast<To>(
- x
- #if defined(__MSVC_RUNTIME_CHECKS)
-
- &static_cast<typename std::make_unsigned<To>::type>(~static_cast<To>(0))
- #endif
- );
- }
- }
- }
- }
- #endif
|