1234567891011121314151617181920212223242526272829303132333435363738 |
- #ifndef BOOST_UUID_DETAIL_NUMERIC_CAST_INCLUDED
- #define BOOST_UUID_DETAIL_NUMERIC_CAST_INCLUDED
- // Copyright 2024 Peter Dimov
- // Distributed under the Boost Software License, Version 1.0.
- // https://www.boost.org/LICENSE_1_0.txt
- #include <boost/uuid/detail/static_assert.hpp>
- #include <boost/throw_exception.hpp>
- #include <stdexcept>
- #include <limits>
- #include <type_traits>
- namespace boost {
- namespace uuids {
- namespace detail {
- template<class T, class U> T numeric_cast( U u )
- {
- BOOST_UUID_STATIC_ASSERT( std::is_integral<T>::value );
- BOOST_UUID_STATIC_ASSERT( std::is_unsigned<T>::value );
- BOOST_UUID_STATIC_ASSERT( std::is_integral<U>::value );
- BOOST_UUID_STATIC_ASSERT( std::is_unsigned<U>::value );
- if( u > std::numeric_limits<T>::max() )
- {
- BOOST_THROW_EXCEPTION( std::range_error( "Argument to numeric_cast is out of range of destination type" ) );
- }
- return static_cast<T>( u );
- }
- } // detail
- } // uuids
- } // boost
- #endif // #ifndef BOOST_UUID_DETAIL_NUMERIC_CAST_INCLUDED
|