diff --git a/libstdc++-v3/include/std/generator b/libstdc++-v3/include/std/generator
index bba85bd0aa4ebebfb516aa35f6cb01740e08298c..3a19d535ef866809da5538116de42da97cc0f744 100644
--- a/libstdc++-v3/include/std/generator
+++ b/libstdc++-v3/include/std/generator
@@ -144,7 +144,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	  requires (is_rvalue_reference_v<_Yielded>
 		    && constructible_from<_Yielded_decvref,
 		    const _Yielded_deref&>)
-	{ return _Copy_awaiter(__val, _M_bottom_value()); }
+	{ return _Copy_awaiter(_Yielded_decvref(__val), _M_bottom_value()); }
 
 	template<typename _R2, typename _V2, typename _A2, typename _U2>
 	requires std::same_as<_Yield2_t<_R2, _V2>, _Yielded>
diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/pr118022.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/pr118022.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d8915bb38dc42c3020f8f3d200ee5a3b1303113e
--- /dev/null
+++ b/libstdc++-v3/testsuite/24_iterators/range_generators/pr118022.cc
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++23 } }
+#include <generator>
+
+struct O {
+  O() = default;
+  explicit O(const O&) = default;
+};
+
+std::generator<O&&> gen() {
+  const O o;
+  co_yield o;
+}
+
+int
+main()
+{}