From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <38EinYggKCjsdmolZfaXdlldib.ZljifYXYfdXfiplroZbtXob.lod@flex--gprocida.bounces.google.com> Received: from mail-wm1-x349.google.com (mail-wm1-x349.google.com [IPv6:2a00:1450:4864:20::349]) by sourceware.org (Postfix) with ESMTPS id 79271385275E for ; Mon, 13 Jun 2022 14:25:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 79271385275E Received: by mail-wm1-x349.google.com with SMTP id l3-20020a05600c1d0300b0039c7efa2526so3289426wms.3 for ; Mon, 13 Jun 2022 07:25:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=M7fzUQ3njohGAfsdLIs1NrbAwku9rzz9KivTgw55q1A=; b=fy0/UsoWjlOGVbh6gGsAo4by0wfqboTNaTCQRp3y72CfpqFcD8Xfyo0IWXsl8/w2A+ +0vZTin4ds4eit17PBQUeiwjb+bBC+MrOOwCER552QWoKPeU4Tl4skmcPyRlg2zIysMZ wGPINKVs7xj8gZS5tLWaXI2bP4Hch3KrsjuEvmwXIwWz3NtS3nzAi2kS+EbfGRlv3k9j QRNY3LIWP6QNTKaG3GEDGy72mkcS7MBdAEaem2v3tlBu1x6syJnIHD1AvC+lXq+sgSNb XtwKZLvoCHLTmY78cPYZBm8DKrkpktR8MrvTVsaGdy9LzCV92NqjYblfpDhn71xZLcpY nmyg== X-Gm-Message-State: AJIora8azvG6MLVUqAbUYqnM/Qw0fRPx8EwWjxtWbRvWkZICWCJj1gGZ GNJgvRFJ6hhrJt3Gtur7nHvz4y9q28O6UyMmRqK/veo1X1EBFkG1Wce7y3/zH43q0x/Dkbh1zwi iJPr1mq9NtaH1AwJ4cZIrcY8fWS1mRUSPrLa7NXJ/Ku3jZwbr7EBPEcz/CZWtf2cmBrtPNk4= X-Google-Smtp-Source: AGRyM1tLacB7mriaXkDpiy2ypcRWv7Ec6m8FN/biB918ZOpwFz23f9kDR6B04eLmq2tFRVxRgmuLKX8SUHl0GQ== X-Received: from tef.lon.corp.google.com ([2a00:79e0:d:209:8336:7478:639d:964a]) (user=gprocida job=sendgmr) by 2002:adf:d1c6:0:b0:218:51ae:8812 with SMTP id b6-20020adfd1c6000000b0021851ae8812mr157354wrd.178.1655130352132; Mon, 13 Jun 2022 07:25:52 -0700 (PDT) Date: Mon, 13 Jun 2022 15:25:31 +0100 In-Reply-To: <20220321160221.1372398-1-gprocida@google.com> Message-Id: <20220613142533.3676501-3-gprocida@google.com> Mime-Version: 1.0 References: <20220321160221.1372398-1-gprocida@google.com> X-Mailer: git-send-email 2.36.1.476.g0c4daa206d-goog Subject: [PATCH v5 2/4] optional: minor improvements From: Giuliano Procida To: libabigail@sourceware.org Cc: dodji@seketeli.org, kernel-team@android.com, gprocida@google.com, maennich@google.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-22.1 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2022 14:25:56 -0000 This change makes minor improvements to the optional class used with pre-C++17 compilers. - adds operator== and operator!= - adds various missing noexcept (but not constexpr) decorations - defines operator bool in terms of has_value Note that some constexpr decorations would require C++17 anyway. * include/abg-cxx-compat.h (optional): Add operator== and operator!=. Add noexcept decorations. Tweak operator bool. Reviewed-by: Matthias Maennich Signed-off-by: Giuliano Procida --- include/abg-cxx-compat.h | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/include/abg-cxx-compat.h b/include/abg-cxx-compat.h index 443905c7..5c5943d0 100644 --- a/include/abg-cxx-compat.h +++ b/include/abg-cxx-compat.h @@ -45,7 +45,7 @@ public: optional(const T& value) : has_value_(true), value_(value) {} bool - has_value() const + has_value() const noexcept { return has_value_; } @@ -67,19 +67,19 @@ public: } const T& - operator*() const + operator*() const& noexcept { return value_; } T& - operator*() + operator*() & noexcept { return value_; } const T* - operator->() const + operator->() const noexcept { return &value_; } T* - operator->() + operator->() noexcept { return &value_; } optional& @@ -90,9 +90,27 @@ public: return *this; } - explicit operator bool() const { return has_value_; } + explicit operator bool() const noexcept { return has_value(); } }; +template +bool +operator==(const optional& lhs, const optional& rhs) +{ + if (!lhs.has_value() && !rhs.has_value()) + return true; + if (!lhs.has_value() || !rhs.has_value()) + return false; + return lhs.value() == rhs.value(); +} + +template +bool +operator!=(const optional& lhs, const optional& rhs) +{ + return !(lhs == rhs); +} + #endif } -- 2.36.1.476.g0c4daa206d-goog