Another try with volatile
diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h
index 2f6bb2a..b59cc69 100644
--- a/include/rapidjson/document.h
+++ b/include/rapidjson/document.h
@@ -791,8 +791,16 @@
// Checks whether a number can be losslessly converted to a double.
bool IsLosslessDouble() const {
if (!IsNumber()) return false;
- if (IsUint64()) return static_cast<volatile uint64_t>(static_cast<volatile double>(GetUint64())) == GetUint64();
- if (IsInt64()) return static_cast<volatile int64_t>(static_cast<volatile double>(GetInt64())) == GetInt64();
+ if (IsUint64()) {
+ uint64_t u = GetUint64();
+ volatile double d = static_cast<double>(u);
+ return static_cast<uint64_t>(d) == u;
+ }
+ if (IsInt64()) {
+ int64_t i = GetInt64();
+ volatile double d = static_cast<double>(i);
+ return static_cast< int64_t>(d) == i;
+ }
return true; // double, int, uint are always lossless
}