Use numext::signbit instead of std::signbit, which is not defined for bfloat16.
diff --git a/test/array_cwise.cpp b/test/array_cwise.cpp
index bc72165..af8a1ef 100644
--- a/test/array_cwise.cpp
+++ b/test/array_cwise.cpp
@@ -287,27 +287,9 @@
 }  // namespace internal
 }  // namespace Eigen
 
-template <typename T, bool IsInteger = NumTraits<T>::IsInteger>
-struct ref_signbit_func_impl {
-    static bool run(const T& x) { return std::signbit(x); }
-};
-template <typename T>
-struct ref_signbit_func_impl<T, true> {
-    // MSVC (perhaps others) does not have a std::signbit overload for integers
-    static bool run(const T& x) { return x < T(0); }
-};
-template <typename T>
-bool ref_signbit_func(const T& x) {
-    return ref_signbit_func_impl<T>::run(x);
-}
 
 template <typename Scalar>
 void signbit_test() {
-  Scalar true_mask;
-  std::memset(static_cast<void*>(&true_mask), 0xff, sizeof(Scalar));
-  Scalar false_mask;
-  std::memset(static_cast<void*>(&false_mask), 0x00, sizeof(Scalar));
-
   const size_t size = 100 * internal::packet_traits<Scalar>::size;
   ArrayX<Scalar> x(size), y(size);
   x.setRandom();
@@ -320,7 +302,7 @@
 
   bool all_pass = true;
   for (size_t i = 0; i < size; i++) {
-    const Scalar ref_val = ref_signbit_func(x(i)) ? true_mask : false_mask;
+    const Scalar ref_val = numext::signbit(x(i));
     bool not_same = internal::predux_any(internal::bitwise_helper<Scalar>::bitwise_xor(ref_val, y(i)));
     if (not_same) std::cout << "signbit(" << x(i) << ") != " << y(i) << "\n";
     all_pass = all_pass && !not_same;