diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index 58da0a3a66..fc30bf7a74 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -63,6 +63,12 @@ public: // add a digit void push(numberuint128 d) noexcept; +#ifdef _MSC_VER + void + push(numberint128 d) noexcept; + void + push(std::int64_t d) noexcept; +#endif // recover a digit unsigned @@ -103,6 +109,20 @@ Number::Guard::push(numberuint128 d128) noexcept digits_ |= (d & 0x0000'0000'0000'000FULL) << 60; } +#ifdef _MSC_VER +void +Number::Guard::push(numberint128 d) noexcept +{ + push(static_cast(d)); +} + +void +Number::Guard::push(std::int64_t d) noexcept +{ + push(static_cast(d)); +} +#endif + inline unsigned Number::Guard::pop() noexcept { diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index b4c03232cb..0c4e042259 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -745,6 +745,8 @@ public: Number maxInt64{std::numeric_limits::max()}; BEAST_EXPECT(maxInt64.exponent() <= 0); + // TODO: square maxInt64 and square Number::max() + using namespace boost::multiprecision; // maxint64 9,223,372,036,854,775,808 int128_t minMantissa{1'000'000'000'000'000'000LL};