@@ -38,6 +38,48 @@ _LIBCPP_NODISCARD inline
38
38
return __builtin_signbit (__x);
39
39
}
40
40
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
+
41
83
template <class _A1 , __enable_if_t <is_integral<_A1>::value && is_signed<_A1>::value, int > = 0 >
42
84
_LIBCPP_NODISCARD inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool signbit (_A1 __x) _NOEXCEPT {
43
85
return __x < 0 ;
0 commit comments