[llvm] [ADT] Specialize ValueIsPresent for PointerUnion (PR #121847)

Jakub Kuderski via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 8 07:58:09 PST 2025


================
@@ -259,6 +259,17 @@ struct CastInfo<To, const PointerUnion<PTs...>>
                                           CastInfo<To, PointerUnion<PTs...>>> {
 };
 
+// The default implementation of isPresent() for nullable types returns true
+// if the active member is not the first one, even if its value is nullptr.
+// Override the default behavior to return false for all possible null values.
+template <typename... PTs>
+struct ValueIsPresent<PointerUnion<PTs...>,
+                      std::enable_if_t<IsNullable<PointerUnion<PTs...>>>> {
----------------
kuhar wrote:

Another way to handle this would be to change the main `ValueIsPresent` for nullable types to cast to bool instead, or introduce some traits for nullable types that would tell you how to check for null values that you can specialize for PointerUnion.

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


More information about the llvm-commits mailing list