20 static_assert(std::numeric_limits<To>::min() < 0,
21 "cast_to_signed used in incorrect context (To, min)");
23 static_assert(std::numeric_limits<From>::min() == 0,
24 "cast_to_signed used in incorrect context (From, min)");
26 static_assert(std::numeric_limits<To>::max() < std::numeric_limits<From>::max(),
27 "cast_to_signed used in incorrect context (max)");
29 if (arg <=
static_cast<From
>(std::numeric_limits<To>::max()))
31 return static_cast<To
>(arg);
34 throw std::overflow_error(
"cast_to_signed: argument is too big");