diff --git a/src/core/lib/promise/loop.h b/src/core/lib/promise/loop.h index 0833865ac51..ddf892b528f 100644 --- a/src/core/lib/promise/loop.h +++ b/src/core/lib/promise/loop.h @@ -54,9 +54,9 @@ struct LoopTraits>> { using Result = absl::StatusOr; static LoopCtl ToLoopCtl(absl::StatusOr> value) { if (!value.ok()) return value.status(); - const auto& inner = *value; + auto& inner = *value; if (absl::holds_alternative(inner)) return Continue{}; - return absl::get(inner); + return absl::get(std::move(inner)); } }; @@ -104,14 +104,14 @@ class Loop { if (auto* p = promise_result.value_if_ready()) { // - then if it's Continue, destroy the promise and recreate a new one // from our factory. - auto lc = LoopTraits::ToLoopCtl(*p); + auto lc = LoopTraits::ToLoopCtl(std::move(*p)); if (absl::holds_alternative(lc)) { Destruct(&promise_); Construct(&promise_, factory_.Make()); continue; } // - otherwise there's our result... return it out. - return absl::get(lc); + return absl::get(std::move(lc)); } else { // Otherwise the inner promise was pending, so we are pending. return Pending();