diff --git a/.clang-format b/.clang-format
index 28e3328..a75a2c2 100644
--- a/.clang-format
+++ b/.clang-format
@@ -17,9 +17,7 @@
 AllowShortIfStatementsOnASingleLine: Never
 AllowShortLambdasOnASingleLine: true
 AllowShortLoopsOnASingleLine: false
-AlwaysBreakAfterReturnType: None
 AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: Yes
 BinPackArguments: true
 BinPackParameters: true
 BitFieldColonSpacing: None
@@ -43,12 +41,14 @@
   SplitEmptyRecord:     false
   SplitEmptyNamespace:  false
 BreakAfterAttributes: Never
+BreakAfterReturnType: Automatic
 BreakBeforeBinaryOperators: None
 BreakBeforeBraces: Custom
 BreakBeforeTernaryOperators: true
 BreakConstructorInitializers: AfterColon
 BreakInheritanceList: AfterColon
 BreakStringLiterals: false
+BreakTemplateDeclarations: Yes
 ColumnLimit:     80
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
diff --git a/example/calculator-aserver.cpp b/example/calculator-aserver.cpp
index 7a5051e..54d0bee 100644
--- a/example/calculator-aserver.cpp
+++ b/example/calculator-aserver.cpp
@@ -18,8 +18,8 @@
         return r;
     }
 
-    auto method_call(divide_t, auto x,
-                     auto y) -> sdbusplus::async::task<divide_t::return_type>
+    auto method_call(divide_t, auto x, auto y)
+        -> sdbusplus::async::task<divide_t::return_type>
     {
         using sdbusplus::error::net::poettering::Calculator::DivisionByZero;
         if (y == 0)
diff --git a/include/sdbusplus/async/callback.hpp b/include/sdbusplus/async/callback.hpp
index 9b1e9ee..0cdf6a1 100644
--- a/include/sdbusplus/async/callback.hpp
+++ b/include/sdbusplus/async/callback.hpp
@@ -143,8 +143,8 @@
                                             execution::set_stopped_t()>;
 
     template <execution::receiver R>
-    friend auto tag_invoke(execution::connect_t, callback_sender&& self,
-                           R r) -> callback_operation<Init, R>
+    friend auto tag_invoke(execution::connect_t, callback_sender&& self, R r)
+        -> callback_operation<Init, R>
     {
         return {std::move(self.init), std::move(r)};
     }
diff --git a/include/sdbusplus/async/fdio.hpp b/include/sdbusplus/async/fdio.hpp
index 3eb6594..036abfd 100644
--- a/include/sdbusplus/async/fdio.hpp
+++ b/include/sdbusplus/async/fdio.hpp
@@ -106,14 +106,14 @@
     explicit fdio_sender(fdio& fdioInstance) noexcept :
         fdioInstance(fdioInstance) {};
 
-    friend auto tag_invoke(
-        execution::get_completion_signatures_t, const fdio_sender&,
-        auto) -> execution::completion_signatures<execution::set_value_t(),
-                                                  execution::set_stopped_t()>;
+    friend auto tag_invoke(execution::get_completion_signatures_t,
+                           const fdio_sender&, auto)
+        -> execution::completion_signatures<execution::set_value_t(),
+                                            execution::set_stopped_t()>;
 
     template <execution::receiver R>
-    friend auto tag_invoke(execution::connect_t, fdio_sender&& self,
-                           R r) -> fdio_operation<R>
+    friend auto tag_invoke(execution::connect_t, fdio_sender&& self, R r)
+        -> fdio_operation<R>
     {
         return {self.fdioInstance, std::move(r)};
     }
diff --git a/include/sdbusplus/async/match.hpp b/include/sdbusplus/async/match.hpp
index 5afce4f..10f9fe7 100644
--- a/include/sdbusplus/async/match.hpp
+++ b/include/sdbusplus/async/match.hpp
@@ -135,8 +135,8 @@
                                             execution::set_stopped_t()>;
 
     template <execution::receiver R>
-    friend auto tag_invoke(execution::connect_t, match_sender&& self,
-                           R r) -> match_operation<R>
+    friend auto tag_invoke(execution::connect_t, match_sender&& self, R r)
+        -> match_operation<R>
     {
         return {self.m, std::move(r)};
     }
diff --git a/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp b/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp
index c907826..b61fbc4 100644
--- a/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__awaitable.hpp
@@ -81,8 +81,8 @@
 }
 
 template <class _Awaitable, class _Promise>
-auto __get_awaiter(_Awaitable&& __awaitable,
-                   _Promise* __promise) -> decltype(auto)
+auto __get_awaiter(_Awaitable&& __awaitable, _Promise* __promise)
+    -> decltype(auto)
     requires requires {
                  __promise->await_transform(
                      static_cast<_Awaitable&&>(__awaitable));
diff --git a/include/sdbusplus/async/stdexec/__detail/__basic_sender.hpp b/include/sdbusplus/async/stdexec/__detail/__basic_sender.hpp
index 0cdbdd3..f900744 100644
--- a/include/sdbusplus/async/stdexec/__detail/__basic_sender.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__basic_sender.hpp
@@ -648,8 +648,8 @@
 
 template <class _Tag, class _Data, class... _Child>
 STDEXEC_ATTRIBUTE((host, device))
-__sexpr(_Tag, _Data,
-        _Child...) -> __sexpr<STDEXEC_SEXPR_DESCRIPTOR(_Tag, _Data, _Child...)>;
+__sexpr(_Tag, _Data, _Child...)
+    -> __sexpr<STDEXEC_SEXPR_DESCRIPTOR(_Tag, _Data, _Child...)>;
 
 template <class _Tag, class _Data, class... _Child>
 using __sexpr_t = __sexpr<STDEXEC_SEXPR_DESCRIPTOR(_Tag, _Data, _Child...)>;
diff --git a/include/sdbusplus/async/stdexec/__detail/__bulk.hpp b/include/sdbusplus/async/stdexec/__detail/__bulk.hpp
index 9faa020..c8ca584 100644
--- a/include/sdbusplus/async/stdexec/__detail/__bulk.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__bulk.hpp
@@ -79,8 +79,8 @@
 {
     template <sender _Sender, integral _Shape, __movable_value _Fun>
     STDEXEC_ATTRIBUTE((host, device))
-    auto operator()(_Sender&& __sndr, _Shape __shape,
-                    _Fun __fun) const -> __well_formed_sender auto
+    auto operator()(_Sender&& __sndr, _Shape __shape, _Fun __fun) const
+        -> __well_formed_sender auto
     {
         auto __domain = __get_early_domain(__sndr);
         return stdexec::transform_sender(
@@ -91,8 +91,8 @@
 
     template <integral _Shape, class _Fun>
     STDEXEC_ATTRIBUTE((always_inline))
-    auto operator()(_Shape __shape,
-                    _Fun __fun) const -> __binder_back<bulk_t, _Shape, _Fun>
+    auto operator()(_Shape __shape, _Fun __fun) const
+        -> __binder_back<bulk_t, _Shape, _Fun>
     {
         return {{static_cast<_Shape&&>(__shape), static_cast<_Fun&&>(__fun)},
                 {},
diff --git a/include/sdbusplus/async/stdexec/__detail/__connect_awaitable.hpp b/include/sdbusplus/async/stdexec/__detail/__connect_awaitable.hpp
index 7cddb81..63061d7 100644
--- a/include/sdbusplus/async/stdexec/__detail/__connect_awaitable.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__connect_awaitable.hpp
@@ -209,8 +209,8 @@
     __attribute__((__used__))
 #endif
     static auto
-        __co_impl(_Awaitable __awaitable,
-                  _Receiver __rcvr) -> __operation_t<_Receiver>
+        __co_impl(_Awaitable __awaitable, _Receiver __rcvr)
+            -> __operation_t<_Receiver>
     {
         using __result_t = __await_result_t<_Awaitable, __promise_t<_Receiver>>;
         std::exception_ptr __eptr;
@@ -244,8 +244,8 @@
   public:
     template <class _Receiver, __awaitable<__promise_t<_Receiver>> _Awaitable>
         requires receiver_of<_Receiver, __completions_t<_Receiver, _Awaitable>>
-    auto operator()(_Awaitable&& __awaitable,
-                    _Receiver __rcvr) const -> __operation_t<_Receiver>
+    auto operator()(_Awaitable&& __awaitable, _Receiver __rcvr) const
+        -> __operation_t<_Receiver>
     {
         return __co_impl(static_cast<_Awaitable&&>(__awaitable),
                          static_cast<_Receiver&&>(__rcvr));
diff --git a/include/sdbusplus/async/stdexec/__detail/__continue_on.hpp b/include/sdbusplus/async/stdexec/__detail/__continue_on.hpp
index bbee724..a5566f6 100644
--- a/include/sdbusplus/async/stdexec/__detail/__continue_on.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__continue_on.hpp
@@ -52,8 +52,8 @@
 struct continue_on_t
 {
     template <sender _Sender, scheduler _Scheduler>
-    auto operator()(_Sender&& __sndr,
-                    _Scheduler&& __sched) const -> __well_formed_sender auto
+    auto operator()(_Sender&& __sndr, _Scheduler&& __sched) const
+        -> __well_formed_sender auto
     {
         auto __domain = __get_early_domain(__sndr);
         using _Env = __t<__environ<__id<__decay_t<_Scheduler>>>>;
diff --git a/include/sdbusplus/async/stdexec/__detail/__continues_on.hpp b/include/sdbusplus/async/stdexec/__detail/__continues_on.hpp
index d8af7af..c9d1f60 100644
--- a/include/sdbusplus/async/stdexec/__detail/__continues_on.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__continues_on.hpp
@@ -52,8 +52,8 @@
 struct continues_on_t
 {
     template <sender _Sender, scheduler _Scheduler>
-    auto operator()(_Sender&& __sndr,
-                    _Scheduler&& __sched) const -> __well_formed_sender auto
+    auto operator()(_Sender&& __sndr, _Scheduler&& __sched) const
+        -> __well_formed_sender auto
     {
         auto __domain = __get_early_domain(__sndr);
         using _Env = __t<__environ<__id<__decay_t<_Scheduler>>>>;
diff --git a/include/sdbusplus/async/stdexec/__detail/__domain.hpp b/include/sdbusplus/async/stdexec/__detail/__domain.hpp
index 42ea9e1..0798479 100644
--- a/include/sdbusplus/async/stdexec/__detail/__domain.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__domain.hpp
@@ -46,8 +46,8 @@
 {
     template <class _Tag, class _Data, class... _Children>
         requires __has_legacy_c11n<_Tag, _Data, _Children...>
-    auto operator()(_Tag, _Data&& __data,
-                    _Children&&... __children) const -> decltype(auto)
+    auto operator()(_Tag, _Data&& __data, _Children&&... __children) const
+        -> decltype(auto)
     {
         return __legacy_c11n_fn<_Tag, _Data, _Children...>()(
             static_cast<_Data&&>(__data),
@@ -188,8 +188,8 @@
     }
 
     template <class _Sender, class _Env>
-    auto transform_env(_Sender&& __sndr,
-                       _Env&& __env) const noexcept -> decltype(auto)
+    auto transform_env(_Sender&& __sndr, _Env&& __env) const noexcept
+        -> decltype(auto)
     {
         if constexpr (__domain::__has_default_transform_env<_Sender, _Env>)
         {
@@ -332,8 +332,8 @@
 
     template <class _Domain, class... _OtherDomains>
         requires __all_of<_Domain, _OtherDomains...>
-    static auto __common_domain(_Domain __domain,
-                                _OtherDomains...) noexcept -> _Domain
+    static auto __common_domain(_Domain __domain, _OtherDomains...) noexcept
+        -> _Domain
     {
         return static_cast<_Domain&&>(__domain);
     }
diff --git a/include/sdbusplus/async/stdexec/__detail/__env.hpp b/include/sdbusplus/async/stdexec/__detail/__env.hpp
index 6f655f7..adbcb7b 100644
--- a/include/sdbusplus/async/stdexec/__detail/__env.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__env.hpp
@@ -139,8 +139,8 @@
                           std::as_const(__t));
     }
 
-    constexpr auto
-        operator()(auto&&) const noexcept -> stdexec::forward_progress_guarantee
+    constexpr auto operator()(auto&&) const noexcept
+        -> stdexec::forward_progress_guarantee
     {
         return stdexec::forward_progress_guarantee::weakly_parallel;
     }
@@ -155,8 +155,8 @@
 
     template <class _Tp>
         requires tag_invocable<__has_algorithm_customizations_t, __cref_t<_Tp>>
-    constexpr auto operator()(_Tp&&) const
-        noexcept(noexcept(__result_t<_Tp>{})) -> __result_t<_Tp>
+    constexpr auto operator()(_Tp&&) const noexcept(noexcept(__result_t<_Tp>{}))
+        -> __result_t<_Tp>
     {
         using _Boolean = tag_invoke_result_t<__has_algorithm_customizations_t,
                                              __cref_t<_Tp>>;
@@ -654,8 +654,9 @@
 
         template <tag_invocable<__cvref_env_t> _Key>
         STDEXEC_ATTRIBUTE((always_inline))
-        auto query(_Key) const noexcept(
-            nothrow_tag_invocable<_Key, __cvref_env_t>) -> decltype(auto)
+        auto query(_Key) const
+            noexcept(nothrow_tag_invocable<_Key, __cvref_env_t>)
+                -> decltype(auto)
         {
             return tag_invoke(_Key(), __env_);
         }
@@ -667,8 +668,8 @@
 struct __without_fn
 {
     template <class _Env, class _Tag>
-    constexpr auto operator()(_Env&& __env,
-                              _Tag) const noexcept -> decltype(auto)
+    constexpr auto operator()(_Env&& __env, _Tag) const noexcept
+        -> decltype(auto)
     {
         if constexpr (tag_invocable<_Tag, _Env>)
         {
diff --git a/include/sdbusplus/async/stdexec/__detail/__intrusive_mpsc_queue.hpp b/include/sdbusplus/async/stdexec/__detail/__intrusive_mpsc_queue.hpp
index 1858ad2..2c5a020 100644
--- a/include/sdbusplus/async/stdexec/__detail/__intrusive_mpsc_queue.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__intrusive_mpsc_queue.hpp
@@ -30,7 +30,7 @@
 template <auto _Ptr>
 class __intrusive_mpsc_queue;
 
-template <class _Node, std::atomic<void*> _Node::*_Next>
+template <class _Node, std::atomic<void*> _Node::* _Next>
 class __intrusive_mpsc_queue<_Next>
 {
     std::atomic<void*> __back_{&__nil_};
diff --git a/include/sdbusplus/async/stdexec/__detail/__intrusive_ptr.hpp b/include/sdbusplus/async/stdexec/__detail/__intrusive_ptr.hpp
index 7e6ff54..1a02dd2 100644
--- a/include/sdbusplus/async/stdexec/__detail/__intrusive_ptr.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__intrusive_ptr.hpp
@@ -66,8 +66,8 @@
 template <class _Ty, std::size_t _ReservedBits = 0ul>
 struct __enable_intrusive_from_this
 {
-    auto
-        __intrusive_from_this() noexcept -> __intrusive_ptr<_Ty, _ReservedBits>;
+    auto __intrusive_from_this() noexcept
+        -> __intrusive_ptr<_Ty, _ReservedBits>;
     auto __intrusive_from_this() const noexcept
         -> __intrusive_ptr<const _Ty, _ReservedBits>;
 
@@ -241,8 +241,9 @@
         return operator=(__intrusive_ptr(__that));
     }
 
-    auto operator=(__enable_intrusive_from_this<_Ty, _ReservedBits>*
-                       __that) noexcept -> __intrusive_ptr&
+    auto operator=(
+        __enable_intrusive_from_this<_Ty, _ReservedBits>* __that) noexcept
+        -> __intrusive_ptr&
     {
         return operator=(
             __that ? __that->__intrusive_from_this() : __intrusive_ptr());
diff --git a/include/sdbusplus/async/stdexec/__detail/__intrusive_queue.hpp b/include/sdbusplus/async/stdexec/__detail/__intrusive_queue.hpp
index 9338c63..9a98e33 100644
--- a/include/sdbusplus/async/stdexec/__detail/__intrusive_queue.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__intrusive_queue.hpp
@@ -29,7 +29,7 @@
 template <auto _Next>
 class __intrusive_queue;
 
-template <class _Item, _Item* _Item::*_Next>
+template <class _Item, _Item* _Item::* _Next>
 class __intrusive_queue<_Next>
 {
   public:
@@ -216,8 +216,8 @@
             return __result;
         }
 
-        friend auto operator==(const iterator&,
-                               const iterator&) noexcept -> bool = default;
+        friend auto operator==(const iterator&, const iterator&) noexcept
+            -> bool = default;
     };
 
     [[nodiscard]] auto begin() const noexcept -> iterator
diff --git a/include/sdbusplus/async/stdexec/__detail/__intrusive_slist.hpp b/include/sdbusplus/async/stdexec/__detail/__intrusive_slist.hpp
index 8d3e03e..45a3b24 100644
--- a/include/sdbusplus/async/stdexec/__detail/__intrusive_slist.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__intrusive_slist.hpp
@@ -29,7 +29,7 @@
 template <auto _Next>
 class __intrusive_slist;
 
-template <class _Item, _Item* _Item::*_Next>
+template <class _Item, _Item* _Item::* _Next>
 class __intrusive_slist<_Next>
 {
   public:
diff --git a/include/sdbusplus/async/stdexec/__detail/__let.hpp b/include/sdbusplus/async/stdexec/__detail/__let.hpp
index 8930589..a2ff7b4 100644
--- a/include/sdbusplus/async/stdexec/__detail/__let.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__let.hpp
@@ -410,8 +410,8 @@
                                _Tuples>...>;
 
     template <class _ResultSender, class _OpState>
-    auto __get_result_receiver(const _ResultSender&,
-                               _OpState& __op_state) -> decltype(auto)
+    auto __get_result_receiver(const _ResultSender&, _OpState& __op_state)
+        -> decltype(auto)
     {
         if constexpr (__needs_receiver_ref<_ResultSender, _Sched, _Receiver>)
         {
@@ -497,8 +497,8 @@
                 tag_invoke_t(__let_t, _Sender, _Function)>;
 
     template <sender_expr_for<__let_t<_Set>> _Sender, class _Env>
-    static auto transform_env(_Sender&& __sndr,
-                              const _Env& __env) -> decltype(auto)
+    static auto transform_env(_Sender&& __sndr, const _Env& __env)
+        -> decltype(auto)
     {
         return __sexpr_apply(static_cast<_Sender&&>(__sndr),
                              __mk_transform_env_fn<__let_t<_Set>>(__env));
@@ -506,8 +506,8 @@
 
     template <sender_expr_for<__let_t<_Set>> _Sender, class _Env>
         requires same_as<__early_domain_of_t<_Sender>, dependent_domain>
-    static auto
-        transform_sender(_Sender&& __sndr, const _Env& __env) -> decltype(auto)
+    static auto transform_sender(_Sender&& __sndr, const _Env& __env)
+        -> decltype(auto)
     {
         return __sexpr_apply(static_cast<_Sender&&>(__sndr),
                              __mk_transform_sender_fn<__let_t<_Set>>(__env));
diff --git a/include/sdbusplus/async/stdexec/__detail/__meta.hpp b/include/sdbusplus/async/stdexec/__detail/__meta.hpp
index 1e9931e..0497011 100644
--- a/include/sdbusplus/async/stdexec/__detail/__meta.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__meta.hpp
@@ -246,12 +246,12 @@
         return _Len;
     }
 
-    constexpr auto
-        operator==(const __mstring&) const noexcept -> bool = default;
+    constexpr auto operator==(const __mstring&) const noexcept
+        -> bool = default;
 
     template <std::size_t _OtherLen>
-    constexpr auto
-        operator==(const __mstring<_OtherLen>&) const noexcept -> bool
+    constexpr auto operator==(const __mstring<_OtherLen>&) const noexcept
+        -> bool
     {
         return false;
     }
@@ -262,8 +262,9 @@
 #endif
 
     template <std::size_t _OtherLen>
-    constexpr auto operator<=>(const __mstring<_OtherLen>& __other)
-        const noexcept -> std::strong_ordering
+    constexpr auto
+        operator<=>(const __mstring<_OtherLen>& __other) const noexcept
+        -> std::strong_ordering
     {
         constexpr std::size_t __len = _Len < _OtherLen ? _Len : _OtherLen;
         for (std::size_t __i = 0; __i < __len; ++__i)
@@ -296,8 +297,8 @@
 
 // Use a standard user-defined string literal template
 template <__mstring _Str>
-[[deprecated("Use _mstr instead")]] constexpr auto
-    operator""__csz() noexcept -> __mtypeof<_Str>
+[[deprecated("Use _mstr instead")]] constexpr auto operator""__csz() noexcept
+    -> __mtypeof<_Str>
 {
     return _Str;
 }
@@ -1232,8 +1233,8 @@
 
     constexpr __placeholder(void*) noexcept {}
 
-    constexpr friend auto
-        __get_placeholder_offset(__placeholder) noexcept -> std::size_t
+    constexpr friend auto __get_placeholder_offset(__placeholder) noexcept
+        -> std::size_t
     {
         return _Np;
     }
@@ -1370,9 +1371,8 @@
 {
     template <class... _Ts>
         requires(__callable<__mdispatch_<_Args, _Offset>, _Ts...> && ...) &&
-                    __callable<_Ret,
-                               __call_result_t<__mdispatch_<_Args, _Offset>,
-                                               _Ts...>...>
+                __callable<_Ret, __call_result_t<__mdispatch_<_Args, _Offset>,
+                                                 _Ts...>...>
     auto operator()(_Ts&&... __ts) const noexcept(
         __nothrow_callable<
             _Ret, __call_result_t<__mdispatch_<_Args, _Offset>, _Ts...>...>)
@@ -1396,13 +1396,12 @@
     {
         template <std::size_t... _Idx, class... _Ts>
             requires(__callable<__mdispatch_<_Args>, _Ts...> && ...) &&
-                        (__callable<__mdispatch_<_Pattern, _Idx + 1>, _Ts...> &&
-                         ...) &&
-                        __callable< //
-                            _Ret,
-                            __call_result_t<__mdispatch_<_Args>, _Ts...>...,
-                            __call_result_t<__mdispatch_<_Pattern, _Idx + 1>,
-                                            _Ts...>...>
+                    (__callable<__mdispatch_<_Pattern, _Idx + 1>, _Ts...> &&
+                     ...) &&
+                    __callable< //
+                        _Ret, __call_result_t<__mdispatch_<_Args>, _Ts...>...,
+                        __call_result_t<__mdispatch_<_Pattern, _Idx + 1>,
+                                        _Ts...>...>
         auto operator()(__indices<_Idx...>, _Ts&&... __ts) const noexcept(
             __nothrow_callable<                                  //
                 _Ret,                                            //
@@ -1421,9 +1420,9 @@
 
     template <class... _Ts>
         requires(__offset < sizeof...(_Ts)) &&
-                    __callable<__impl,
-                               __make_indices<sizeof...(_Ts) - __offset - 1>,
-                               _Ts...>
+                __callable<__impl,
+                           __make_indices<sizeof...(_Ts) - __offset - 1>,
+                           _Ts...>
     auto operator()(_Ts&&... __ts) const noexcept(
         __nothrow_callable<
             __impl, __make_indices<sizeof...(_Ts) - __offset - 1>, _Ts...>)
@@ -1438,9 +1437,9 @@
 
     template <class... _Ts>
         requires(sizeof...(_Ts) == __offset) &&
-                    __callable<__mdispatch_<__minvoke<__mpop_back<__qf<_Ret>>,
-                                                      _Args...>*>,
-                               _Ts...>
+                __callable<
+                    __mdispatch_<__minvoke<__mpop_back<__qf<_Ret>>, _Args...>*>,
+                    _Ts...>
     auto operator()(_Ts&&... __ts) const //
         noexcept(__nothrow_callable<
                  __mdispatch_<__minvoke<__mpop_back<__qf<_Ret>>, _Args...>*>,
diff --git a/include/sdbusplus/async/stdexec/__detail/__on.hpp b/include/sdbusplus/async/stdexec/__detail/__on.hpp
index 5f257bf..e2347a3 100644
--- a/include/sdbusplus/async/stdexec/__detail/__on.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__on.hpp
@@ -105,8 +105,8 @@
 struct on_t
 {
     template <scheduler _Scheduler, sender _Sender>
-    auto operator()(_Scheduler&& __sched,
-                    _Sender&& __sndr) const -> __well_formed_sender auto
+    auto operator()(_Scheduler&& __sched, _Sender&& __sndr) const
+        -> __well_formed_sender auto
     {
         auto __domain = __get_early_domain(__sndr);
         return stdexec::transform_sender(
diff --git a/include/sdbusplus/async/stdexec/__detail/__operation_states.hpp b/include/sdbusplus/async/stdexec/__detail/__operation_states.hpp
index c617f42..8e29d85 100644
--- a/include/sdbusplus/async/stdexec/__detail/__operation_states.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__operation_states.hpp
@@ -37,8 +37,8 @@
 {
     template <__same_as<start_t> _Self, class _OpState>
     STDEXEC_ATTRIBUTE((always_inline))
-    friend auto tag_invoke(_Self,
-                           _OpState& __op) noexcept -> decltype(__op.start())
+    friend auto tag_invoke(_Self, _OpState& __op) noexcept
+        -> decltype(__op.start())
     {
         static_assert(noexcept(__op.start()),
                       "start() members must be noexcept");
diff --git a/include/sdbusplus/async/stdexec/__detail/__p2300.hpp b/include/sdbusplus/async/stdexec/__detail/__p2300.hpp
index e7a2c18..a156106 100644
--- a/include/sdbusplus/async/stdexec/__detail/__p2300.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__p2300.hpp
@@ -330,14 +330,14 @@
     stdexec::completion_signatures<_Sigs...>;
 
 // [exec.utils.mkcmplsigs]
-template <                                                        //
-    class _Sender,                                                //
+template <                                          //
+    class _Sender,                                  //
     class _Env = __no_env,
-    class _Sigs = stdexec::completion_signatures<>,               //
-    template <class...>
-    class _SetValue = stdexec::__compl_sigs::__default_set_value, //
-    template <class>
-    class _SetError = stdexec::__compl_sigs::__default_set_error, //
+    class _Sigs = stdexec::completion_signatures<>, //
+    template <class...> class _SetValue =
+        stdexec::__compl_sigs::__default_set_value, //
+    template <class> class _SetError =
+        stdexec::__compl_sigs::__default_set_error, //
     class _SetStopped =
         stdexec::completion_signatures<stdexec::set_stopped_t()>>
 using make_completion_signatures STDEXEC_STD_DEPRECATED =
diff --git a/include/sdbusplus/async/stdexec/__detail/__schedule_from.hpp b/include/sdbusplus/async/stdexec/__detail/__schedule_from.hpp
index 0f83452..4321863 100644
--- a/include/sdbusplus/async/stdexec/__detail/__schedule_from.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__schedule_from.hpp
@@ -194,8 +194,8 @@
 struct schedule_from_t
 {
     template <scheduler _Scheduler, sender _Sender>
-    auto operator()(_Scheduler&& __sched,
-                    _Sender&& __sndr) const -> __well_formed_sender auto
+    auto operator()(_Scheduler&& __sched, _Sender&& __sndr) const
+        -> __well_formed_sender auto
     {
         using _Env = __t<__environ<__id<__decay_t<_Scheduler>>>>;
         auto __env = _Env{{static_cast<_Scheduler&&>(__sched)}};
diff --git a/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp b/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp
index 3933cf4..90c13f6 100644
--- a/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__schedulers.hpp
@@ -109,8 +109,9 @@
 
 template <class _Env>
     requires tag_invocable<get_delegation_scheduler_t, const _Env&>
-inline auto get_delegation_scheduler_t::operator()(const _Env& __env) const
-    noexcept -> tag_invoke_result_t<get_delegation_scheduler_t, const _Env&>
+inline auto
+    get_delegation_scheduler_t::operator()(const _Env& __env) const noexcept
+    -> tag_invoke_result_t<get_delegation_scheduler_t, const _Env&>
 {
     static_assert(
         nothrow_tag_invocable<get_delegation_scheduler_t, const _Env&>);
diff --git a/include/sdbusplus/async/stdexec/__detail/__senders.hpp b/include/sdbusplus/async/stdexec/__detail/__senders.hpp
index bfb1c01..16218cf 100644
--- a/include/sdbusplus/async/stdexec/__detail/__senders.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__senders.hpp
@@ -294,13 +294,11 @@
     template <sender _Sender, receiver _Receiver>
         requires __with_static_member<__tfx_sender<_Sender, _Receiver>,
                                       _Receiver> ||
-                     __with_member<__tfx_sender<_Sender, _Receiver>,
+                 __with_member<__tfx_sender<_Sender, _Receiver>, _Receiver> ||
+                 __with_tag_invoke<__tfx_sender<_Sender, _Receiver>,
                                    _Receiver> ||
-                     __with_tag_invoke<__tfx_sender<_Sender, _Receiver>,
-                                       _Receiver> ||
-                     __with_co_await<__tfx_sender<_Sender, _Receiver>,
-                                     _Receiver> ||
-                     __is_debug_env<env_of_t<_Receiver>>
+                 __with_co_await<__tfx_sender<_Sender, _Receiver>, _Receiver> ||
+                 __is_debug_env<env_of_t<_Receiver>>
     auto operator()(_Sender&& __sndr, _Receiver&& __rcvr) const
         noexcept(__nothrow_callable<__select_impl_t<_Sender, _Receiver>>)
             -> __call_result_t<__select_impl_t<_Sender, _Receiver>>
diff --git a/include/sdbusplus/async/stdexec/__detail/__split.hpp b/include/sdbusplus/async/stdexec/__detail/__split.hpp
index 4fd7f1b..137ce49 100644
--- a/include/sdbusplus/async/stdexec/__detail/__split.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__split.hpp
@@ -45,8 +45,8 @@
 {
     template <sender _Sender, class _Env = empty_env>
         requires sender_in<_Sender, _Env> && __decay_copyable<env_of_t<_Sender>>
-    auto operator()(_Sender&& __sndr,
-                    _Env&& __env = {}) const -> __well_formed_sender auto
+    auto operator()(_Sender&& __sndr, _Env&& __env = {}) const
+        -> __well_formed_sender auto
     {
         auto __domain = __get_late_domain(__sndr, __env);
         return stdexec::transform_sender(
diff --git a/include/sdbusplus/async/stdexec/__detail/__start_on.hpp b/include/sdbusplus/async/stdexec/__detail/__start_on.hpp
index ae7a78f..c0161b7 100644
--- a/include/sdbusplus/async/stdexec/__detail/__start_on.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__start_on.hpp
@@ -61,8 +61,8 @@
         __types<tag_invoke_t(start_on_t, _Scheduler, _Sender)>;
 
     template <scheduler _Scheduler, sender _Sender>
-    auto operator()(_Scheduler&& __sched,
-                    _Sender&& __sndr) const -> __well_formed_sender auto
+    auto operator()(_Scheduler&& __sched, _Sender&& __sndr) const
+        -> __well_formed_sender auto
     {
         auto __domain = query_or(get_domain, __sched, default_domain());
         return stdexec::transform_sender(
diff --git a/include/sdbusplus/async/stdexec/__detail/__starts_on.hpp b/include/sdbusplus/async/stdexec/__detail/__starts_on.hpp
index 9478d10..8a2135a 100644
--- a/include/sdbusplus/async/stdexec/__detail/__starts_on.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__starts_on.hpp
@@ -62,8 +62,8 @@
         __types<tag_invoke_t(starts_on_t, _Scheduler, _Sender)>;
 
     template <scheduler _Scheduler, sender _Sender>
-    auto operator()(_Scheduler&& __sched,
-                    _Sender&& __sndr) const -> __well_formed_sender auto
+    auto operator()(_Scheduler&& __sched, _Sender&& __sndr) const
+        -> __well_formed_sender auto
     {
         auto __domain = query_or(get_domain, __sched, default_domain());
         return stdexec::transform_sender(
diff --git a/include/sdbusplus/async/stdexec/__detail/__sync_wait.hpp b/include/sdbusplus/async/stdexec/__detail/__sync_wait.hpp
index 122dd5a..d1e016d 100644
--- a/include/sdbusplus/async/stdexec/__detail/__sync_wait.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__sync_wait.hpp
@@ -253,8 +253,8 @@
 {
     template <sender_in<__env> _Sender>
         requires __valid_sync_wait_argument<_Sender> &&
-                     __has_implementation_for<
-                         sync_wait_t, __early_domain_of_t<_Sender>, _Sender>
+                 __has_implementation_for<sync_wait_t,
+                                          __early_domain_of_t<_Sender>, _Sender>
     auto operator()(_Sender&& __sndr) const
         -> std::optional<__value_tuple_for_t<_Sender>>
     {
diff --git a/include/sdbusplus/async/stdexec/__detail/__transfer_just.hpp b/include/sdbusplus/async/stdexec/__detail/__transfer_just.hpp
index 682ee61..9f7a9d0 100644
--- a/include/sdbusplus/async/stdexec/__detail/__transfer_just.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__transfer_just.hpp
@@ -88,8 +88,8 @@
         __types<__legacy_customization_fn(_Data)>;
 
     template <scheduler _Scheduler, __movable_value... _Values>
-    auto operator()(_Scheduler&& __sched,
-                    _Values&&... __vals) const -> __well_formed_sender auto
+    auto operator()(_Scheduler&& __sched, _Values&&... __vals) const
+        -> __well_formed_sender auto
     {
         auto __domain = query_or(get_domain, __sched, default_domain());
         return stdexec::transform_sender(
diff --git a/include/sdbusplus/async/stdexec/__detail/__transform_sender.hpp b/include/sdbusplus/async/stdexec/__detail/__transform_sender.hpp
index 9e383d2..d0b7750 100644
--- a/include/sdbusplus/async/stdexec/__detail/__transform_sender.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__transform_sender.hpp
@@ -192,8 +192,8 @@
 {};
 
 template <class _Sender, class _Env>
-constexpr auto
-    dependent_domain::__is_nothrow_transform_sender() noexcept -> bool
+constexpr auto dependent_domain::__is_nothrow_transform_sender() noexcept
+    -> bool
 {
     using _Env2 = __call_result_t<__domain::__transform_env, dependent_domain&,
                                   _Sender, _Env>;
@@ -217,8 +217,8 @@
                 noexcept(__domain::__transform_sender()(
                     __declval<_Domain2&>(), __declval<_Sender2>(),
                     __declval<const _Env&>()));
-            return __mbool < __first_transform_is_nothrow &&
-                   __second_transform_is_nothrow > ();
+            return __mbool<__first_transform_is_nothrow &&
+                           __second_transform_is_nothrow>();
         }))>;
 }
 
diff --git a/include/sdbusplus/async/stdexec/__detail/__when_all.hpp b/include/sdbusplus/async/stdexec/__detail/__when_all.hpp
index 29e373b..9e66351 100644
--- a/include/sdbusplus/async/stdexec/__detail/__when_all.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__when_all.hpp
@@ -506,8 +506,8 @@
 
     template <scheduler _Scheduler, sender... _Senders>
         requires __domain::__has_common_domain<_Senders...>
-    auto operator()(_Scheduler&& __sched,
-                    _Senders&&... __sndrs) const -> __well_formed_sender auto
+    auto operator()(_Scheduler&& __sched, _Senders&&... __sndrs) const
+        -> __well_formed_sender auto
     {
         using _Env = __t<__schfr::__environ<__id<__decay_t<_Scheduler>>>>;
         auto __domain = query_or(get_domain, __sched, default_domain());
@@ -561,8 +561,8 @@
 
     template <scheduler _Scheduler, sender... _Senders>
         requires __domain::__has_common_domain<_Senders...>
-    auto operator()(_Scheduler&& __sched,
-                    _Senders&&... __sndrs) const -> __well_formed_sender auto
+    auto operator()(_Scheduler&& __sched, _Senders&&... __sndrs) const
+        -> __well_formed_sender auto
     {
         using _Env = __t<__schfr::__environ<__id<__decay_t<_Scheduler>>>>;
         auto __domain = query_or(get_domain, __sched, default_domain());
diff --git a/include/sdbusplus/async/stdexec/__detail/__with_awaitable_senders.hpp b/include/sdbusplus/async/stdexec/__detail/__with_awaitable_senders.hpp
index d6cfa3a..c522394 100644
--- a/include/sdbusplus/async/stdexec/__detail/__with_awaitable_senders.hpp
+++ b/include/sdbusplus/async/stdexec/__detail/__with_awaitable_senders.hpp
@@ -64,8 +64,8 @@
         return __coro_;
     }
 
-    [[nodiscard]] auto
-        unhandled_stopped() const noexcept -> __coro::coroutine_handle<>
+    [[nodiscard]] auto unhandled_stopped() const noexcept
+        -> __coro::coroutine_handle<>
     {
         return __stopped_callback_(__coro_.address());
     }
@@ -94,8 +94,8 @@
             __continuation_.handle().address());
     }
 
-    [[nodiscard]] auto
-        unhandled_stopped() const noexcept -> __coro::coroutine_handle<>
+    [[nodiscard]] auto unhandled_stopped() const noexcept
+        -> __coro::coroutine_handle<>
     {
         return __continuation_.unhandled_stopped();
     }
diff --git a/include/sdbusplus/async/stdexec/any_sender_of.hpp b/include/sdbusplus/async/stdexec/any_sender_of.hpp
index d003ec5..be2e87e 100644
--- a/include/sdbusplus/async/stdexec/any_sender_of.hpp
+++ b/include/sdbusplus/async/stdexec/any_sender_of.hpp
@@ -35,8 +35,8 @@
     template <class _VTable, class _Tp>
         requires __tag_invocable_r<const _VTable*, __create_vtable_t,
                                    __mtype<_VTable>, __mtype<_Tp>>
-    constexpr auto operator()(__mtype<_VTable>,
-                              __mtype<_Tp>) const noexcept -> const _VTable*
+    constexpr auto operator()(__mtype<_VTable>, __mtype<_Tp>) const noexcept
+        -> const _VTable*
     {
         return stdexec::tag_invoke(__create_vtable_t{}, __mtype<_VTable>{},
                                    __mtype<_Tp>{});
@@ -320,8 +320,8 @@
             sizeof(_Tp) <= __buffer_size && alignof(_Tp) <= __alignment;
 
         template <class _Tp>
-        static constexpr auto
-            __get_vtable_of_type() noexcept -> const __vtable_t*
+        static constexpr auto __get_vtable_of_type() noexcept
+            -> const __vtable_t*
         {
             return &__storage_vtbl<__t, __decay_t<_Tp>, _Vtable, __with_delete>;
         }
@@ -425,8 +425,8 @@
         }
 
         template <class _Tp>
-        STDEXEC_MEMFN_DECL(void __delete)
-        (this __mtype<_Tp>, __t& __self) noexcept
+        STDEXEC_MEMFN_DECL(void __delete)(this __mtype<_Tp>,
+                                          __t& __self) noexcept
         {
             if (!__self.__object_pointer_)
             {
@@ -538,16 +538,15 @@
         (*__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
     {
@@ -621,8 +620,7 @@
     }
 
     template <class _Tp>
-    STDEXEC_MEMFN_DECL(void __delete)
-    (this __mtype<_Tp>, __t& __self) noexcept
+    STDEXEC_MEMFN_DECL(void __delete)(this __mtype<_Tp>, __t& __self) noexcept
     {
         if (!__self.__object_pointer_)
         {
@@ -641,8 +639,8 @@
     }
 
     template <class _Tp>
-    STDEXEC_MEMFN_DECL(void __move_construct)
-    (this __mtype<_Tp>, __t& __self, __t&& __other) noexcept
+    STDEXEC_MEMFN_DECL(void __move_construct)(this __mtype<_Tp>, __t& __self,
+                                              __t&& __other) noexcept
     {
         if (!__other.__object_pointer_)
         {
@@ -671,8 +669,8 @@
 
     template <class _Tp>
         requires _Copyable
-    STDEXEC_MEMFN_DECL(void __copy_construct)
-    (this __mtype<_Tp>, __t& __self, const __t& __other)
+    STDEXEC_MEMFN_DECL(void __copy_construct)(this __mtype<_Tp>, __t& __self,
+                                              const __t& __other)
     {
         if (!__other.__object_pointer_)
         {
@@ -702,9 +700,9 @@
 struct __empty_vtable
 {
     template <class _Sender>
-    STDEXEC_MEMFN_DECL(auto __create_vtable)
-    (this __mtype<__empty_vtable>,
-     __mtype<_Sender>) noexcept -> const __empty_vtable*
+    STDEXEC_MEMFN_DECL(auto __create_vtable)(this __mtype<__empty_vtable>,
+                                             __mtype<_Sender>) noexcept
+        -> const __empty_vtable*
     {
         static const __empty_vtable __vtable_{};
         return &__vtable_;
@@ -766,9 +764,10 @@
       private:
         template <class _Rcvr>
             requires receiver_of<_Rcvr, completion_signatures<_Sigs...>> &&
-                         (__callable<__query_vfun_fn<_Rcvr>, _Queries> && ...)
-        STDEXEC_MEMFN_DECL(auto __create_vtable)
-        (this __mtype<__t>, __mtype<_Rcvr>) noexcept -> const __t*
+                     (__callable<__query_vfun_fn<_Rcvr>, _Queries> && ...)
+        STDEXEC_MEMFN_DECL(auto __create_vtable)(this __mtype<__t>,
+                                                 __mtype<_Rcvr>) noexcept
+            -> const __t*
         {
             static const __t __vtable_{
                 {__any_::__rcvr_vfun_fn(static_cast<_Rcvr*>(nullptr),
@@ -954,9 +953,9 @@
 
   private:
     template <class _Op>
-    STDEXEC_MEMFN_DECL(auto __create_vtable)
-    (this __mtype<__operation_vtable>,
-     __mtype<_Op>) noexcept -> const __operation_vtable*
+    STDEXEC_MEMFN_DECL(auto __create_vtable)(this __mtype<__operation_vtable>,
+                                             __mtype<_Op>) noexcept
+        -> const __operation_vtable*
     {
         static __operation_vtable __vtable{
             [](void* __object_pointer) noexcept -> void {
@@ -1012,8 +1011,8 @@
 
         template <same_as<__t> _Self, class _Item>
             requires __callable<set_next_t, _Receiver&, _Item>
-        STDEXEC_MEMFN_DECL(auto set_next)
-        (this _Self& __self, _Item&& __item) noexcept
+        STDEXEC_MEMFN_DECL(auto set_next)(this _Self& __self,
+                                          _Item&& __item) noexcept
             -> __call_result_t<set_next_t, _Receiver&, _Item>
         {
             return exec::set_next(__self.__op_->__rcvr_,
@@ -1132,12 +1131,12 @@
 
   private:
     template <class _Queryable>
-        requires(__callable<__query_vfun_fn<_Queryable, _IsEnvProvider>,
-                            _Queries> &&
-                 ...)
-    STDEXEC_MEMFN_DECL(auto __create_vtable)
-    (this __mtype<__query_vtable>,
-     __mtype<_Queryable>) noexcept -> const __query_vtable*
+        requires(
+            __callable<__query_vfun_fn<_Queryable, _IsEnvProvider>, _Queries> &&
+            ...)
+    STDEXEC_MEMFN_DECL(auto __create_vtable)(this __mtype<__query_vtable>,
+                                             __mtype<_Queryable>) noexcept
+        -> const __query_vtable*
     {
         static const __query_vtable __vtable{
             {__query_vfun_fn<_Queryable, _IsEnvProvider>{}(
@@ -1169,8 +1168,9 @@
 
       private:
         template <sender_to<__receiver_ref_t> _Sender>
-        STDEXEC_MEMFN_DECL(auto __create_vtable)
-        (this __mtype<__vtable>, __mtype<_Sender>) noexcept -> const __vtable*
+        STDEXEC_MEMFN_DECL(auto __create_vtable)(this __mtype<__vtable>,
+                                                 __mtype<_Sender>) noexcept
+            -> const __vtable*
         {
             static const __vtable __vtable_{
                 {*__create_vtable(__mtype<__query_vtable<_SenderQueries>>{},
@@ -1325,9 +1325,9 @@
 
       private:
         template <scheduler _Scheduler>
-        STDEXEC_MEMFN_DECL(auto __create_vtable)
-        (this __mtype<__vtable>,
-         __mtype<_Scheduler>) noexcept -> const __vtable*
+        STDEXEC_MEMFN_DECL(auto __create_vtable)(this __mtype<__vtable>,
+                                                 __mtype<_Scheduler>) noexcept
+            -> const __vtable*
         {
             static const __vtable __vtable_{
                 {*__create_vtable(
@@ -1476,7 +1476,7 @@
 
         template <stdexec::receiver_of<_Completions> _Receiver>
         auto connect(_Receiver __rcvr) && -> stdexec::connect_result_t<
-                                              __sender_base, _Receiver>
+            __sender_base, _Receiver>
         {
             return static_cast<__sender_base&&>(__sender_).connect(
                 static_cast<_Receiver&&>(__rcvr));
diff --git a/include/sdbusplus/async/stdexec/async_scope.hpp b/include/sdbusplus/async/stdexec/async_scope.hpp
index 67b223d..0f61e80 100644
--- a/include/sdbusplus/async/stdexec/async_scope.hpp
+++ b/include/sdbusplus/async/stdexec/async_scope.hpp
@@ -755,8 +755,8 @@
 
         template <__decays_to<__t> _Self, receiver _Receiver>
             requires receiver_of<_Receiver, __completions_t<_Self>>
-        static auto connect(_Self&& __self,
-                            _Receiver __rcvr) -> __future_op_t<_Receiver>
+        static auto connect(_Self&& __self, _Receiver __rcvr)
+            -> __future_op_t<_Receiver>
         {
             return __future_op_t<_Receiver>{
                 static_cast<_Receiver&&>(__rcvr),
@@ -932,8 +932,8 @@
 
     template <__movable_value _Env = empty_env,
               sender_in<__env_t<_Env>> _Sender>
-    auto spawn_future(_Sender&& __sndr,
-                      _Env __env = {}) -> __future_t<_Sender, _Env>
+    auto spawn_future(_Sender&& __sndr, _Env __env = {})
+        -> __future_t<_Sender, _Env>
     {
         using __state_t = __future_state<nest_result_t<_Sender>, _Env>;
         auto __state =
diff --git a/include/sdbusplus/async/stdexec/at_coroutine_exit.hpp b/include/sdbusplus/async/stdexec/at_coroutine_exit.hpp
index 28b5a51..c31f257 100644
--- a/include/sdbusplus/async/stdexec/at_coroutine_exit.hpp
+++ b/include/sdbusplus/async/stdexec/at_coroutine_exit.hpp
@@ -260,8 +260,8 @@
         }
 
         template <class _Awaitable>
-        auto
-            await_transform(_Awaitable&& __awaitable) noexcept -> decltype(auto)
+        auto await_transform(_Awaitable&& __awaitable) noexcept
+            -> decltype(auto)
         {
             return as_awaitable(
                 __die_on_stop(static_cast<_Awaitable&&>(__awaitable)), *this);
diff --git a/include/sdbusplus/async/stdexec/functional.hpp b/include/sdbusplus/async/stdexec/functional.hpp
index af2ae14..6018ffe 100644
--- a/include/sdbusplus/async/stdexec/functional.hpp
+++ b/include/sdbusplus/async/stdexec/functional.hpp
@@ -138,8 +138,9 @@
 {
     template <class _Mbr, class _Class, class _Ty>
     STDEXEC_ATTRIBUTE((always_inline))
-    constexpr auto operator()(_Mbr _Class::*__mem_ptr, _Ty&& __ty)
-        const noexcept -> decltype(((static_cast<_Ty&&>(__ty)).*__mem_ptr))
+    constexpr auto operator()(_Mbr _Class::* __mem_ptr,
+                              _Ty&& __ty) const noexcept
+        -> decltype(((static_cast<_Ty&&>(__ty)).*__mem_ptr))
     {
         return ((static_cast<_Ty&&>(__ty)).*__mem_ptr);
     }
@@ -149,7 +150,7 @@
 {
     template <class _Mbr, class _Class, class _Ty>
     STDEXEC_ATTRIBUTE((always_inline))
-    constexpr auto operator()(_Mbr _Class::*__mem_ptr, _Ty __ty) const noexcept
+    constexpr auto operator()(_Mbr _Class::* __mem_ptr, _Ty __ty) const noexcept
         -> decltype((__ty.get().*__mem_ptr))
     {
         return (__ty.get().*__mem_ptr);
@@ -160,8 +161,9 @@
 {
     template <class _Mbr, class _Class, class _Ty>
     STDEXEC_ATTRIBUTE((always_inline))
-    constexpr auto operator()(_Mbr _Class::*__mem_ptr, _Ty&& __ty)
-        const noexcept -> decltype(((*static_cast<_Ty&&>(__ty)).*__mem_ptr))
+    constexpr auto operator()(_Mbr _Class::* __mem_ptr,
+                              _Ty&& __ty) const noexcept
+        -> decltype(((*static_cast<_Ty&&>(__ty)).*__mem_ptr))
     {
         return ((*static_cast<_Ty&&>(__ty)).*__mem_ptr);
     }
diff --git a/include/sdbusplus/async/stdexec/sequence_senders.hpp b/include/sdbusplus/async/stdexec/sequence_senders.hpp
index 01d6f11..012779f 100644
--- a/include/sdbusplus/async/stdexec/sequence_senders.hpp
+++ b/include/sdbusplus/async/stdexec/sequence_senders.hpp
@@ -414,9 +414,9 @@
     template <sender _Sender, receiver _Receiver>
         requires __next_connectable<__tfx_sndr<_Sender, _Receiver>,
                                     _Receiver> ||
-                     __subscribeable_with_tag_invoke<
-                         __tfx_sndr<_Sender, _Receiver>, _Receiver> ||
-                     __is_debug_env<env_of_t<_Receiver>>
+                 __subscribeable_with_tag_invoke<__tfx_sndr<_Sender, _Receiver>,
+                                                 _Receiver> ||
+                 __is_debug_env<env_of_t<_Receiver>>
     auto operator()(_Sender&& __sndr, _Receiver&& __rcvr) const
         noexcept(__nothrow_callable<__select_impl_t<_Sender, _Receiver>>)
             -> __call_result_t<__select_impl_t<_Sender, _Receiver>>
diff --git a/include/sdbusplus/async/stdexec/stop_token.hpp b/include/sdbusplus/async/stdexec/stop_token.hpp
index a7b1acc..015e2ad 100644
--- a/include/sdbusplus/async/stdexec/stop_token.hpp
+++ b/include/sdbusplus/async/stdexec/stop_token.hpp
@@ -211,8 +211,8 @@
     const inplace_stop_source* __source_;
 };
 
-inline auto
-    inplace_stop_source::get_token() const noexcept -> inplace_stop_token
+inline auto inplace_stop_source::get_token() const noexcept
+    -> inplace_stop_token
 {
     return inplace_stop_token{this};
 }
diff --git a/include/sdbusplus/async/stdexec/task.hpp b/include/sdbusplus/async/stdexec/task.hpp
index a6ce255..74ee1f6 100644
--- a/include/sdbusplus/async/stdexec/task.hpp
+++ b/include/sdbusplus/async/stdexec/task.hpp
@@ -133,11 +133,10 @@
         __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
     {
@@ -424,8 +423,8 @@
 
         template <sender _Awaitable>
             requires __scheduler_provider<_Context>
-        auto
-            await_transform(_Awaitable&& __awaitable) noexcept -> decltype(auto)
+        auto await_transform(_Awaitable&& __awaitable) noexcept
+            -> decltype(auto)
         {
             // TODO: If we have a complete-where-it-starts query then we can
             // optimize this to avoid the reschedule
@@ -437,8 +436,9 @@
 
         template <class _Scheduler>
             requires __scheduler_provider<_Context>
-        auto await_transform(__reschedule_coroutine_on::__wrap<_Scheduler>
-                                 __box) noexcept -> decltype(auto)
+        auto await_transform(
+            __reschedule_coroutine_on::__wrap<_Scheduler> __box) noexcept
+            -> decltype(auto)
         {
             if (!std::exchange(__rescheduled_, true))
             {
@@ -460,8 +460,8 @@
         }
 
         template <class _Awaitable>
-        auto
-            await_transform(_Awaitable&& __awaitable) noexcept -> decltype(auto)
+        auto await_transform(_Awaitable&& __awaitable) noexcept
+            -> decltype(auto)
         {
             return with_awaitable_senders<__promise>::await_transform(
                 static_cast<_Awaitable&&>(__awaitable));
@@ -494,8 +494,9 @@
         }
 
         template <class _ParentPromise2>
-        auto await_suspend(__coro::coroutine_handle<_ParentPromise2>
-                               __parent) noexcept -> __coro::coroutine_handle<>
+        auto await_suspend(
+            __coro::coroutine_handle<_ParentPromise2> __parent) noexcept
+            -> __coro::coroutine_handle<>
         {
             static_assert(__one_of<_ParentPromise, _ParentPromise2, void>);
             __coro_.promise().__context_.emplace(__parent_promise_t(),
@@ -531,11 +532,11 @@
     // Make this task awaitable within a particular context:
     template <class _ParentPromise>
         requires constructible_from<
-                     awaiter_context_t<__promise, _ParentPromise>,
-                     __promise_context_t&, _ParentPromise&>
-    STDEXEC_MEMFN_DECL(auto as_awaitable)
-    (this basic_task&& __self,
-     _ParentPromise&) noexcept -> __task_awaitable<_ParentPromise>
+            awaiter_context_t<__promise, _ParentPromise>, __promise_context_t&,
+            _ParentPromise&>
+    STDEXEC_MEMFN_DECL(auto as_awaitable)(this basic_task&& __self,
+                                          _ParentPromise&) noexcept
+        -> __task_awaitable<_ParentPromise>
     {
         return __task_awaitable<_ParentPromise>{
             std::exchange(__self.__coro_, {})};
diff --git a/include/sdbusplus/async/timer.hpp b/include/sdbusplus/async/timer.hpp
index 47032e5..582d248 100644
--- a/include/sdbusplus/async/timer.hpp
+++ b/include/sdbusplus/async/timer.hpp
@@ -93,8 +93,8 @@
             execution::set_stopped_t()>;
 
     template <execution::receiver R>
-    friend auto tag_invoke(execution::connect_t, sleep_sender&& self,
-                           R r) -> sleep_operation<R>
+    friend auto tag_invoke(execution::connect_t, sleep_sender&& self, R r)
+        -> sleep_operation<R>
     {
         return {self.ctx, self.time, std::move(r)};
     }
diff --git a/include/sdbusplus/message/native_types.hpp b/include/sdbusplus/message/native_types.hpp
index 30ccbde..d57873d 100644
--- a/include/sdbusplus/message/native_types.hpp
+++ b/include/sdbusplus/message/native_types.hpp
@@ -239,8 +239,8 @@
 template <typename... Types>
 struct convert_from_string<std::variant<Types...>>
 {
-    static auto
-        op(const std::string& str) -> std::optional<std::variant<Types...>>
+    static auto op(const std::string& str)
+        -> std::optional<std::variant<Types...>>
     {
         if constexpr (0 < sizeof...(Types))
         {
@@ -255,8 +255,8 @@
     // a string, so we need to iterate through all the convertible-types
     // first and convert to string as a last resort.
     template <typename T, typename... Args>
-    static auto
-        process(const std::string& str) -> std::optional<std::variant<Types...>>
+    static auto process(const std::string& str)
+        -> std::optional<std::variant<Types...>>
     {
         // If convert_from_string exists for the type, attempt it.
         if constexpr (has_convert_from_string_v<T>)
diff --git a/include/sdbusplus/utility/container_traits.hpp b/include/sdbusplus/utility/container_traits.hpp
index e93b188..340a381 100644
--- a/include/sdbusplus/utility/container_traits.hpp
+++ b/include/sdbusplus/utility/container_traits.hpp
@@ -50,8 +50,8 @@
     {};
 
     template <typename C, typename P>
-    static constexpr auto
-        test(P* p) -> decltype(std::declval<C>().emplace(*p), std::true_type());
+    static constexpr auto test(P* p)
+        -> decltype(std::declval<C>().emplace(*p), std::true_type());
 
     template <typename, typename>
     static std::false_type test(...);
diff --git a/src/async/context.cpp b/src/async/context.cpp
index 17ec7ce..3381cb3 100644
--- a/src/async/context.cpp
+++ b/src/async/context.cpp
@@ -84,9 +84,9 @@
 
     explicit wait_process_sender(context& ctx) : context_ref(ctx) {}
 
-    friend auto tag_invoke(
-        execution::get_completion_signatures_t, const wait_process_sender&,
-        auto) -> execution::completion_signatures<execution::set_value_t()>;
+    friend auto tag_invoke(execution::get_completion_signatures_t,
+                           const wait_process_sender&, auto)
+        -> execution::completion_signatures<execution::set_value_t()>;
 
     template <execution::receiver R>
     friend auto tag_invoke(execution::connect_t, wait_process_sender&& self,
diff --git a/test/async/context.cpp b/test/async/context.cpp
index 05db313..8cdd93c 100644
--- a/test/async/context.cpp
+++ b/test/async/context.cpp
@@ -72,8 +72,8 @@
 {
     struct _
     {
-        static auto one(size_t count,
-                        size_t& executed) -> sdbusplus::async::task<size_t>
+        static auto one(size_t count, size_t& executed)
+            -> sdbusplus::async::task<size_t>
         {
             if (count)
             {
@@ -125,8 +125,8 @@
 
     struct _
     {
-        static auto fn(decltype(m->next()) snd,
-                       bool& ran) -> sdbusplus::async::task<>
+        static auto fn(decltype(m->next()) snd, bool& ran)
+            -> sdbusplus::async::task<>
         {
             co_await std::move(snd);
             ran = true;
diff --git a/test/async/fdio.cpp b/test/async/fdio.cpp
index 799c5d3..31cce27 100644
--- a/test/async/fdio.cpp
+++ b/test/async/fdio.cpp
@@ -50,8 +50,8 @@
         co_return;
     }
 
-    auto testFdEvents(bool& ran,
-                      bool sleepBeforeWrite) -> sdbusplus::async::task<>
+    auto testFdEvents(bool& ran, bool sleepBeforeWrite)
+        -> sdbusplus::async::task<>
     {
         for (int i = 0; i < testIterations; i++)
         {
