From patchwork Fri Jan 12 20:09:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 187827 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:693c:2614:b0:101:6a76:bbe3 with SMTP id mm20csp443288dyc; Fri, 12 Jan 2024 13:14:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IFO7LekQiG+g2lnD5IwIzcfa2fE0ccIwymBZpBisbImIoNAX/cq9czzT63Bu4h2Hw7KjyGy X-Received: by 2002:a05:6214:e61:b0:681:30ad:b352 with SMTP id jz1-20020a0562140e6100b0068130adb352mr1702623qvb.51.1705094040205; Fri, 12 Jan 2024 13:14:00 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705094040; cv=pass; d=google.com; s=arc-20160816; b=A+buU3E8QKs/Ch3LF2FI75GSYaiCd9ozFNbKp9FdF9CpTNRym98xokG058US7VFeSI XgbEHuWJDrGTsl98+hbzK49LtjlTVDlVQBco1rUQiYPkmACkH3fR3NEZSfa5IcxeARTz LksKaWHdk+K/RisUhDUujZoh8p6eUtJfQxev87/jdxO4eOVjtcR3QKl51BNi4PHZ6ajD JI8RHWvMPzx4dAMnwlDydXKg4OtD0Y/ONuXy9qaD6HXdWKX9ZEnfMpGomKjPvY/fdNin m+YuJ/8DHKOQ3KOmJEoU5rGvmd4DaXqMDt7Gem6kshvksOsfGmi4C4ldh7VM3ylULWxM AQyw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=2rAd6q/NlfW3sSt27roSWqbt+LyZQe/MRbWJNqVkMXc=; fh=EVSvWd94bH3+6DLHxQIQnUkCnGLOu/mRCJOpcO366zA=; b=Vnnow0bWv8e1n6+YO7Hs7lpKRVE1Qo7U9HoqPIpD12nNou3MHE/Rhb7tnqhGlkfVID aYOEDuzvqGbFbY/k46rM1gw+dlBx8Ttbv5lcb0oiZHWraJ3BnrGQ9iDNPtP7PnI4Bh5S QZG3n6WsqvcxXeM0/Ty5gONLaY31MMv8muJx61mNVtQbTUHeueCJnb7c6muX/iIrAXMv oYjKV1QHxPMKrTT2dBnGqJKthCs5SIMIGsAzDkgGLL8YLrTVSJJPTI4QPvE9Dli4X+y+ 62+FZiTYoJlntVcwls8VXlt1tjlmDpJp5STQe8rqqV8uEBMQWt/7kteZk4I6uwz0YwQB m/yg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ZVuUS2mn; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id y10-20020a0ce04a000000b0067eaa738a96si3528732qvk.523.2024.01.12.13.14.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jan 2024 13:14:00 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ZVuUS2mn; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 62C543857708 for ; Fri, 12 Jan 2024 20:10:29 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 57A383858C78 for ; Fri, 12 Jan 2024 20:09:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 57A383858C78 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 57A383858C78 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705090157; cv=none; b=eXHaIruc2Nsr3mSsdAv7RnqA/NA9pYV5m6U+1qzJzcDELabYJPgg73DGqJxGN549zQW/AJ2Ypo1G6emrVxfx10Jm1rQFYYcVdW0ocBGp9AJKse7BgqI/A733LjxXE37PLjxRYhceuAtnyJuCHdE5GDnjuvgFJboPMZuE6DOKYjM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705090157; c=relaxed/simple; bh=m3Q0v/mBGTLjnHcaU/9cdPNFOgVNOq0Pm5PQiKOi3ps=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=dQ2GN2ytupRfTyw5U04qBSGX+hgUwZGGi3Qojj1R8pKAOAmpkhrMITn1j78dOPc1mpkO92n0kDf4lMlxNqAk5Z7n7FDMmMb2ezE0ZjKycPQo4AFvbr6URzRSfHVluHYqOoPSUafxq0r80mbmnMl7UBm062qzIyNg4diz5bipXCY= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1705090155; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2rAd6q/NlfW3sSt27roSWqbt+LyZQe/MRbWJNqVkMXc=; b=ZVuUS2mnnXoTrhZxtUYNWbXxAjwkONjwWqwvGpFzZOsxP10xpuAElfczvRwu3GJrYi6sK9 97mlZ8JGnMZia6DMv9k8kKzjsO79GfNok5evTizBUECf3oXAMq4I8K3xUNdHZkBhGqsKOQ aeadzMd+o1hXmHF0sykmALZ5YFEcpGI= Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-649-3vOT1-hNPdOyJnSDkut_XA-1; Fri, 12 Jan 2024 15:09:13 -0500 X-MC-Unique: 3vOT1-hNPdOyJnSDkut_XA-1 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-7817253831cso959997685a.0 for ; Fri, 12 Jan 2024 12:09:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705090152; x=1705694952; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=2rAd6q/NlfW3sSt27roSWqbt+LyZQe/MRbWJNqVkMXc=; b=j6thKUqSgXTJq+prw4kew//z7GIbTJJM7ntmJVBQxWWyThnwUivfW/6GW4JIkHnJv4 UBrj2swfeIm06DoIxztz2pTDt18pxCVSQarhYgVbfRbtM1wrI9ePZcm/DaViLHNqVM8B diTgyvqh3i0G2sxTipCOYfGiNraZpo9DgxUL6MYGjB0aBiCQYe4LNb2ZKIxNaVwjSOIT ITcZtslcAWwsWbxVl+2GQsPt9Fg1hOLXDWJqL6aYHWwrZObJR7h5Daih72TPOSbsGOzL mdLxPfAMTAVE3Boh2SVNoSWQFB2MkiSL9m0ZcqDHjg/RdIK7BeELPNvNmSw7pAtYDLIc ioCg== X-Gm-Message-State: AOJu0YyRKRHwsQ5yXsovYFbmKDUL0AsDPgu9+G1BMS1nHCP4mJ/vrxM8 8lBWpnjun+q074dv2bnZnjXS9lnIqdanEuRGjIqEOtQSF47cqSgOvlLK+fW2JUMGuCN9/A+GHbM 24ShYiU9e5Yt5MTuXgu1d4lb9qwCdcP/bc9QKkwTEHpF8hl6P3w69h0Wob9gL0oGzZLz/aaGvcg Ch5ZmuA/s= X-Received: by 2002:a05:620a:4ac6:b0:77f:2a61:e515 with SMTP id sq6-20020a05620a4ac600b0077f2a61e515mr2181579qkn.35.1705090151982; Fri, 12 Jan 2024 12:09:11 -0800 (PST) X-Received: by 2002:a05:620a:4ac6:b0:77f:2a61:e515 with SMTP id sq6-20020a05620a4ac600b0077f2a61e515mr2181568qkn.35.1705090151745; Fri, 12 Jan 2024 12:09:11 -0800 (PST) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id w14-20020ae9e50e000000b007833008dae8sm1290826qkf.98.2024.01.12.12.09.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jan 2024 12:09:11 -0800 (PST) From: Patrick Palka To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Patrick Palka Subject: [PATCH 1/2] libstdc++: Use C++23 deducing this in std::bind_front Date: Fri, 12 Jan 2024 15:09:08 -0500 Message-ID: <20240112200909.2649164-1-ppalka@redhat.com> X-Mailer: git-send-email 2.43.0.283.ga54a84b333 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-14.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, URI_HEX autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787920688675237143 X-GMAIL-MSGID: 1787920688675237143 This simplifies the operator() of _Bind_front using C++23 deducing this, allowing us to condense multiple nearly identical operator() overloads into one. In passing I think we can remove _Bind_front's defaulted special member declarations and just let the compiler implicitly generate them for us. libstdc++-v3/ChangeLog: * include/std/functional (_Bind_front): Remove =default special member function declarations. (_Bind_front::operator()): Implement using C++23 deducing this when available. * testsuite/20_util/function_objects/bind_front/111327.cc: Adjust testcase to expect better errors in C++23 mode. --- libstdc++-v3/include/std/functional | 20 +++++++++++++------ .../function_objects/bind_front/111327.cc | 14 +++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index 8d50a730889..190cea612bb 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -934,12 +934,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_bound_args(std::forward<_Args>(__args)...) { static_assert(sizeof...(_Args) == sizeof...(_BoundArgs)); } - _Bind_front(const _Bind_front&) = default; - _Bind_front(_Bind_front&&) = default; - _Bind_front& operator=(const _Bind_front&) = default; - _Bind_front& operator=(_Bind_front&&) = default; - ~_Bind_front() = default; - +#if __cpp_explicit_this_parameter + template + constexpr + invoke_result_t<__like_t<_Self, _Fd>, __like_t<_Self, _BoundArgs>..., _CallArgs...> + operator()(this _Self&& __self, _CallArgs&&... __call_args) + noexcept(is_nothrow_invocable_v<__like_t<_Self, _Fd>, + __like_t<_Self, _BoundArgs>..., + _CallArgs...>) + { + return _S_call(std::forward<_Self>(__self), _BoundIndices(), + std::forward<_CallArgs>(__call_args)...); + } +#else template requires true constexpr @@ -997,6 +1004,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template void operator()(_CallArgs&&...) const && = delete; +#endif private: using _BoundIndices = index_sequence_for<_BoundArgs...>; 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 43b56ca4378..5fe0a83baec 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 @@ -17,24 +17,26 @@ struct G { int main() { auto f0 = std::bind_front(F{}); - f0(); // { dg-error "deleted" } + f0(); // { dg-error "deleted|no match" } std::move(f0)(); std::as_const(f0)(); std::move(std::as_const(f0))(); auto g0 = std::bind_front(G{}); - g0(); // { dg-error "deleted" } - std::move(g0)(); // { dg-error "deleted" } + g0(); // { dg-error "deleted|no match" } + std::move(g0)(); // { dg-error "deleted|no match" } std::move(std::as_const(g0))(); auto f1 = std::bind_front(F{}, 42); - f1(); // { dg-error "deleted" } + f1(); // { dg-error "deleted|no match" } std::move(f1)(); std::as_const(f1)(); std::move(std::as_const(f1))(); auto g1 = std::bind_front(G{}, 42); - g1(); // { dg-error "deleted" } - std::move(g1)(); // { dg-error "deleted" } + g1(); // { dg-error "deleted|no match" } + std::move(g1)(); // { dg-error "deleted|no match" } std::move(std::as_const(g1))(); } + +// { dg-error "no type named 'type' in 'struct std::invoke_result" "" { target c++23 } 0 }