]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Use deducing this in std::bind_front even in C++20 [PR111327]
authorPatrick Palka <ppalka@redhat.com>
Fri, 5 Dec 2025 17:15:08 +0000 (12:15 -0500)
committerPatrick Palka <ppalka@redhat.com>
Fri, 5 Dec 2025 17:15:08 +0000 (12:15 -0500)
PR libstdc++/111327

libstdc++-v3/ChangeLog:

* include/bits/binders.h (_Binder::operator())
[_GLIBCXX_EXPLICIT_THIS_PARAMETER]: Also use deducing this in
C++20 mode when possible.
* testsuite/20_util/function_objects/bind_front/111327.cc:
Expect error inside header even in C++20 mode.

Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/include/bits/binders.h
libstdc++-v3/testsuite/20_util/function_objects/bind_front/111327.cc

index 6489edd5321b061963eaf904100f94ac6f53c762..972471745bd4fc96cb5c0c14170a4502f6e3e7d1 100644 (file)
@@ -125,7 +125,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          _M_bound_args(__make_bound_args<_BoundArgs...>(std::forward<_Args>(__args)...))
        { static_assert(sizeof...(_Args) == sizeof...(_BoundArgs)); }
 
-#if __cpp_explicit_this_parameter
+#if _GLIBCXX_EXPLICIT_THIS_PARAMETER
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wc++23-extensions" // deducing this
       template<typename _Self, typename... _CallArgs>
        constexpr _Result_t<_Self, _CallArgs...>
        operator()(this _Self&& __self, _CallArgs&&... __call_args)
@@ -134,6 +136,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          return _S_call(__like_t<_Self, _Binder>(__self),
                         std::forward<_CallArgs>(__call_args)...);
        }
+# pragma GCC diagnostic pop
 #else
       template<typename... _CallArgs>
        requires true
index 58832a61a7eb248ace71f6244083f19348ac5803..931886b7b54d01009371ac70e2e860c619bf5926 100644 (file)
@@ -50,4 +50,4 @@ int main() {
   std::move(std::as_const(g2))();
 }
 
-// { dg-error "no type named 'type' in 'std::__conditional_t<false, std::invoke_result<" "" { target c++23 } 0 }
+// { dg-error "no type named 'type' in 'std::__conditional_t<false, std::invoke_result<" "" { target *-*-* } 0}