From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x229.google.com (mail-oi1-x229.google.com [IPv6:2607:f8b0:4864:20::229]) by sourceware.org (Postfix) with ESMTPS id 167CB383569C for ; Tue, 15 Nov 2022 05:48:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 167CB383569C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-oi1-x229.google.com with SMTP id l127so13853107oia.8 for ; Mon, 14 Nov 2022 21:48:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=vH70ADlKY56toEWE3Y7zQujSLNVeiXUyse2c/wEV6l8=; b=Zuwyf9OstRvpJzBDt4ug8Fi4SQsX3ZgBU7hQqA7rOby1lBq95CgHJOGDHPMbSKx3k2 cCq3DGjxzxdVXrspsDBwxxRk2YTm4GCKfBzjmRQ4WySFcxfuFpGb0lqu+poKW/pXHrTn aAn5GPzpxOezaP3tA0O6VUX1Ko5KsutI0EeuIoTDcMg3cIpLpkTYPX9bvRiZtD5Zzaf5 Ik9bnf1eYIImMqubPnUNxdH+qqV8By6d9ihxjO1IAFor/kb1co+vIxC1PZKzR4ZIo44Q uwGh7Epp2OwiHOqQQowuYa2el7oID17J73RbMP+JLL4jw/teT/Ib3Np3u9ybAJA0P4RN D5hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=vH70ADlKY56toEWE3Y7zQujSLNVeiXUyse2c/wEV6l8=; b=5AkJjDEbEVlCNk17JR9iegM9Rqt61lyDNfgZFAGdUb79uq7wF1DFK2gjohLFKE8enX 1T6jCOJOO255S4ylKSXD+y7+yM5O5gbKZYDDxjLDZeyHCnfH/217tcJuVBvjPt89pINF bPfTA8BqwAC+DpIH/IwtMIda3XtF1j4Lqtld8mKE9pDDx9OE4KoyfdUphDdA2izqzLCF H4by+CjlkY+h0r/TLwIuE8mkH8o5euA2VmdRmxpA9CGoPe3p4PRupPqhmAYSKm9GUbCH uRhAnT38uiHWC1bSaCqiAugMoH5j/dYCxHzD08aqFVKezqg5E+0CySoQxQEQOksWRi0Z hCBA== X-Gm-Message-State: ANoB5pk9MvmPs3VtuH4g7kmnu3X1gH5skMtBQeKxCd5JuLdnvvlBZCL+ 8dCzxx+xkZL/wUrwkIdqazgk2KluxHVhwL0ENe54FeJV1MLQ3VQ= X-Google-Smtp-Source: AA0mqf63gy0lEETM+KVg9UtFLayX9MQ/GZAbAz0EacF6b2ZCvhYcxhrHqSEC0rjRRaxmcJZg7z0HOmvxB0yE59608io= X-Received: by 2002:a05:6808:158b:b0:35a:774e:d352 with SMTP id t11-20020a056808158b00b0035a774ed352mr18601oiw.193.1668491285727; Mon, 14 Nov 2022 21:48:05 -0800 (PST) MIME-Version: 1.0 From: Yubin Ruan Date: Tue, 15 Nov 2022 13:47:55 +0800 Message-ID: Subject: Guaranteed copy elision To: gcc-help@gcc.gnu.org Content-Type: multipart/alternative; boundary="00000000000065aadc05ed7be665" X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP 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: --00000000000065aadc05ed7be665 Content-Type: text/plain; charset="UTF-8" Hi, As mentioned in cppreference: https://en.cppreference.com/w/cpp/language/copy_elision it is guaranteed in c++17 that copy elision must be applied for some cases like SomeBigObject SomeBigObject::Factory(...) { SomeBigObject local; ... return local; } (examples taken from https://abseil.io/tips/11 ) but not for cases like SomeBigObject SomeBigObject::Factory(...) { SomeBigObject local1; SomeBigObject local2; ... if (cond_1) { return local1; } else { return local2; } } For a c++ user, it is somewhat difficult to be 100% sure that copy elision / NVO is applied to the functions' return value above. To be sure that a object would not be copied, we usually write something like SomeBigObject obj; func(&obj); while in most of the cases a one-liner like SomeBigObject obj = func(); would suffice. Is there any language facility to help us guarantee that at compile time (such as some kind of static_assert() ) so that we can be confident writing those one-liner ? I know that marking the copy constructor deleted would do the good, but copy is needed in some cases. Thanks Yubin --00000000000065aadc05ed7be665--