[libc-commits] [libc] [libc] Make BigInt bit_cast-able to compatible types (PR #75063)
Guillaume Chatelet via libc-commits
libc-commits at lists.llvm.org
Tue Dec 19 04:42:49 PST 2023
================
@@ -952,6 +952,35 @@ struct make_signed<UInt<Bits>> : type_identity<Int<Bits>> {
"Number of bits in Int should be a multiple of 64.");
};
+namespace internal {
+template <typename T> struct is_custom_uint : cpp::false_type {};
+template <size_t Bits> struct is_custom_uint<UInt<Bits>> : cpp::true_type {};
+} // namespace internal
+
+// bit_cast to UInt
+template <typename To, typename From,
+ typename = cpp::enable_if_t<internal::is_custom_uint<To>::value>,
+ typename = cpp::enable_if_t<sizeof(To) == sizeof(From)>,
+ typename = cpp::enable_if_t<cpp::is_trivially_copyable<From>::value>>
----------------
gchatelet wrote:
So this was not possible to use a single `typename` for function discrimination. I added an extended explanation. Let me know if it works for you.
https://github.com/llvm/llvm-project/pull/75063
More information about the libc-commits
mailing list