@@ -220,6 +220,10 @@ BOOST_DECIMAL_EXPORT class decimal128_t final
220220 friend constexpr auto read_payload (T value) noexcept
221221 BOOST_DECIMAL_REQUIRES_RETURN(detail::is_ieee_type_v, T, typename T::significand_type);
222222
223+ template <typename TargetDecimalType, bool is_snan>
224+ friend constexpr auto detail::write_payload (typename TargetDecimalType::significand_type payload_value)
225+ BOOST_DECIMAL_REQUIRES(detail::is_ieee_type_v, TargetDecimalType);
226+
223227 friend constexpr auto nan_conversion (const decimal128_t value) noexcept -> decimal128_t
224228 {
225229 constexpr auto convert_nan_mask {detail::d128_snan_mask ^ detail::d128_nan_mask};
@@ -555,59 +559,6 @@ BOOST_DECIMAL_EXPORT class decimal128_t final
555559 // 3.6.6 Quantize
556560 friend constexpr auto quantized128 (const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t;
557561
558- // Bit-wise operators
559- friend constexpr auto operator &(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t ;
560-
561- template <typename Integer>
562- friend constexpr auto operator &(decimal128_t lhs, Integer rhs) noexcept
563- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
564-
565- template <typename Integer>
566- friend constexpr auto operator &(Integer lhs, decimal128_t rhs) noexcept
567- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
568-
569- friend constexpr auto operator |(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t ;
570-
571- template <typename Integer>
572- friend constexpr auto operator |(decimal128_t lhs, Integer rhs) noexcept
573- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
574-
575- template <typename Integer>
576- friend constexpr auto operator |(Integer lhs, decimal128_t rhs) noexcept
577- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
578-
579- friend constexpr auto operator ^(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t ;
580-
581- template <typename Integer>
582- friend constexpr auto operator ^(decimal128_t lhs, Integer rhs) noexcept
583- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
584-
585- template <typename Integer>
586- friend constexpr auto operator ^(Integer lhs, decimal128_t rhs) noexcept
587- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
588-
589- friend constexpr auto operator <<(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t ;
590-
591- template <typename Integer>
592- friend constexpr auto operator <<(decimal128_t lhs, Integer rhs) noexcept
593- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
594-
595- template <typename Integer>
596- friend constexpr auto operator <<(Integer lhs, decimal128_t rhs) noexcept
597- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
598-
599- friend constexpr auto operator >>(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t ;
600-
601- template <typename Integer>
602- friend constexpr auto operator >>(decimal128_t lhs, Integer rhs) noexcept
603- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
604-
605- template <typename Integer>
606- friend constexpr auto operator >>(Integer lhs, decimal128_t rhs) noexcept
607- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t );
608-
609- friend constexpr auto operator ~(decimal128_t rhs) noexcept -> decimal128_t ;
610-
611562 // <cmath> functions that need to be friends
612563 template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
613564 friend constexpr auto frexp10 (T num, int * expptr) noexcept -> typename T::significand_type;
@@ -2171,106 +2122,6 @@ constexpr auto quantized128(const decimal128_t& lhs, const decimal128_t& rhs) no
21712122 return {lhs.full_significand (), rhs.biased_exponent (), lhs.isneg ()};
21722123}
21732124
2174- constexpr auto operator &(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t
2175- {
2176- return from_bits (lhs.bits_ & rhs.bits_ );
2177- }
2178-
2179- template <typename Integer>
2180- constexpr auto operator &(const decimal128_t lhs, const Integer rhs) noexcept
2181- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2182- {
2183- return from_bits (lhs.bits_ & static_cast <int128::uint128_t >(rhs));
2184- }
2185-
2186- template <typename Integer>
2187- constexpr auto operator &(const Integer lhs, const decimal128_t rhs) noexcept
2188- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2189- {
2190- return from_bits (static_cast <int128::uint128_t >(lhs) & rhs.bits_ );
2191- }
2192-
2193- constexpr auto operator |(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t
2194- {
2195- return from_bits (lhs.bits_ | rhs.bits_ );
2196- }
2197-
2198- template <typename Integer>
2199- constexpr auto operator |(const decimal128_t lhs, const Integer rhs) noexcept
2200- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2201- {
2202- return from_bits (lhs.bits_ | static_cast <int128::uint128_t >(rhs));
2203- }
2204-
2205- template <typename Integer>
2206- constexpr auto operator |(const Integer lhs, const decimal128_t rhs) noexcept
2207- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2208- {
2209- return from_bits (static_cast <int128::uint128_t >(lhs) | rhs.bits_ );
2210- }
2211-
2212- constexpr auto operator ^(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t
2213- {
2214- return from_bits (lhs.bits_ ^ rhs.bits_ );
2215- }
2216-
2217- template <typename Integer>
2218- constexpr auto operator ^(const decimal128_t lhs, const Integer rhs) noexcept
2219- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2220- {
2221- return from_bits (lhs.bits_ ^ static_cast <int128::uint128_t >(rhs));
2222- }
2223-
2224- template <typename Integer>
2225- constexpr auto operator ^(const Integer lhs, const decimal128_t rhs) noexcept
2226- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2227- {
2228- return from_bits (static_cast <int128::uint128_t >(lhs) ^ rhs.bits_ );
2229- }
2230-
2231- constexpr auto operator <<(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t
2232- {
2233- return from_bits (lhs.bits_ << static_cast <std::uint64_t >(rhs.bits_ ));
2234- }
2235-
2236- template <typename Integer>
2237- constexpr auto operator <<(const decimal128_t lhs, const Integer rhs) noexcept
2238- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2239- {
2240- return from_bits (lhs.bits_ << static_cast <std::uint64_t >(rhs));
2241- }
2242-
2243- template <typename Integer>
2244- constexpr auto operator <<(const Integer lhs, const decimal128_t rhs) noexcept
2245- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2246- {
2247- return from_bits (static_cast <int128::uint128_t >(lhs) << static_cast <std::uint64_t >(rhs.bits_ ));
2248- }
2249-
2250- constexpr auto operator >>(const decimal128_t & lhs, const decimal128_t & rhs) noexcept -> decimal128_t
2251- {
2252- return from_bits (lhs.bits_ >> static_cast <std::uint64_t >(rhs.bits_ ));
2253- }
2254-
2255- template <typename Integer>
2256- constexpr auto operator >>(const decimal128_t lhs, const Integer rhs) noexcept
2257- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2258- {
2259- return from_bits (lhs.bits_ >> static_cast <std::uint64_t >(rhs));
2260- }
2261-
2262- template <typename Integer>
2263- constexpr auto operator >>(const Integer lhs, const decimal128_t rhs) noexcept
2264- BOOST_DECIMAL_REQUIRES_RETURN (detail::is_integral_v, Integer, decimal128_t )
2265- {
2266- return from_bits (static_cast <int128::uint128_t >(lhs) >> static_cast <std::uint64_t >(rhs.bits_ ));
2267- }
2268-
2269- constexpr auto operator ~(const decimal128_t lhs) noexcept -> decimal128_t
2270- {
2271- return from_bits (~lhs.bits_ );
2272- }
2273-
22742125constexpr auto copysignd128 (decimal128_t mag, const decimal128_t sgn) noexcept -> decimal128_t
22752126{
22762127 mag.edit_sign (sgn.isneg ());
0 commit comments