diff --git a/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp b/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp
index b61fbc4..68545a7 100644
--- a/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp
@@ -49,7 +49,7 @@
 template <class _Awaitable>
 void __co_await_constraint(_Awaitable&& __awaitable)
     requires requires {
-                 operator co_await(static_cast<_Awaitable&&>(__awaitable));
+                 operator co_await(static_cast<_Awaitable &&>(__awaitable));
              };
 #endif
 
@@ -57,7 +57,7 @@
 auto __get_awaiter(_Awaitable&& __awaitable, __ignore = {}) -> decltype(auto)
 {
     if constexpr (requires {
-                      static_cast<_Awaitable&&>(__awaitable)
+                      static_cast<_Awaitable &&>(__awaitable)
                           .operator co_await();
                   })
     {
@@ -66,7 +66,7 @@
     else if constexpr (requires {
 #if STDEXEC_MSVC()
                            __co_await_constraint(
-                               static_cast<_Awaitable&&>(__awaitable));
+                               static_cast<_Awaitable &&>(__awaitable));
 #else
         operator co_await(static_cast<_Awaitable&&>(__awaitable));
 #endif
@@ -85,13 +85,13 @@
     -> decltype(auto)
     requires requires {
                  __promise->await_transform(
-                     static_cast<_Awaitable&&>(__awaitable));
+                     static_cast<_Awaitable &&>(__awaitable));
              }
 {
     if constexpr (requires {
                       __promise
                           ->await_transform(
-                              static_cast<_Awaitable&&>(__awaitable))
+                              static_cast<_Awaitable &&>(__awaitable))
                           .operator co_await();
                   })
     {
@@ -102,7 +102,7 @@
     else if constexpr (requires {
 #if STDEXEC_MSVC()
                            __co_await_constraint(__promise->await_transform(
-                               static_cast<_Awaitable&&>(__awaitable)));
+                               static_cast<_Awaitable &&>(__awaitable)));
 #else
         operator co_await(__promise->await_transform(static_cast<_Awaitable&&>(__awaitable)));
 #endif
@@ -122,7 +122,7 @@
 concept __awaitable = //
     requires(_Awaitable&& __awaitable, _Promise*... __promise) {
         {
-            stdexec::__get_awaiter(static_cast<_Awaitable&&>(__awaitable),
+            stdexec::__get_awaiter(static_cast<_Awaitable &&>(__awaitable),
                                    __promise...)
         } -> __awaiter<_Promise...>;
     };
diff --git a/include/sdbusplus/async/stdexec/__detail/__concepts.hpp b/include/sdbusplus/async/stdexec/__detail/__concepts.hpp
index e31f7ba..5ea9516 100644
--- a/include/sdbusplus/async/stdexec/__detail/__concepts.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__concepts.hpp
@@ -41,15 +41,15 @@
 {
 //////////////////////////////////////////////////////////////////////////////////////////////////
 template <class _Fun, class... _As>
-concept __callable =                                             //
-    requires(_Fun&& __fun, _As&&... __as) {                      //
-        static_cast<_Fun&&>(__fun)(static_cast<_As&&>(__as)...); //
+concept __callable =                                               //
+    requires(_Fun&& __fun, _As&&... __as) {                        //
+        static_cast<_Fun &&>(__fun)(static_cast<_As &&>(__as)...); //
     };
 template <class _Fun, class... _As>
 concept __nothrow_callable =    //
     __callable<_Fun, _As...> && //
     requires(_Fun&& __fun, _As&&... __as) {
-        { static_cast<_Fun&&>(__fun)(static_cast<_As&&>(__as)...) } noexcept;
+        { static_cast<_Fun &&>(__fun)(static_cast<_As &&>(__as)...) } noexcept;
     };
 
 //////////////////////////////////////////////////////////////////////////////////////////////////
@@ -190,7 +190,7 @@
     //   const std::remove_reference_t<_LHS>&,
     //   const std::remove_reference_t<_RHS>&> &&
     requires(_LHS __lhs, _RHS&& __rhs) {
-        { __lhs = static_cast<_RHS&&>(__rhs) } -> same_as<_LHS>;
+        { __lhs = static_cast<_RHS &&>(__rhs) } -> same_as<_LHS>;
     };
 
 namespace __swap
@@ -200,7 +200,7 @@
 template <class _Ty, class _Uy>
 concept swappable_with =             //
     requires(_Ty&& __t, _Uy&& __u) { //
-        swap(static_cast<_Ty&&>(__t), static_cast<_Uy&&>(__u));
+        swap(static_cast<_Ty &&>(__t), static_cast<_Uy &&>(__u));
     };
 
 inline constexpr const auto __fn =                               //
@@ -273,7 +273,7 @@
 concept __nothrow_movable_value = //
     __movable_value<_Ty> &&       //
     requires(_Ty&& __t) {
-        { __decay_t<_Ty>{__decay_t<_Ty>{static_cast<_Ty&&>(__t)}} } noexcept;
+        { __decay_t<_Ty>{__decay_t<_Ty>{static_cast<_Ty &&>(__t)}} } noexcept;
     };
 
 template <class _Ty, class... _As>
diff --git a/include/sdbusplus/async/stdexec/__detail/__domain.hpp b/include/sdbusplus/async/stdexec/__detail/__domain.hpp
index 0798479..bfe1e72 100644
--- a/include/sdbusplus/async/stdexec/__detail/__domain.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__domain.hpp
@@ -58,7 +58,7 @@
 template <class _DomainOrTag, class _Sender, class... _Env>
 concept __has_transform_sender =
     requires(_DomainOrTag __tag, _Sender&& __sender, const _Env&... __env) {
-        __tag.transform_sender(static_cast<_Sender&&>(__sender), __env...);
+        __tag.transform_sender(static_cast<_Sender &&>(__sender), __env...);
     };
 
 template <class _Sender, class... _Env>
@@ -69,8 +69,8 @@
 template <class _Type, class _Sender, class _Env>
 concept __has_transform_env =
     requires(_Type __obj, _Sender&& __sender, _Env&& __env) {
-        __obj.transform_env(static_cast<_Sender&&>(__sender),
-                            static_cast<_Env&&>(__env));
+        __obj.transform_env(static_cast<_Sender &&>(__sender),
+                            static_cast<_Env &&>(__env));
     };
 
 template <class _Sender, class _Env>
@@ -81,7 +81,7 @@
 template <class _DomainOrTag, class... _Args>
 concept __has_apply_sender =
     requires(_DomainOrTag __tag, _Args&&... __args) {
-        __tag.apply_sender(static_cast<_Args&&>(__args)...);
+        __tag.apply_sender(static_cast<_Args &&>(__args)...);
     };
 
 template <class _Sender>
diff --git a/include/sdbusplus/async/stdexec/__detail/__ranges.hpp b/include/sdbusplus/async/stdexec/__detail/__ranges.hpp
index e98513e..f584013 100644
--- a/include/sdbusplus/async/stdexec/__detail/__ranges.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__ranges.hpp
@@ -46,21 +46,21 @@
 
 template <class _Ty>
 concept __has_member_begin =
-    requires(_Ty&& __v) { static_cast<_Ty&&>(__v).begin(); };
+    requires(_Ty&& __v) { static_cast<_Ty &&>(__v).begin(); };
 
 template <class _Ty>
 concept __has_free_begin =
     __has_member_begin<_Ty> ||
-    requires(_Ty&& __v) { begin((static_cast<_Ty&&>(__v))); };
+    requires(_Ty&& __v) { begin((static_cast<_Ty &&>(__v))); };
 
 template <class _Ty>
 concept __has_member_end =
-    requires(_Ty&& __v) { static_cast<_Ty&&>(__v).end(); };
+    requires(_Ty&& __v) { static_cast<_Ty &&>(__v).end(); };
 
 template <class _Ty>
 concept __has_free_end =
     __has_member_end<_Ty> ||
-    requires(_Ty&& __v) { end((static_cast<_Ty&&>(__v))); };
+    requires(_Ty&& __v) { end((static_cast<_Ty &&>(__v))); };
 
 struct __begin_t
 {
diff --git a/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp b/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp
index bb0c4aa..1883ce3 100644
--- a/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp
@@ -67,7 +67,7 @@
 template <class _Scheduler>
 concept __has_schedule = //
     requires(_Scheduler&& __sched) {
-        { schedule(static_cast<_Scheduler&&>(__sched)) } -> sender;
+        { schedule(static_cast<_Scheduler &&>(__sched)) } -> sender;
     };
 
 template <class _Scheduler>
@@ -75,7 +75,7 @@
     requires(_Scheduler&& __sched) {
         {
             stdexec::__decay_copy(get_completion_scheduler<set_value_t>(
-                get_env(schedule(static_cast<_Scheduler&&>(__sched)))))
+                get_env(schedule(static_cast<_Scheduler &&>(__sched)))))
         } -> same_as<__decay_t<_Scheduler>>;
     };
 
diff --git a/include/sdbusplus/async/stdexec/__detail/__senders.hpp b/include/sdbusplus/async/stdexec/__detail/__senders.hpp
index 16218cf..5de057f 100644
--- a/include/sdbusplus/async/stdexec/__detail/__senders.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__senders.hpp
@@ -379,8 +379,8 @@
     && sender_in<_Sender, env_of_t<_Receiver>> //
     && __receiver_from<_Receiver, _Sender>     //
     && requires(_Sender&& __sndr, _Receiver&& __rcvr) {
-           connect(static_cast<_Sender&&>(__sndr),
-                   static_cast<_Receiver&&>(__rcvr));
+           connect(static_cast<_Sender &&>(__sndr),
+                   static_cast<_Receiver &&>(__rcvr));
        };
 
 template <class _Tag, class... _Args>
diff --git a/include/sdbusplus/async/stdexec/__detail/__senders_core.hpp b/include/sdbusplus/async/stdexec/__detail/__senders_core.hpp
index e711b06..3188f05 100644
--- a/include/sdbusplus/async/stdexec/__detail/__senders_core.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__senders_core.hpp
@@ -61,8 +61,8 @@
     && sender<_Sender>     //
     && requires(_Sender&& __sndr, _Env&&... __env) {
            {
-               get_completion_signatures(static_cast<_Sender&&>(__sndr),
-                                         static_cast<_Env&&>(__env)...)
+               get_completion_signatures(static_cast<_Sender &&>(__sndr),
+                                         static_cast<_Env &&>(__env)...)
            } -> __valid_completion_signatures;
        };
 } // namespace stdexec
diff --git a/include/sdbusplus/async/stdexec/__detail/__tag_invoke.hpp b/include/sdbusplus/async/stdexec/__detail/__tag_invoke.hpp
index 1c41200..593a607 100644
--- a/include/sdbusplus/async/stdexec/__detail/__tag_invoke.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__tag_invoke.hpp
@@ -26,7 +26,7 @@
 template <class _Fun, class... _As>
 concept invocable = //
     requires(_Fun&& __f, _As&&... __as) {
-        std::invoke(static_cast<_Fun&&>(__f), static_cast<_As&&>(__as)...);
+        std::invoke(static_cast<_Fun &&>(__f), static_cast<_As &&>(__as)...);
     };
 #endif
 } // namespace stdexec::__std_concepts
@@ -67,15 +67,16 @@
 template <class _Tag, class... _Args>
 concept tag_invocable = //
     requires(_Tag __tag, _Args&&... __args) {
-        tag_invoke(static_cast<_Tag&&>(__tag), static_cast<_Args&&>(__args)...);
+        tag_invoke(static_cast<_Tag &&>(__tag),
+                   static_cast<_Args &&>(__args)...);
     };
 
 template <class _Ret, class _Tag, class... _Args>
 concept __tag_invocable_r = //
     requires(_Tag __tag, _Args&&... __args) {
         {
-            static_cast<_Ret>(tag_invoke(static_cast<_Tag&&>(__tag),
-                                         static_cast<_Args&&>(__args)...))
+            static_cast<_Ret>(tag_invoke(static_cast<_Tag &&>(__tag),
+                                         static_cast<_Args &&>(__args)...))
         };
     };
 
@@ -85,8 +86,8 @@
     tag_invocable<_Tag, _Args...> && //
     requires(_Tag __tag, _Args&&... __args) {
         {
-            tag_invoke(static_cast<_Tag&&>(__tag),
-                       static_cast<_Args&&>(__args)...)
+            tag_invoke(static_cast<_Tag &&>(__tag),
+                       static_cast<_Args &&>(__args)...)
         } noexcept;
     };
 
diff --git a/include/sdbusplus/async/stdexec/any_sender_of.hpp b/include/sdbusplus/async/stdexec/any_sender_of.hpp
index be2e87e..b009708 100644
--- a/include/sdbusplus/async/stdexec/any_sender_of.hpp
+++ b/include/sdbusplus/async/stdexec/any_sender_of.hpp
@@ -538,15 +538,16 @@
         (*__other.__vtable_)(__copy_construct, this, __other);
     }
 
-    auto operator=(const __t& __other)
-        -> __t& requires(_Copyable) {
-                    if (&__other != this)
-                    {
-                        __t tmp(__other);
-                        *this = std::move(tmp);
-                    }
-                    return *this;
-                }
+    auto operator=(const __t& __other) -> __t&
+        requires(_Copyable)
+    {
+        if (&__other != this)
+        {
+            __t tmp(__other);
+            *this = std::move(tmp);
+        }
+        return *this;
+    }
 
     __t(__t&& __other) noexcept
     {
diff --git a/include/sdbusplus/async/stdexec/functional.hpp b/include/sdbusplus/async/stdexec/functional.hpp
index b39bbaa..6b47e4f 100644
--- a/include/sdbusplus/async/stdexec/functional.hpp
+++ b/include/sdbusplus/async/stdexec/functional.hpp
@@ -241,7 +241,7 @@
 template <class _Fun, class... _As>
 concept __invocable = //
     requires(_Fun&& __f, _As&&... __as) {
-        __invoke(static_cast<_Fun&&>(__f), static_cast<_As&&>(__as)...);
+        __invoke(static_cast<_Fun &&>(__f), static_cast<_As &&>(__as)...);
     };
 
 template <class _Fun, class... _As>
@@ -249,7 +249,7 @@
     __invocable<_Fun, _As...> && //
     requires(_Fun&& __f, _As&&... __as) {
         {
-            __invoke(static_cast<_Fun&&>(__f), static_cast<_As&&>(__as)...)
+            __invoke(static_cast<_Fun &&>(__f), static_cast<_As &&>(__as)...)
         } noexcept;
     };
 
diff --git a/include/sdbusplus/async/stdexec/sequence_senders.hpp b/include/sdbusplus/async/stdexec/sequence_senders.hpp
index 012779f..47dd728 100644
--- a/include/sdbusplus/async/stdexec/sequence_senders.hpp
+++ b/include/sdbusplus/async/stdexec/sequence_senders.hpp
@@ -247,8 +247,8 @@
 template <class _Sender, class... _Env>
 concept has_sequence_item_types =
     requires(_Sender&& __sndr, _Env&&... __env) {
-        get_item_types(static_cast<_Sender&&>(__sndr),
-                       static_cast<_Env&&>(__env)...);
+        get_item_types(static_cast<_Sender &&>(__sndr),
+                       static_cast<_Env &&>(__env)...);
     };
 
 template <class _Sender, class... _Env>
@@ -499,8 +499,8 @@
 concept sequence_sender_to =
     sequence_receiver_from<_Receiver, _Sender> && //
     requires(_Sender&& __sndr, _Receiver&& __rcvr) {
-        subscribe(static_cast<_Sender&&>(__sndr),
-                  static_cast<_Receiver&&>(__rcvr));
+        subscribe(static_cast<_Sender &&>(__sndr),
+                  static_cast<_Receiver &&>(__rcvr));
     };
 
 template <class _Receiver>
diff --git a/include/sdbusplus/async/stdexec/task.hpp b/include/sdbusplus/async/stdexec/task.hpp
index 472d57a..5e3f94f 100644
--- a/include/sdbusplus/async/stdexec/task.hpp
+++ b/include/sdbusplus/async/stdexec/task.hpp
@@ -133,10 +133,11 @@
         __scheduler_{static_cast<_Scheduler&&>(__scheduler)}
     {}
 
-    auto query(get_scheduler_t) const noexcept
-        -> const __any_scheduler& requires(__with_scheduler) {
-                                      return __scheduler_;
-                                  }
+    auto query(get_scheduler_t) const noexcept -> const __any_scheduler&
+        requires(__with_scheduler)
+    {
+        return __scheduler_;
+    }
 
     auto query(get_stop_token_t) const noexcept -> inplace_stop_token
     {
