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 }