https://gcc.gnu.org/g:b212314667d4cf636c7728d2c91f028c516e7df8
commit r16-5917-gb212314667d4cf636c7728d2c91f028c516e7df8 Author: Patrick Palka <[email protected]> Date: Fri Dec 5 12:15:08 2025 -0500 libstdc++: Use deducing this in std::bind_front even in C++20 [PR111327] 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 <[email protected]> Reviewed-by: Jonathan Wakely <[email protected]> Diff: --- libstdc++-v3/include/bits/binders.h | 5 ++++- libstdc++-v3/testsuite/20_util/function_objects/bind_front/111327.cc | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/bits/binders.h b/libstdc++-v3/include/bits/binders.h index 6489edd5321b..972471745bd4 100644 --- a/libstdc++-v3/include/bits/binders.h +++ b/libstdc++-v3/include/bits/binders.h @@ -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 diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/111327.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/111327.cc index 58832a61a7eb..931886b7b54d 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/111327.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/111327.cc @@ -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}
