1 #ifndef OSMIUM_UTIL_CAST_HPP 2 #define OSMIUM_UTIL_CAST_HPP 44 #include <type_traits> 55 template <
typename A,
typename B>
57 std::integral_constant<bool,
58 std::is_integral<A>::value &&
59 std::is_integral<B>::value &&
60 !std::is_same<A, bool>::value &&
61 !std::is_same<B, bool>::value> {
64 template <typename T, typename F, typename std::enable_if<are_real_integers<T, F>::value && std::is_same<T, F>::value,
int>
::type = 0>
69 template <typename T, typename F, typename std::enable_if<are_real_integers<T, F>::value && !std::is_same<T, F>::value && (
sizeof(T) >
sizeof(F)),
int>::
type = 0>
71 return static_cast<T>(value);
74 template <typename T, typename F, typename std::enable_if<are_real_integers<T, F>::value && !std::is_same<T, F>::value && std::is_signed<T>::value == std::is_signed<F>::value && (
sizeof(T) ==
sizeof(F)),
int>::
type = 0>
76 return static_cast<T>(value);
79 template <typename T, typename F, typename std::enable_if<are_real_integers<T, F>::value && !std::is_same<T, F>::value && (
sizeof(T) <
sizeof(F)) && std::is_signed<T>::value && std::is_signed<F>::value,
int>::
type = 0>
81 assert(value >= std::numeric_limits<T>::min() && value <= std::numeric_limits<T>::max());
82 return static_cast<T>(value);
85 template <typename T, typename F, typename std::enable_if<are_real_integers<T, F>::value && !std::is_same<T, F>::value && (
sizeof(T) <=
sizeof(F)) && std::is_unsigned<T>::value && std::is_signed<F>::value,
int>::
type = 0>
88 return static_cast<T>(value);
91 template <typename T, typename F, typename std::enable_if<are_real_integers<T, F>::value && !std::is_same<T, F>::value && (
sizeof(T) <
sizeof(F)) && std::is_unsigned<T>::value && std::is_unsigned<F>::value,
int>::
type = 0>
93 assert(value <= std::numeric_limits<T>::max());
94 return static_cast<T>(value);
97 template <typename T, typename F, typename std::enable_if<are_real_integers<T, F>::value && !std::is_same<T, F>::value && (
sizeof(T) <=
sizeof(F)) && std::is_signed<T>::value && std::is_unsigned<F>::value,
int>::
type = 0>
99 assert(static_cast<int64_t>(value) <= static_cast<int64_t>(std::numeric_limits<T>::max()));
100 return static_cast<T>(value);
105 #endif // OSMIUM_UTIL_CAST_HPP #define OSMIUM_DEPRECATED
Definition: compatibility.hpp:50
type
Definition: entity_bits.hpp:63
Namespace for everything in the Osmium library.
Definition: assembler.hpp:53
OSMIUM_DEPRECATED T static_cast_with_assert(const F value)
Definition: cast.hpp:65