Skip to content

Commit 7041ead

Browse files
committed
Provide floating point overloads for std::signbit
1 parent e265720 commit 7041ead

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

libcxx/include/__math/traits.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,48 @@ _LIBCPP_NODISCARD inline
3838
return __builtin_signbit(__x);
3939
}
4040

41+
_LIBCPP_NODISCARD inline
42+
// TODO(LLVM 22): Remove `__has_constexpr_builtin` conditional once support for Clang 19 is dropped.
43+
#if __has_constexpr_builtin(__builtin_signbit)
44+
_LIBCPP_CONSTEXPR_SINCE_CXX23
45+
#endif
46+
_LIBCPP_HIDE_FROM_ABI
47+
#ifdef _LIBCPP_PREFERRED_OVERLOAD
48+
_LIBCPP_PREFERRED_OVERLOAD
49+
#endif
50+
bool
51+
signbit(float __x) _NOEXCEPT {
52+
return __builtin_signbit(__x);
53+
}
54+
55+
_LIBCPP_NODISCARD inline
56+
// TODO(LLVM 22): Remove `__has_constexpr_builtin` conditional once support for Clang 19 is dropped.
57+
#if __has_constexpr_builtin(__builtin_signbit)
58+
_LIBCPP_CONSTEXPR_SINCE_CXX23
59+
#endif
60+
_LIBCPP_HIDE_FROM_ABI
61+
#ifdef _LIBCPP_PREFERRED_OVERLOAD
62+
_LIBCPP_PREFERRED_OVERLOAD
63+
#endif
64+
bool
65+
signbit(double __x) _NOEXCEPT {
66+
return __builtin_signbit(__x);
67+
}
68+
69+
_LIBCPP_NODISCARD inline
70+
// TODO(LLVM 22): Remove `__has_constexpr_builtin` conditional once support for Clang 19 is dropped.
71+
#if __has_constexpr_builtin(__builtin_signbit)
72+
_LIBCPP_CONSTEXPR_SINCE_CXX23
73+
#endif
74+
_LIBCPP_HIDE_FROM_ABI
75+
#ifdef _LIBCPP_PREFERRED_OVERLOAD
76+
_LIBCPP_PREFERRED_OVERLOAD
77+
#endif
78+
bool
79+
signbit(long double __x) _NOEXCEPT {
80+
return __builtin_signbit(__x);
81+
}
82+
4183
template <class _A1, __enable_if_t<is_integral<_A1>::value && is_signed<_A1>::value, int> = 0>
4284
_LIBCPP_NODISCARD inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool signbit(_A1 __x) _NOEXCEPT {
4385
return __x < 0;

0 commit comments

Comments
 (0)