Commit 78ee2805 authored by Fan Guo's avatar Fan Guo Committed by Jordan DeLong

support -nan in conversion

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
parent 8a64dcbd
......@@ -836,6 +836,16 @@ to(StringPiece *const src) {
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.");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment