diff --git a/headers/validation.h b/headers/validation.h index 9256d017..014bae78 100644 --- a/headers/validation.h +++ b/headers/validation.h @@ -1232,15 +1232,14 @@ class Validator { WA(name, ": Want integer, found nothing"); } long long v; - try { - auto begin = s.c_str(), end = begin + s.size(); - auto [ptr, ec] = std::from_chars(begin, end, v); - if(ptr != end or ec != std::errc{}) - WA(name, ": Parsing " + s + " as long long failed! Did not process all characters"); - } catch(const std::out_of_range& e) { + auto begin = s.c_str(), end = begin + s.size(); + auto [ptr, ec] = std::from_chars(begin, end, v); + if(ec == std::errc::result_out_of_range) { WA(name, ": Number " + s + " does not fit in a long long!"); - } catch(const std::invalid_argument& e) { - WA("Parsing " + s + " as long long failed!"); + } else if(ptr != end) { + WA(name, ": Parsing " + s + " as long long failed! Did not process all characters"); + } else if(ec != std::errc{}) { + WA(name, ": Parsing " + s + " as long long failed!"); } // Check for leading zero. if(v == 0) { @@ -1260,18 +1259,14 @@ class Validator { assert(!gen); std::string s = get_string("long double"); long double v; - try { - size_t chars_processed; - v = stold(s, &chars_processed); - if(chars_processed != s.size()) - WA(name, ": Parsing ", s, - " as long double failed! Did not process all characters."); - if(strict_float && !std::regex_match(s, float_regex)) - WA(name, ": Parsing ", s, " failed, because it does not match the strict float_regex!"); - } catch(const std::out_of_range& e) { + auto begin = s.c_str(), end = begin + s.size(); + auto [ptr, ec] = std::from_chars(begin, end, v); + if(ec == std::errc::result_out_of_range) { WA(name, ": Number " + s + " does not fit in a long double!"); - } catch(const std::invalid_argument& e) { - WA("Parsing " + s + " as long double failed!"); + } else if(ptr != end) { + WA(name, ": Parsing " + s + " as long double failed! Did not process all characters"); + } else if(ec != std::errc{}) { + WA(name, ": Parsing " + s + " as long double failed!"); } return v; }