diff --git a/include/rapidjson/internal/biginteger.h b/include/rapidjson/internal/biginteger.h index 3e97920..5719a2a 100755 --- a/include/rapidjson/internal/biginteger.h +++ b/include/rapidjson/internal/biginteger.h @@ -252,7 +252,8 @@ private: (*outHigh)++; return low; #elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__x86_64__) - unsigned __int128 p = static_cast(a) * static_cast(b); + __extension__ typedef unsigned __int128 uint128; + uint128 p = static_cast(a) * static_cast(b); p += k; *outHigh = p >> 64; return static_cast(p); diff --git a/include/rapidjson/internal/diyfp.h b/include/rapidjson/internal/diyfp.h index 174b9fa..1b36f66 100644 --- a/include/rapidjson/internal/diyfp.h +++ b/include/rapidjson/internal/diyfp.h @@ -75,7 +75,8 @@ struct DiyFp { h++; return DiyFp(h, e + rhs.e + 64); #elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__x86_64__) - unsigned __int128 p = static_cast(f) * static_cast(rhs.f); + __extension__ typedef unsigned __int128 uint128; + uint128 p = static_cast(f) * static_cast(rhs.f); uint64_t h = p >> 64; uint64_t l = static_cast(p); if (l & (uint64_t(1) << 63)) // rounding