56 if constexpr (!numeric_util::is_int_rangesafe<OutT, InT>() && numeric_util::is_int_u2s<OutT, InT>())
59 if (
static_cast<uintmax_t
>(inVal) >
static_cast<uintmax_t
>(std::numeric_limits<OutT>::max()))
61 throw numeric_out_of_range(
"Range exceeded for unsigned --> signed integer conversion");
64 else if constexpr (!numeric_util::is_int_rangesafe<OutT, InT>() && numeric_util::is_int_s2u<OutT, InT>())
68 throw numeric_out_of_range(
"Cannot store negative value for signed --> unsigned integer conversion");
71 if constexpr (std::numeric_limits<OutT>::digits - 1 < std::numeric_limits<InT>::digits)
72 if (
static_cast<uintmax_t
>(inVal) >
static_cast<uintmax_t
>(std::numeric_limits<OutT>::max()))
73 throw numeric_out_of_range(
"Range exceeded for signed --> unsigned integer conversion");
75 else if constexpr (!numeric_util::is_int_rangesafe<OutT, InT>())
78 if (std::numeric_limits<OutT>::min() > inVal || std::numeric_limits<OutT>::max() < inVal)
80 throw numeric_out_of_range(
"Range exceeded for integer conversion");
84 return static_cast<OutT
>(inVal);