13 #include <daw/daw_attributes.h>
14 #include <daw/daw_cpp_feature_check.h>
16 #if not defined( DAW_JSON_USE_STRTOD ) and defined( __cpp_lib_to_chars )
22 namespace json_details {
24 template<
typename Real, std::enable_if_t<std::is_
floating_po
int_v<Real>,
25 std::
nullptr_t> =
nullptr>
28 #if not defined( DAW_JSON_USE_STRTOD ) and defined( __cpp_lib_to_chars )
30 std::from_chars_result fc_res = std::from_chars( first, last, result );
31 if( fc_res.ec == std::errc::result_out_of_range ) {
33 return -std::numeric_limits<Real>::infinity( );
35 return std::numeric_limits<Real>::infinity( );
38 ErrorReason::InvalidNumber );
43 if constexpr( std::is_same_v<Real, float> ) {
44 return static_cast<Real>( strtof( first, end ) );
45 }
else if( std::is_same_v<Real, double> ) {
46 return static_cast<Real>( strtod( first, end ) );
48 return static_cast<Real>( strtold( first, end ) );
#define daw_json_assert(Bool,...)
Definition: daw_json_assert.h:178
DAW_ATTRIB_NOINLINE Real parse_with_strtod(char const *first, char const *last)
Definition: daw_fp_fallback.h:26
Definition: daw_from_json.h:22
#define DAW_JSON_VER
Definition: version.h:11