[libc-commits] [libc] Added support of fixed-points in ``is_signed`` and ``is_unsigned``. (PR #133371)

via libc-commits libc-commits at lists.llvm.org
Thu Mar 27 22:50:36 PDT 2025


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff 96e5ee23a76136851a52f48c780249e2a86a5ce9 d967f431f9382ab80dc034450251ea8c32fa1537 --extensions h,cpp -- libc/src/__support/CPP/type_traits/is_signed.h libc/src/__support/CPP/type_traits/is_unsigned.h libc/test/src/__support/CPP/type_traits_test.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/libc/src/__support/CPP/type_traits/is_signed.h b/libc/src/__support/CPP/type_traits/is_signed.h
index 699b017eda..57a37bdfb0 100644
--- a/libc/src/__support/CPP/type_traits/is_signed.h
+++ b/libc/src/__support/CPP/type_traits/is_signed.h
@@ -20,69 +20,58 @@ namespace cpp {
 
 // Primary template: handles arithmetic and signed fixed-point types
 template <typename T>
-struct is_signed : bool_constant<((is_fixed_point_v<T> || is_arithmetic_v<T>) && (T(-1) < T(0)))> {
+struct is_signed : bool_constant<((is_fixed_point_v<T> || is_arithmetic_v<T>) &&
+                                  (T(-1) < T(0)))> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
 
 // Specializations for unsigned fixed-point types
-template <>
-struct is_signed<unsigned short fract> : bool_constant<false> {
+template <> struct is_signed<unsigned short fract> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned fract> : bool_constant<false> {
+template <> struct is_signed<unsigned fract> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned long fract> : bool_constant<false> {
+template <> struct is_signed<unsigned long fract> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned short accum> : bool_constant<false> {
+template <> struct is_signed<unsigned short accum> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned accum> : bool_constant<false> {
+template <> struct is_signed<unsigned accum> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned long accum> : bool_constant<false> {
+template <> struct is_signed<unsigned long accum> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned short sat fract> : bool_constant<false> {
+template <> struct is_signed<unsigned short sat fract> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned sat fract> : bool_constant<false> {
+template <> struct is_signed<unsigned sat fract> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned long sat fract> : bool_constant<false> {
+template <> struct is_signed<unsigned long sat fract> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned short sat accum> : bool_constant<false> {
+template <> struct is_signed<unsigned short sat accum> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned sat accum> : bool_constant<false> {
+template <> struct is_signed<unsigned sat accum> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
-template <>
-struct is_signed<unsigned long sat accum> : bool_constant<false> {
+template <> struct is_signed<unsigned long sat accum> : bool_constant<false> {
   LIBC_INLINE constexpr operator bool() const { return is_signed::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_signed::value; }
 };
diff --git a/libc/src/__support/CPP/type_traits/is_unsigned.h b/libc/src/__support/CPP/type_traits/is_unsigned.h
index 58cd3f0f59..7d70e6fb69 100644
--- a/libc/src/__support/CPP/type_traits/is_unsigned.h
+++ b/libc/src/__support/CPP/type_traits/is_unsigned.h
@@ -20,69 +20,59 @@ namespace cpp {
 
 // Primary template: handles arithmetic and signed fixed-point types
 template <typename T>
-struct is_unsigned : bool_constant<((is_fixed_point_v<T> || is_arithmetic_v<T>) && (T(-1) > T(0)))> {
+struct is_unsigned
+    : bool_constant<((is_fixed_point_v<T> || is_arithmetic_v<T>) &&
+                     (T(-1) > T(0)))> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
 
 // Specializations for unsigned fixed-point types
-template <>
-struct is_unsigned<unsigned short fract> : bool_constant<true> {
+template <> struct is_unsigned<unsigned short fract> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned fract> : bool_constant<true> {
+template <> struct is_unsigned<unsigned fract> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned long fract> : bool_constant<true> {
+template <> struct is_unsigned<unsigned long fract> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned short accum> : bool_constant<true> {
+template <> struct is_unsigned<unsigned short accum> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned accum> : bool_constant<true> {
+template <> struct is_unsigned<unsigned accum> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned long accum> : bool_constant<true> {
+template <> struct is_unsigned<unsigned long accum> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned short sat fract> : bool_constant<true> {
+template <> struct is_unsigned<unsigned short sat fract> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned sat fract> : bool_constant<true> {
+template <> struct is_unsigned<unsigned sat fract> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned long sat fract> : bool_constant<true> {
+template <> struct is_unsigned<unsigned long sat fract> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned short sat accum> : bool_constant<true> {
+template <> struct is_unsigned<unsigned short sat accum> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned sat accum> : bool_constant<true> {
+template <> struct is_unsigned<unsigned sat accum> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };
-template <>
-struct is_unsigned<unsigned long sat accum> : bool_constant<true> {
+template <> struct is_unsigned<unsigned long sat accum> : bool_constant<true> {
   LIBC_INLINE constexpr operator bool() const { return is_unsigned::value; }
   LIBC_INLINE constexpr bool operator()() const { return is_unsigned::value; }
 };

``````````

</details>


https://github.com/llvm/llvm-project/pull/133371


More information about the libc-commits mailing list