diff --git a/stl/inc/xutility b/stl/inc/xutility index a7c611ce694..7f638ead249 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -5997,8 +5997,12 @@ _NODISCARD _CONSTEXPR_BIT_CAST bool _Is_inf(const _Ty _Xx) { // constexpr isinf( // FUNCTION TEMPLATE _Is_finite template , int> = 0> _NODISCARD _CONSTEXPR_BIT_CAST bool _Is_finite(const _Ty _Xx) { // constexpr isfinite() +#if defined(__LDBL_DIG__) && __LDBL_DIG__ == 18 + return _CSTD _LDtest(&_Xx) == _FINITE; +#else // ^^^ 80-bit long double (not supported by MSVC in general, see GH-1316) / 64-bit long double vvv using _Traits = _Floating_type_traits<_Ty>; return _Float_abs_bits(_Xx) < _Traits::_Shifted_exponent_mask; +#endif // 64-bit long double } // STRUCT _Nontrivial_dummy_type