[llvm] [STLForwardCompat] Improve category handling in transformOptional (PR #149539)

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 18 10:04:09 PDT 2025


================
@@ -55,21 +55,13 @@ using type_identity_t // NOLINT(readability-identifier-naming)
 
 // TODO: Remove this in favor of std::optional<T>::transform once we switch to
 // C++23.
-template <typename T, typename Function>
-auto transformOptional(const std::optional<T> &O, const Function &F)
-    -> std::optional<decltype(F(*O))> {
-  if (O)
-    return F(*O);
-  return std::nullopt;
-}
-
-// TODO: Remove this in favor of std::optional<T>::transform once we switch to
-// C++23.
-template <typename T, typename Function>
-auto transformOptional(std::optional<T> &&O, const Function &F)
-    -> std::optional<decltype(F(*std::move(O)))> {
-  if (O)
-    return F(*std::move(O));
+template <typename Optional, typename Function,
+          typename Value = typename llvm::remove_cvref_t<Optional>::value_type>
+auto transformOptional(Optional &&O, Function &&F)
+    -> std::optional<std::invoke_result_t<Function, Value>> {
----------------
kparzysz wrote:

Oh, I see what you meant.  Sure, let me untrail the return type.

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


More information about the llvm-commits mailing list