Summary:
Folly supports -inf and nan but not -nan, instead it raised unexpected exceptions not handled in the upstream.
This diff is separated out from
D569816 -- Diff1.
Test Plan: std::isnan(folly::to<double>(-nan))
Reviewed By: tudorb@fb.com
FB internal diff:
D569939
return std::numeric_limits<Tgt>::quiet_NaN();
}
+ // "-nan"?
+ if (src->size() >= 4 &&
+ toupper((*src)[0]) == '-' &&
+ toupper((*src)[1]) == 'N' &&
+ toupper((*src)[2]) == 'A' &&
+ toupper((*src)[3]) == 'N') {
+ src->advance(4);
+ return -std::numeric_limits<Tgt>::quiet_NaN();
+ }
+
// All bets are off
throw std::range_error("Unable to convert \"" + src->toString()
+ "\" to a floating point value.");