util/StringUtil.cc: feature-test std::from_chars (#415)

Support for std::{from,to}_chars isn't finalized in
libcxx as of the time of writing, see __cpp_lib_to_chars in
6331bfa41a/libcxx/docs/FeatureTestMacroTable.rst

This patch adds a fallback using strtof. There are two
differences:
* strtof is locale-dependent
* strtof tolerates leading spaces

Signed-off-by: Mohamed Gaber <me@donn.website>
This commit is contained in:
Mohamed Gaber 2026-04-03 20:21:57 +02:00 committed by GitHub
parent e8218f2db1
commit a5921d1ca9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 10 additions and 0 deletions

View File

@ -28,6 +28,7 @@
#include <cctype>
#include <charconv>
#include <system_error>
#include <version>
namespace sta {
@ -56,12 +57,21 @@ std::pair<float, bool>
stringFloat(const std::string &str)
{
float value;
#if defined(__cpp_lib_to_chars) && __cpp_lib_to_chars >= 201611L
auto [ptr, ec] = std::from_chars(str.data(), str.data() + str.size(), value);
if (ec == std::errc()
&& *ptr == '\0')
return {value, true};
else
return {0.0, false};
#else
char *ptr;
value = strtof(str.data(), &ptr);
if (!errno || *ptr != '\0')
return {0.0, false};
else
return {value, true};
#endif
}
void