diff --git a/doc/modules/ROOT/pages/literals.adoc b/doc/modules/ROOT/pages/literals.adoc index 85b20e272..499568359 100644 --- a/doc/modules/ROOT/pages/literals.adoc +++ b/doc/modules/ROOT/pages/literals.adoc @@ -20,40 +20,40 @@ namespace decimal { constexpr auto operator "" _DF(const char* str) -> decimal32_t constexpr auto operator "" _df(const char* str) -> decimal32_t -constexpr auto operator "" _DF(unsigned long long v) -> decimal32_t -constexpr auto operator "" _df(unsigned long long v) -> decimal32_t +constexpr auto operator "" _DF(const char* str, std::size_t len) -> decimal32_t +constexpr auto operator "" _df(const char* str, std::size_t len) -> decimal32_t constexpr auto operator "" _DD(const char* str) -> decimal64_t constexpr auto operator "" _dd(const char* str) -> decimal64_t -constexpr auto operator "" _DD(unsigned long long v) -> decimal64_t -constexpr auto operator "" _dd(unsigned long long v) -> decimal64_t +constexpr auto operator "" _DD(const char* str, std::size_t len) -> decimal64_t +constexpr auto operator "" _dd(const char* str, std::size_t len) -> decimal64_t constexpr auto operator "" _DL(const char* str) -> decimal128_t constexpr auto operator "" _dl(const char* str) -> decimal128_t -constexpr auto operator "" _DL(unsigned long long v) -> decimal128_t -constexpr auto operator "" _dl(unsigned long long v) -> decimal128_t +constexpr auto operator "" _DL(const char* str, std::size_t len) -> decimal128_t +constexpr auto operator "" _dl(const char* str, std::size_t len) -> decimal128_t // ----- Fast Type Literals ----- constexpr auto operator "" _DFF(const char* str) -> decimal_fast32_t constexpr auto operator "" _dff(const char* str) -> decimal_fast32_t -constexpr auto operator "" _DFF(unsigned long long v) -> decimal_fast32_t -constexpr auto operator "" _dff(unsigned long long v) -> decimal_fast32_t +constexpr auto operator "" _DFF(const char* str, std::size_t len) -> decimal_fast32_t +constexpr auto operator "" _dff(const char* str, std::size_t len) -> decimal_fast32_t constexpr auto operator "" _DDF(const char* str) -> decimal_fast64_t constexpr auto operator "" _ddf(const char* str) -> decimal_fast64_t -constexpr auto operator "" _DDF(unsigned long long v) -> decimal_fast64_t -constexpr auto operator "" _ddf(unsigned long long v) -> decimal_fast64_t +constexpr auto operator "" _DDF(const char* str, std::size_t len) -> decimal_fast64_t +constexpr auto operator "" _ddf(const char* str, std::size_t len) -> decimal_fast64_t constexpr auto operator "" _DLF(const char* str) -> decimal_fast128_t constexpr auto operator "" _dlf(const char* str) -> decimal_fast128_t -constexpr auto operator "" _DLF(unsigned long long v) -> decimal_fast128_t -constexpr auto operator "" _dlf(unsigned long long v) -> decimal_fast128_t +constexpr auto operator "" _DLF(const char* str, std::size_t len) -> decimal_fast128_t +constexpr auto operator "" _dlf(const char* str, std::size_t len) -> decimal_fast128_t } //namespace decimal } //namespace boost diff --git a/include/boost/decimal/literals.hpp b/include/boost/decimal/literals.hpp index e0709f76b..e6d84d350 100644 --- a/include/boost/decimal/literals.hpp +++ b/include/boost/decimal/literals.hpp @@ -55,16 +55,6 @@ BOOST_DECIMAL_EXPORT constexpr auto operator ""_df(const char *str, const std::s return d; } -BOOST_DECIMAL_EXPORT constexpr auto operator ""_DF(const unsigned long long v) -> decimal32_t -{ - return decimal32_t {v}; -} - -BOOST_DECIMAL_EXPORT constexpr auto operator ""_df(const unsigned long long v) -> decimal32_t -{ - return decimal32_t {v}; -} - BOOST_DECIMAL_EXPORT constexpr auto operator ""_DFF(const char *str) -> decimal_fast32_t { decimal_fast32_t d; @@ -93,16 +83,6 @@ BOOST_DECIMAL_EXPORT constexpr auto operator ""_dff(const char *str, const std:: return d; } -BOOST_DECIMAL_EXPORT constexpr auto operator ""_DFF(const unsigned long long v) -> decimal_fast32_t -{ - return decimal_fast32_t {v}; -} - -BOOST_DECIMAL_EXPORT constexpr auto operator ""_dff(const unsigned long long v) -> decimal_fast32_t -{ - return decimal_fast32_t {v}; -} - BOOST_DECIMAL_EXPORT constexpr auto operator ""_DD(const char *str) -> decimal64_t { decimal64_t d; @@ -131,16 +111,6 @@ BOOST_DECIMAL_EXPORT constexpr auto operator ""_dd(const char *str, std::size_t) return d; } -BOOST_DECIMAL_EXPORT constexpr auto operator ""_DD(const unsigned long long v) -> decimal64_t -{ - return decimal64_t {v}; -} - -BOOST_DECIMAL_EXPORT constexpr auto operator ""_dd(const unsigned long long v) -> decimal64_t -{ - return decimal64_t {v}; -} - BOOST_DECIMAL_EXPORT constexpr auto operator ""_DDF(const char *str) -> decimal_fast64_t { decimal_fast64_t d; @@ -169,16 +139,6 @@ BOOST_DECIMAL_EXPORT constexpr auto operator ""_ddf(const char *str, const std:: return d; } -BOOST_DECIMAL_EXPORT constexpr auto operator ""_DDF(const unsigned long long v) -> decimal_fast64_t -{ - return decimal_fast64_t {v}; -} - -BOOST_DECIMAL_EXPORT constexpr auto operator ""_ddf(const unsigned long long v) -> decimal_fast64_t -{ - return decimal_fast64_t {v}; -} - BOOST_DECIMAL_EXPORT constexpr auto operator ""_DL(const char *str) -> decimal128_t { decimal128_t d; @@ -207,16 +167,6 @@ BOOST_DECIMAL_EXPORT constexpr auto operator ""_dl(const char *str, std::size_t) return d; } -BOOST_DECIMAL_EXPORT constexpr auto operator ""_DL(const unsigned long long v) -> decimal128_t -{ - return decimal128_t {v}; -} - -BOOST_DECIMAL_EXPORT constexpr auto operator ""_dl(const unsigned long long v) -> decimal128_t -{ - return decimal128_t {v}; -} - BOOST_DECIMAL_EXPORT constexpr auto operator ""_DLF(const char *str) -> decimal_fast128_t { decimal_fast128_t d; @@ -245,16 +195,6 @@ BOOST_DECIMAL_EXPORT constexpr auto operator ""_dlf(const char *str, const std:: return d; } -BOOST_DECIMAL_EXPORT constexpr auto operator ""_DLF(const unsigned long long v) -> decimal_fast128_t -{ - return decimal_fast128_t {v}; -} - -BOOST_DECIMAL_EXPORT constexpr auto operator ""_dlf(const unsigned long long v) -> decimal_fast128_t -{ - return decimal_fast128_t {v}; -} - } // namespace literals } // namespace decimal } // namespace boost diff --git a/test/test_literals.cpp b/test/test_literals.cpp index 902cfdad5..1ad2a836b 100644 --- a/test/test_literals.cpp +++ b/test/test_literals.cpp @@ -132,6 +132,18 @@ void construct_negative_infinity() BOOST_TEST_EQ("-inf"_DLF, -"inf"_DLF); } +void test_issue_1119() +{ + using namespace boost::decimal::literals; + + const auto val = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_DD; + BOOST_TEST_EQ(val, decimal64_t(1, 198)); + + const auto overflow_val = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_df; + BOOST_TEST(isinf(overflow_val)); + BOOST_TEST(!signbit(overflow_val)); +} + int main() { test_decimal32_t_literals(); @@ -144,5 +156,7 @@ int main() construct_negative_infinity(); + test_issue_1119(); + return boost::report_errors(); }