mirror of
https://github.com/nlohmann/json.git
synced 2026-08-08 18:23:18 +00:00
Guard from_chars use on JSON_HAS_CPP_17, not just __cpp_lib_to_chars
libstdc++ 15 defines __cpp_lib_to_chars even in C++14 mode (via bits/version.h pulled in by other headers), but <charconv> is only included under JSON_HAS_CPP_17. That made parse_float_from_chars() reference std::from_chars without the header in C++14 builds, breaking gcc-latest, icpx, and the offline-testdata jobs. Gate the use on JSON_HAS_CPP_17 && __cpp_lib_to_chars so it matches the include condition exactly; C++11/14 always take the scalar fallback. Verified by forcing __cpp_lib_to_chars in a C++14 build: the guard suppresses std::from_chars and it compiles. C++17 behavior is unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AXcDtEma2PjxgmPS9cQGzA Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
387d766f4e
commit
8d7828aff0
@@ -263,7 +263,10 @@ expects (side-stepping the P4168 divergence between implementations).
|
|||||||
template<typename FloatType>
|
template<typename FloatType>
|
||||||
bool parse_float_from_chars(const char* first, const char* last, FloatType& out) noexcept
|
bool parse_float_from_chars(const char* first, const char* last, FloatType& out) noexcept
|
||||||
{
|
{
|
||||||
#if defined(__cpp_lib_to_chars)
|
// JSON_HAS_CPP_17 must gate the use as well as the <charconv> include above:
|
||||||
|
// some standard libraries (e.g. libstdc++ 15) define __cpp_lib_to_chars even
|
||||||
|
// in C++14 mode, where <charconv> is not included.
|
||||||
|
#if defined(JSON_HAS_CPP_17) && defined(__cpp_lib_to_chars)
|
||||||
const auto result = std::from_chars(first, last, out);
|
const auto result = std::from_chars(first, last, out);
|
||||||
return result.ec == std::errc() && result.ptr == last;
|
return result.ec == std::errc() && result.ptr == last;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -8062,7 +8062,10 @@ expects (side-stepping the P4168 divergence between implementations).
|
|||||||
template<typename FloatType>
|
template<typename FloatType>
|
||||||
bool parse_float_from_chars(const char* first, const char* last, FloatType& out) noexcept
|
bool parse_float_from_chars(const char* first, const char* last, FloatType& out) noexcept
|
||||||
{
|
{
|
||||||
#if defined(__cpp_lib_to_chars)
|
// JSON_HAS_CPP_17 must gate the use as well as the <charconv> include above:
|
||||||
|
// some standard libraries (e.g. libstdc++ 15) define __cpp_lib_to_chars even
|
||||||
|
// in C++14 mode, where <charconv> is not included.
|
||||||
|
#if defined(JSON_HAS_CPP_17) && defined(__cpp_lib_to_chars)
|
||||||
const auto result = std::from_chars(first, last, out);
|
const auto result = std::from_chars(first, last, out);
|
||||||
return result.ec == std::errc() && result.ptr == last;
|
return result.ec == std::errc() && result.ptr == last;
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user