Skip to content

Commit ce3db86

Browse files
authored
Merge pull request #765 from boostorg/develop
Merge to Master for 1.92
2 parents de345f6 + 65a2d7c commit ce3db86

17 files changed

Lines changed: 389 additions & 98 deletions

.drone.star

Lines changed: 29 additions & 29 deletions
Large diffs are not rendered by default.

.drone/drone.sh

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/bash
2+
3+
set -ex
4+
export TRAVIS_BUILD_DIR=$(pwd)
5+
export DRONE_BUILD_DIR=$(pwd)
6+
export TRAVIS_BRANCH=$DRONE_BRANCH
7+
export VCS_COMMIT_ID=$DRONE_COMMIT
8+
export GIT_COMMIT=$DRONE_COMMIT
9+
export PATH=~/.local/bin:/usr/local/bin:$PATH
10+
11+
echo '==================================> BEFORE_INSTALL'
12+
13+
. .drone/before-install.sh
14+
15+
echo '==================================> INSTALL'
16+
17+
cd ..
18+
for i in 1 2 3 4 5; do git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root && break || sleep 15; done
19+
cd boost-root
20+
for i in 1 2 3 4 5; do git submodule update --init tools/build && break || sleep 15; done
21+
for i in 1 2 3 4 5; do git submodule update --init libs/config && break || sleep 15; done
22+
for i in 1 2 3 4 5; do git submodule update --init libs/polygon && break || sleep 15; done
23+
for i in 1 2 3 4 5; do git submodule update --init tools/boost_install && break || sleep 15; done
24+
for i in 1 2 3 4 5; do git submodule update --init libs/headers && break || sleep 15; done
25+
for i in 1 2 3 4 5; do git submodule update --init tools/boostdep && break || sleep 15; done
26+
cp -r $TRAVIS_BUILD_DIR/* libs/multiprecision
27+
for i in 1 2 3 4 5; do python tools/boostdep/depinst/depinst.py multiprecision && break || sleep 15; done
28+
./bootstrap.sh
29+
./b2 headers
30+
31+
echo '==================================> BEFORE_SCRIPT'
32+
33+
. $DRONE_BUILD_DIR/.drone/before-script.sh
34+
35+
echo '==================================> SCRIPT'
36+
37+
echo "using $TOOLSET : : $COMPILER : <cxxflags>-std=$CXXSTD ;" > ~/user-config.jam
38+
(cd libs/config/test && ../../../b2 print_config_info print_math_info toolset=$TOOLSET)
39+
(cd libs/multiprecision/test && ../../../b2 -j3 toolset=$TOOLSET $TEST_SUITE define=CI_SUPPRESS_KNOWN_ISSUES define=SLOW_COMPILER)
40+
41+
echo '==================================> AFTER_SUCCESS'
42+
43+
. $DRONE_BUILD_DIR/.drone/after-success.sh

include/boost/multiprecision/cpp_bin_float.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2340,13 +2340,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
23402340
template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
23412341
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_signaling_NaN;
23422342
#ifdef _MSC_VER
2343-
#pragma warning(push)
2344-
#pragma warning(disable:4996)
2343+
# pragma warning(push)
2344+
# pragma warning(disable : 4996)
2345+
#elif (defined(__clang__) && (__clang_major__ >= 17))
2346+
# pragma clang diagnostic push
2347+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
23452348
#endif
23462349
template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
23472350
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm;
23482351
#ifdef _MSC_VER
23492352
#pragma warning(pop)
2353+
#elif (defined(__clang__) && (__clang_major__ >= 17))
2354+
# pragma clang diagnostic pop
23502355
#endif
23512356
template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
23522357
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm_loss;

include/boost/multiprecision/cpp_dec_float.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3742,13 +3742,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
37423742
template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
37433743
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> >::has_signaling_NaN;
37443744
#ifdef _MSC_VER
3745-
#pragma warning(push)
3746-
#pragma warning(disable : 4996)
3745+
# pragma warning(push)
3746+
# pragma warning(disable : 4996)
3747+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3748+
# pragma clang diagnostic push
3749+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
37473750
#endif
37483751
template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
37493752
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> >::has_denorm;
37503753
#ifdef _MSC_VER
37513754
#pragma warning(pop)
3755+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3756+
# pragma clang diagnostic pop
37523757
#endif
37533758
template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
37543759
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> >::has_denorm_loss;

include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_limits.hpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,19 @@ struct numeric_limits<FloatingPointType,
3939
static constexpr bool is_bounded = std::numeric_limits<float_type>::is_bounded;
4040
static constexpr bool is_modulo = std::numeric_limits<float_type>::is_modulo;
4141
static constexpr bool is_iec559 = std::numeric_limits<float_type>::is_iec559;
42+
#ifdef _MSC_VER
43+
# pragma warning(push)
44+
# pragma warning(disable : 4996)
45+
#elif (defined(__clang__) && (__clang_major__ >= 17))
46+
# pragma clang diagnostic push
47+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
48+
#endif
4249
static constexpr std::float_denorm_style has_denorm = std::numeric_limits<float_type>::has_denorm;
50+
#ifdef _MSC_VER
51+
#pragma warning(pop)
52+
#elif (defined(__clang__) && (__clang_major__ >= 17))
53+
# pragma clang diagnostic pop
54+
#endif
4355
static constexpr bool has_infinity = std::numeric_limits<float_type>::has_infinity;
4456
static constexpr bool has_quiet_NaN = std::numeric_limits<float_type>::has_quiet_NaN;
4557
static constexpr bool has_signaling_NaN = std::numeric_limits<float_type>::has_signaling_NaN;
@@ -87,7 +99,19 @@ struct numeric_limits<FloatingPointType,
8799
static constexpr bool is_bounded = true;
88100
static constexpr bool is_modulo = false;
89101
static constexpr bool is_iec559 = true;
102+
#ifdef _MSC_VER
103+
# pragma warning(push)
104+
# pragma warning(disable : 4996)
105+
#elif (defined(__clang__) && (__clang_major__ >= 17))
106+
# pragma clang diagnostic push
107+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
108+
#endif
90109
static constexpr std::float_denorm_style has_denorm = std::denorm_present;
110+
#ifdef _MSC_VER
111+
#pragma warning(pop)
112+
#elif (defined(__clang__) && (__clang_major__ >= 17))
113+
# pragma clang diagnostic pop
114+
#endif
91115
static constexpr bool has_infinity = true;
92116
static constexpr bool has_quiet_NaN = true;
93117
static constexpr bool has_signaling_NaN = false;

include/boost/multiprecision/cpp_int/limits.hpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -254,23 +254,19 @@ template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_i
254254
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_quiet_NaN;
255255
template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
256256
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_signaling_NaN;
257-
#if defined(__clang__) && defined(__has_warning)
258-
# if __has_warning("-Wdeprecated-declarations")
257+
#ifdef _MSC_VER
258+
# pragma warning(push)
259+
# pragma warning(disable : 4996)
260+
#elif (defined(__clang__) && (__clang_major__ >= 17))
259261
# pragma clang diagnostic push
260262
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
261-
# endif
262-
#elif defined(_MSC_VER)
263-
# pragma warning(push)
264-
# pragma warning(disable:4996)
265263
#endif
266264
template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
267265
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_denorm;
268-
#if defined(__clang__) && defined(__has_warning)
269-
# if __has_warning("-Wdeprecated-declarations")
266+
#ifdef _MSC_VER
267+
#pragma warning(pop)
268+
#elif (defined(__clang__) && (__clang_major__ >= 17))
270269
# pragma clang diagnostic pop
271-
# endif
272-
#elif defined(_MSC_VER)
273-
# pragma warning(pop)
274270
#endif
275271
template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
276272
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_denorm_loss;

include/boost/multiprecision/detail/number_base.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ struct expression_storage_base<T, true>
457457
};
458458

459459
template <class T>
460-
struct expression_storage : public expression_storage_base<T, boost::multiprecision::detail::is_arithmetic<T>::value>
460+
struct expression_storage : public expression_storage_base<T, boost::multiprecision::detail::is_arithmetic<T>::value || std::is_empty<T>::value>
461461
{};
462462

463463
template <class T>

include/boost/multiprecision/float128.hpp

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <cfloat>
2121
#include <tuple>
2222
#include <cstring>
23+
#include <complex>
2324
#include <boost/multiprecision/detail/standalone_config.hpp>
2425
#include <boost/multiprecision/number.hpp>
2526
#include <boost/multiprecision/detail/hash.hpp>
@@ -295,6 +296,14 @@ struct float128_backend
295296
{
296297
return m_value;
297298
}
299+
BOOST_MP_CXX14_CONSTEXPR float128_type& data()
300+
{
301+
return m_value;
302+
}
303+
BOOST_MP_CXX14_CONSTEXPR const float128_type& data() const
304+
{
305+
return m_value;
306+
}
298307
};
299308

300309
inline BOOST_MP_CXX14_CONSTEXPR void eval_add(float128_backend& result, const float128_backend& a)
@@ -710,6 +719,29 @@ inline boost::multiprecision::number<float128_backend, ExpressionTemplates> rsqr
710719
return res;
711720
}
712721

722+
// The default std::abs(std::complex<>) implementation normalizes by max(|re|, |im|),
723+
// which yields NaN when an input is infinite (inf/inf).
724+
// Per IEEE 754, the result must be +infinity if either component is infinite, even if the other is NaN.
725+
template <boost::multiprecision::expression_template_option ExpressionTemplates>
726+
inline boost::multiprecision::number<float128_backend, ExpressionTemplates>
727+
abs BOOST_PREVENT_MACRO_SUBSTITUTION(const std::complex<boost::multiprecision::number<float128_backend, ExpressionTemplates>>& z)
728+
{
729+
using number_type = boost::multiprecision::number<float128_backend, ExpressionTemplates>;
730+
const float128_type re_v = z.real().backend().value();
731+
const float128_type im_v = z.imag().backend().value();
732+
#ifdef BOOST_MP_USE_FLOAT128
733+
return number_type(::hypotq(re_v, im_v));
734+
#else
735+
if (isinfq(re_v) || isinfq(im_v))
736+
{
737+
return std::numeric_limits<number_type>::infinity();
738+
}
739+
const float128_type re_abs = re_v < 0 ? -re_v : re_v;
740+
const float128_type im_abs = im_v < 0 ? -im_v : im_v;
741+
return number_type(sqrtq(re_abs * re_abs + im_abs * im_abs));
742+
#endif
743+
}
744+
713745
#ifndef BOOST_MP_USE_QUAD
714746
template <multiprecision::expression_template_option ExpressionTemplates>
715747
inline boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates> copysign BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates>& a, const boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates>& b)
@@ -833,12 +865,17 @@ class numeric_limits<boost::multiprecision::number<boost::multiprecision::backen
833865
static constexpr bool has_quiet_NaN = true;
834866
static constexpr bool has_signaling_NaN = false;
835867
#ifdef _MSC_VER
836-
#pragma warning(push)
837-
#pragma warning(disable : 4996)
868+
# pragma warning(push)
869+
# pragma warning(disable : 4996)
870+
#elif (defined(__clang__) && (__clang_major__ >= 17))
871+
# pragma clang diagnostic push
872+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
838873
#endif
839874
static constexpr float_denorm_style has_denorm = denorm_present;
840875
#ifdef _MSC_VER
841876
#pragma warning(pop)
877+
#elif (defined(__clang__) && (__clang_major__ >= 17))
878+
# pragma clang diagnostic pop
842879
#endif
843880
static constexpr bool has_denorm_loss = true;
844881
static BOOST_MP_CXX14_CONSTEXPR number_type infinity() { return HUGE_VAL; /* conversion from double infinity OK */ }
@@ -902,14 +939,20 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
902939

903940
template <boost::multiprecision::expression_template_option ExpressionTemplates>
904941
constexpr float_round_style numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates> >::round_style;
942+
905943
#ifdef _MSC_VER
906-
#pragma warning(push)
907-
#pragma warning(disable : 4996)
944+
# pragma warning(push)
945+
# pragma warning(disable : 4996)
946+
#elif (defined(__clang__) && (__clang_major__ >= 17))
947+
# pragma clang diagnostic push
948+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
908949
#endif
909950
template <boost::multiprecision::expression_template_option ExpressionTemplates>
910951
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates> >::has_denorm;
911952
#ifdef _MSC_VER
912953
#pragma warning(pop)
954+
#elif (defined(__clang__) && (__clang_major__ >= 17))
955+
# pragma clang diagnostic pop
913956
#endif
914957

915958
} // namespace std

include/boost/multiprecision/gmp.hpp

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3645,13 +3645,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
36453645
template <unsigned Digits10, boost::multiprecision::expression_template_option ExpressionTemplates>
36463646
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<Digits10>, ExpressionTemplates> >::has_signaling_NaN;
36473647
#ifdef _MSC_VER
3648-
#pragma warning(push)
3649-
#pragma warning(disable : 4996)
3648+
# pragma warning(push)
3649+
# pragma warning(disable : 4996)
3650+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3651+
# pragma clang diagnostic push
3652+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
36503653
#endif
36513654
template <unsigned Digits10, boost::multiprecision::expression_template_option ExpressionTemplates>
36523655
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<Digits10>, ExpressionTemplates> >::has_denorm;
36533656
#ifdef _MSC_VER
36543657
#pragma warning(pop)
3658+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3659+
# pragma clang diagnostic pop
36553660
#endif
36563661
template <unsigned Digits10, boost::multiprecision::expression_template_option ExpressionTemplates>
36573662
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<Digits10>, ExpressionTemplates> >::has_denorm_loss;
@@ -3749,13 +3754,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
37493754
template <boost::multiprecision::expression_template_option ExpressionTemplates>
37503755
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<0>, ExpressionTemplates> >::has_signaling_NaN;
37513756
#ifdef _MSC_VER
3752-
#pragma warning(push)
3753-
#pragma warning(disable : 4996)
3757+
# pragma warning(push)
3758+
# pragma warning(disable : 4996)
3759+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3760+
# pragma clang diagnostic push
3761+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
37543762
#endif
37553763
template <boost::multiprecision::expression_template_option ExpressionTemplates>
37563764
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<0>, ExpressionTemplates> >::has_denorm;
37573765
#ifdef _MSC_VER
37583766
#pragma warning(pop)
3767+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3768+
# pragma clang diagnostic pop
37593769
#endif
37603770
template <boost::multiprecision::expression_template_option ExpressionTemplates>
37613771
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<0>, ExpressionTemplates> >::has_denorm_loss;
@@ -3863,13 +3873,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
38633873
template <boost::multiprecision::expression_template_option ExpressionTemplates>
38643874
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_int, ExpressionTemplates> >::has_signaling_NaN;
38653875
#ifdef _MSC_VER
3866-
#pragma warning(push)
3867-
#pragma warning(disable : 4996)
3876+
# pragma warning(push)
3877+
# pragma warning(disable : 4996)
3878+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3879+
# pragma clang diagnostic push
3880+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
38683881
#endif
38693882
template <boost::multiprecision::expression_template_option ExpressionTemplates>
38703883
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_int, ExpressionTemplates> >::has_denorm;
38713884
#ifdef _MSC_VER
38723885
#pragma warning(pop)
3886+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3887+
# pragma clang diagnostic pop
38733888
#endif
38743889
template <boost::multiprecision::expression_template_option ExpressionTemplates>
38753890
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_int, ExpressionTemplates> >::has_denorm_loss;
@@ -3978,13 +3993,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
39783993
template <boost::multiprecision::expression_template_option ExpressionTemplates>
39793994
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_rational, ExpressionTemplates> >::has_signaling_NaN;
39803995
#ifdef _MSC_VER
3981-
#pragma warning(push)
3982-
#pragma warning(disable : 4996)
3996+
# pragma warning(push)
3997+
# pragma warning(disable : 4996)
3998+
#elif (defined(__clang__) && (__clang_major__ >= 17))
3999+
# pragma clang diagnostic push
4000+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
39834001
#endif
39844002
template <boost::multiprecision::expression_template_option ExpressionTemplates>
39854003
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_rational, ExpressionTemplates> >::has_denorm;
39864004
#ifdef _MSC_VER
39874005
#pragma warning(pop)
4006+
#elif (defined(__clang__) && (__clang_major__ >= 17))
4007+
# pragma clang diagnostic pop
39884008
#endif
39894009
template <boost::multiprecision::expression_template_option ExpressionTemplates>
39904010
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_rational, ExpressionTemplates> >::has_denorm_loss;

0 commit comments

Comments
 (0)