mirror of git://gcc.gnu.org/git/gcc.git
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 <tkaminsk@redhat.com> Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
This commit is contained in:
parent
756e32a160
commit
b212314667
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Reference in New Issue