@@ -790,12 +790,6 @@ protected:
790
790
typename _Swc_Traits::_Cy_t _Carry;
791
791
};
792
792
793
- template <class _Ty, size_t _Sx, size_t _Rx, class _Swc_Traits>
794
- const size_t _Swc_base<_Ty, _Sx, _Rx, _Swc_Traits>::short_lag;
795
-
796
- template <class _Ty, size_t _Sx, size_t _Rx, class _Swc_Traits>
797
- const size_t _Swc_base<_Ty, _Sx, _Rx, _Swc_Traits>::long_lag;
798
-
799
793
template <class _Ty, _Ty _Mx, size_t _Nw>
800
794
struct _Swc_traits { // traits for subtract_with_carry generator
801
795
using _Cy_t = int;
@@ -1005,16 +999,28 @@ public:
1005
999
};
1006
1000
1007
1001
#if _HAS_TR1_NAMESPACE
1002
+ _CONSTEVAL double _Cx_exp2(const int _Exp) noexcept {
1003
+ double _Ret = 1.0;
1004
+ for (int _Count = _Exp; _Count > 0; --_Count) {
1005
+ _Ret *= 2.0;
1006
+ }
1007
+ for (int _Count = _Exp; _Count < 0; ++_Count) {
1008
+ _Ret *= 0.5;
1009
+ }
1010
+
1011
+ return _Ret;
1012
+ }
1013
+
1008
1014
template <class _Ty, size_t _Wx, size_t _Rx>
1009
1015
struct _Swc_01_traits { // traits for subtract_with_carry_01 generator
1010
1016
using _Cy_t = _Ty;
1011
1017
using _UCy_t = _Ty;
1012
1018
using _Mod_t = _Ty;
1013
1019
using _Seed_t = unsigned int;
1014
1020
1015
- static const _Cy_t _Cy;
1016
- static const _Mod_t _Mod;
1017
- static const _Ty _Max;
1021
+ static constexpr _Cy_t _Cy = static_cast<_Cy_t>(_Cx_exp2(static_cast<int>(-static_cast<ptrdiff_t>(_Wx)))) ;
1022
+ static constexpr _Mod_t _Mod = 1 ;
1023
+ static constexpr _Ty _Max = 1 ;
1018
1024
static constexpr int _Nwords = (_Wx + 31) / 32;
1019
1025
1020
1026
template <class _Gen>
@@ -1058,24 +1064,10 @@ struct _Swc_01_traits { // traits for subtract_with_carry_01 generator
1058
1064
}
1059
1065
1060
1066
private:
1061
- static const _Ty _Scale1;
1067
+ static constexpr _Ty _Scale1 = static_cast<_Ty>(_Cx_exp2(_Wx % 32)) ;
1062
1068
static constexpr unsigned long _Mask = ~((~0UL) << (_Wx % 32));
1063
1069
};
1064
1070
1065
- template <class _Ty, size_t _Wx, size_t _Rx>
1066
- const typename _Swc_01_traits<_Ty, _Wx, _Rx>::_Cy_t
1067
- _Swc_01_traits<_Ty, _Wx, _Rx>::_Cy = static_cast<typename _Swc_01_traits<_Ty, _Wx, _Rx>::_Cy_t>(
1068
- _CSTD ldexp(1.0, static_cast<int>(-static_cast<ptrdiff_t>(_Wx))));
1069
-
1070
- template <class _Ty, size_t _Wx, size_t _Rx>
1071
- const typename _Swc_01_traits<_Ty, _Wx, _Rx>::_Mod_t _Swc_01_traits<_Ty, _Wx, _Rx>::_Mod = 1;
1072
-
1073
- template <class _Ty, size_t _Wx, size_t _Rx>
1074
- const _Ty _Swc_01_traits<_Ty, _Wx, _Rx>::_Max = 1;
1075
-
1076
- template <class _Ty, size_t _Wx, size_t _Rx>
1077
- const _Ty _Swc_01_traits<_Ty, _Wx, _Rx>::_Scale1 = static_cast<_Ty>(_CSTD ldexp(1.0, _Wx % 32));
1078
-
1079
1071
template <class _Ty, size_t _Wx, size_t _Sx, size_t _Rx>
1080
1072
class _DEPRECATE_TR1_NAMESPACE subtract_with_carry_01
1081
1073
: public _Swc_base<_Ty, _Sx, _Rx, _Swc_01_traits<_Ty, _Wx, _Rx>> { // subtract_with_carry_01 generator
@@ -1091,12 +1083,6 @@ public:
1091
1083
template <class _Gen, _Enable_if_seed_seq_t<_Gen, subtract_with_carry_01> = 0>
1092
1084
subtract_with_carry_01(_Gen& _Gx) : _Mybase(_Gx) {}
1093
1085
};
1094
-
1095
- _STL_DISABLE_DEPRECATED_WARNING
1096
- template <class _Ty, size_t _Wx, size_t _Sx, size_t _Rx>
1097
- const size_t subtract_with_carry_01<_Ty, _Wx, _Sx, _Rx>::word_size;
1098
- _STL_RESTORE_DEPRECATED_WARNING
1099
-
1100
1086
#endif // _HAS_TR1_NAMESPACE
1101
1087
1102
1088
template <class _Ty, int _Wx, int _Nx, int _Mx, int _Rx, _Ty _Px, int _Ux, int _Sx, _Ty _Bx, int _Tx, _Ty _Cx, int _Lx>
@@ -1443,12 +1429,6 @@ private:
1443
1429
int _Nx;
1444
1430
};
1445
1431
1446
- template <class _Engine, int _Px, int _Rx>
1447
- const int discard_block<_Engine, _Px, _Rx>::block_size;
1448
-
1449
- template <class _Engine, int _Px, int _Rx>
1450
- const int discard_block<_Engine, _Px, _Rx>::used_block;
1451
-
1452
1432
template <class _Engine, size_t _Px, size_t _Rx>
1453
1433
class discard_block_engine : public discard_block<_Engine, _Px, _Rx> { // discard_block_engine compound engine
1454
1434
public:
0 commit comments