[libc-commits] [libc] [llvm] [libc] Remove UB specializations of type traits for `BigInt` (PR #84035)
via libc-commits
libc-commits at lists.llvm.org
Wed Mar 6 08:20:33 PST 2024
================
@@ -51,8 +52,10 @@ LIBC_INLINE constexpr To bit_cast(const From &from) {
#endif // LIBC_HAS_BUILTIN(__builtin_bit_cast)
}
-template <typename T, typename = cpp::enable_if_t<cpp::is_unsigned_v<T>>>
-[[nodiscard]] LIBC_INLINE constexpr bool has_single_bit(T value) {
+template <typename T>
+[[nodiscard]] LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_unsigned_v<T>,
+ bool>
+has_single_bit(T value) {
----------------
lntue wrote:
Just a side question: Is there a simple way to make these template functions be like:
```
has_single_bit(T value) when sizeof(T) <= 8
has_single_bit(const T &value) when sizeof(T) > 8
```
Especially if this pattern can be applied to many functions easily somehow.
Last time I experimented with `DoubleDouble` and `DyadicFloat<128>` and it did provide measurable performance improvements.
https://github.com/llvm/llvm-project/pull/84035
More information about the libc-commits
mailing list