Make code compile on clang-18

To do this requires fixing some minor warnings around templates.

stdexec uses variables of the form __foo to denote variables that aren't
used.  This throws some warnings when trying to compile with clang.

Update the meson file to ignore those warnings when we detect clang.

With this change, and clang-18, code now compiles.

Change-Id: I72bc0ab7a818b7913831749b6246f54e7b092e0b
Signed-off-by: Ed Tanous <ed@tanous.net>
diff --git a/include/sdbusplus/async/execution.hpp b/include/sdbusplus/async/execution.hpp
index 5fc34d5..a86ae3e 100644
--- a/include/sdbusplus/async/execution.hpp
+++ b/include/sdbusplus/async/execution.hpp
@@ -4,7 +4,10 @@
 // as needed.
 
 #pragma GCC diagnostic push
-#ifndef __clang__
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wunused-parameter"
+#pragma clang diagnostic ignored "-Wnon-pod-varargs"
+#else
 #pragma GCC diagnostic ignored "-Wnon-template-friend"
 #endif
 #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
diff --git a/include/sdbusplus/async/proxy.hpp b/include/sdbusplus/async/proxy.hpp
index 2117921..74e0907 100644
--- a/include/sdbusplus/async/proxy.hpp
+++ b/include/sdbusplus/async/proxy.hpp
@@ -105,9 +105,9 @@
         requires(!Preserved)
     {
         using result_t = proxy<S, P, I, true>;
-        return result_t(typename result_t::value_t<S>(this->s),
-                        typename result_t::value_t<P>(this->p),
-                        typename result_t::value_t<I>(this->i));
+        return result_t(typename result_t::template value_t<S>(this->s),
+                        typename result_t::template value_t<P>(this->p),
+                        typename result_t::template value_t<I>(this->i));
     }
 
     /** Perform a method call.
diff --git a/tools/sdbusplus/templates/interface.client.hpp.mako b/tools/sdbusplus/templates/interface.client.hpp.mako
index e1ec282..4ed3375 100644
--- a/tools/sdbusplus/templates/interface.client.hpp.mako
+++ b/tools/sdbusplus/templates/interface.client.hpp.mako
@@ -48,7 +48,7 @@
 {
   public:
     friend Client;
-    template <typename>
+    template <typename, typename>
     friend struct sdbusplus::client::${interface.cppNamespacedClass()};
 
     // Delete default constructor as these should only be constructed