30 namespace json_details {
35 template<
typename Real>
36 DAW_ATTRIB_NOINLINE DAW_ATTRIB_NONNULL( ) [[nodiscard]] Real
37 parse_with_strtod( daw::not_null<char const *> first,
38 daw::not_null<char const *> last ) {
39 static_assert( std::is_floating_point_v<Real>,
40 "Unexpected type passed to parse_with_strtod" );
41#if defined( DAW_JSON_USE_STRTOD )
44 if constexpr( std::is_same_v<Real, float> ) {
45 return static_cast<Real
>( std::strtof( first, end ) );
46 }
else if( std::is_same_v<Real, double> ) {
47 return static_cast<Real
>( std::strtod( first, end ) );
49 return static_cast<Real
>( std::strtold( first, end ) );
53 auto fc_res = std::from_chars( first, last, result );
54 if( fc_res.ec == std::errc::result_out_of_range ) {
56 return -std::numeric_limits<Real>::infinity( );
58 return std::numeric_limits<Real>::infinity( );
61 ErrorReason::InvalidNumber );