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:
parent
e8218f2db1
commit
a5921d1ca9
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue