From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 23DC6385843A for ; Fri, 12 Jan 2024 20:09:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 23DC6385843A 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 23DC6385843A 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=1705090156; cv=none; b=SEr7ZSVoNkIgZ7bqRXrqwcEAcZ92kfSiU5MecJXFzWaKATUeov8w238AR4fmNpHimcTVc/9TOX+B1Bp6CA/gsIPX8xiUss3YdVSzqLfTSdeRYNX5iJ13Raqm0oTK2M5d0Gr/3KVpKu0RNrR5CYW9WomSbikggpeB1drltvMYLug= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705090156; c=relaxed/simple; bh=m3Q0v/mBGTLjnHcaU/9cdPNFOgVNOq0Pm5PQiKOi3ps=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=mZTFEq9qlucSGINVstij46jgBToPxngBeflU74vYNl8vlPz3K1AnAof3RJrHI37jH+Cwsfcw4A0DVu+QVSploomQWc7x0nA73GuRK/bTJz6sGB/0hc2pDnPPz6dEQVqnPnqoTeWerf32haUDXVhuexgt+uYq/WTVNH4woaqUmOs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1705090153; 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=cGHb/XLa9ub9MRwpmQ5PTSOvAu+NIII9DvOnjAAxEI3gx+g6LaalHQa5ZljuMkttQD8OSi 2hCncjPxbr2VZXnukeuDLvwnhwCmvNtW4lXBDM6BQqMHJTiab0tPb8gcA2Fu2M7eJ3/HMm 23ZUSumNzwM794WwiMtK+40xFu2wGYk= Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-583-hrqKGBe3OUm7xt1x_pbbdw-1; Fri, 12 Jan 2024 15:09:12 -0500 X-MC-Unique: hrqKGBe3OUm7xt1x_pbbdw-1 Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-680f62983acso120870986d6.0 for ; Fri, 12 Jan 2024 12:09:12 -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=gCwqlC7Q1kkJ/aUxFu0JyOCF5a9fsC6D/pHueBnvZFoW+Z6F4ePF45+fiiV4jdvaF5 EoFq1a30DpFIpLHyA7i+8M9iv5oqD5/XqfKBgc6Eh33+cuGe4lxvjsLI+4UWASSpdmTz UXrIdyK1B5WmIGrQyWtpNXIfI5N9EtIvgrsnAyBWzp6cASGSsjeCEld0Mbf1pn7U3D7H h0/4wlXtuXXCJHk23TThQXe35CRh/LiX89QYfLwUGBCbsyAYalw/lOKARRkkZaKYxP11 Q4fMsrW3PGZm5l3WApxXABGdglj76Af7OQNIP2V3ZpHryvOTsD2gMGYRYJztYk4NG4Ml QRnQ== X-Gm-Message-State: AOJu0YxFRQ6WzYn258HNxHdLx5UF28zy1MDAA9jig6SzRHzm8Tg3+YcN 6mkUr4ZkvqNueVlBE8U2uFJ5h3ahKKCK/riKTxD4nOA2TUgAQx3mliAbLQ6KknwwrNz9O2c2gpc 93Xv3E7+RSFyTRpZmQfRdbv8= X-Received: by 2002:a05:620a:4ac6:b0:77f:2a61:e515 with SMTP id sq6-20020a05620a4ac600b0077f2a61e515mr2181576qkn.35.1705090151953; Fri, 12 Jan 2024 12:09:11 -0800 (PST) X-Google-Smtp-Source: AGHT+IH7oAhyYAZY1VM97SS4LPfXUBOYQPGr+az59TPv7c1qCbom/CCqMaVLPjWSjXpRcBEKCW+4mg== 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 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-13.9 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,RCVD_IN_SORBS_WEB,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,URI_HEX autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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 } -- 2.43.0.283.ga54a84b333