220 38183 <a77b6fa8-985a-4d79-a53a-28f2602733b3@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: Gareth Lloyd <gareth@ignition-web.co.uk>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Restricting the valid use of certain methods upon
 temporary objects
Date: Thu, 24 May 2018 15:48:48 -0700 (PDT)
Lines: 105
Approved: news@gmane.org
Message-ID: <a77b6fa8-985a-4d79-a53a-28f2602733b3@isocpp.org>
References: <f3abea5e-9d3a-407f-be79-48cc5cfd3ddc@isocpp.org>
 <CANh8DEnPS+FMpWpAp1WLe-9H1twSc30w7bQph_MgBMK0FM0t8A@mail.gmail.com>
 <81b39e17-fe78-41ab-b9c9-3b830e32dbf5@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_9727_2043010048.1527202128598"
X-Trace: blaine.gmane.org 1527202003 24824 195.159.176.226 (24 May 2018 22:46:43 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Thu, 24 May 2018 22:46:43 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCTJTSELJQINDAU53ACRUBBGFLFAE@isocpp.org Fri May 25 00:46:39 2018
Return-path: <std-proposals+bncBCTJTSELJQINDAU53ACRUBBGFLFAE@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-vk0-f69.google.com ([209.85.213.69])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBCTJTSELJQINDAU53ACRUBBGFLFAE@isocpp.org>)
	id 1fLz0J-0006Md-3n
	for gclcip-std-proposals@m.gmane.org; Fri, 25 May 2018 00:46:39 +0200
Original-Received: by mail-vk0-f69.google.com with SMTP id c190-v6sf2242405vke.15
        for <gclcip-std-proposals@m.gmane.org>; Thu, 24 May 2018 15:48:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to:message-id:in-reply-to:references:subject:mime-version
         :x-original-sender:reply-to:precedence:mailing-list:list-id
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=z0Gfost9mNJNmI1gUJeILKIOVNxM9cnHL/+xX4b4L/Y=;
        b=owqoor17Zei2pxtsNK9A/jVUU64KmaBGyuvIRePaCu3vHVrhQdTcXfMwKK8ubrl24k
         6d6omrsDNGzvgpMel2dnYrDpRtElB/5tVQ/aqVVcFY3tGYS7PcCnXHTDEf6bZbucvVXA
         Ct77Tc6S6JxZ9AU0os42W96uZsHOUFJagihYgREJQIKa3MMFWQ7Ed1cE7Tx/WcKa7DrI
         YA+WDjdZ6VHm459tSJTF6YzIF8E94aNN1hT+8RrPmxBP83eICWL8KTPweGW83XYWBi1I
         wejBVUfMZ1oRtHbA+ElRUSt2vs9zw+SXPeSLCv+S6KHUh0nXv/fILiJi/CxHjBbid8zw
         4tHQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:message-id:in-reply-to:references
         :subject:mime-version:x-original-sender:reply-to:precedence
         :mailing-list:list-id:x-spam-checked-in-group:list-post:list-help
         :list-archive:list-subscribe:list-unsubscribe;
        bh=z0Gfost9mNJNmI1gUJeILKIOVNxM9cnHL/+xX4b4L/Y=;
        b=Ebbe6J4xmoSQIp7YWiIOKBlSYBedR9q3WQlBj48gWlVdfIlnV43RX3j9n0AE3S9Dxk
         /ms3isXnm00T1MZjqe7mfGA9u/SfcCy9ZXCq10fLzqGjjc0mkm5IzKKv0ezqkLwjN+XV
         BD2dNWNU/cKE38cosSzVs1leI+X11FW1J0cJ31ntMFMuCNFDjj6KXNaMYV0PoJoT6/Lr
         r9yc3ERcxR18225dAjE3uQGctEH7dNBsNOEpZdDG8cm1wTpF0k13q0DxyfKr+ENbeG0a
         9ODcBhvCFRucLGM7CirJnMswjMkp0qml5YA1+mY6EeGxhJRcKMCqh34ghNf0pryYw1bI
         fVSA==
X-Gm-Message-State: ALKqPwe6WdJyKPHHyhz3T+MGc278s0cgJ0q1oihrwv2j/3/5Bs4LLKOL
	aHVY50PHytU4IDOnxLP1fPu4QA==
X-Google-Smtp-Source: AB8JxZpclYxHyQC04wIqHPUCfuS4GHAxzIat7q2khg5XCnLVMIwCClgehE/n8TbsLGSPY+7hOzsVNQ==
X-Received: by 2002:ab0:600b:: with SMTP id j11-v6mr4015476ual.34.1527202130193;
        Thu, 24 May 2018 15:48:50 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 2002:a1f:19d6:: with SMTP id 205-v6ls9947667vkz.12.gmail; Thu, 24
 May 2018 15:48:49 -0700 (PDT)
X-Received: by 2002:a1f:9bd1:: with SMTP id d200-v6mr1377858vke.6.1527202129032;
        Thu, 24 May 2018 15:48:49 -0700 (PDT)
In-Reply-To: <81b39e17-fe78-41ab-b9c9-3b830e32dbf5@isocpp.org>
X-Original-Sender: gareth@ignition-web.co.uk
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <std-proposals.isocpp.org>
X-Spam-Checked-In-Group: std-proposals@isocpp.org
X-Google-Group-Id: 399137483710
List-Post: <https://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <https://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <https://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>,
 <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:38183
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/38183>

------=_Part_9727_2043010048.1527202128598
Content-Type: multipart/alternative; 
	boundary="----=_Part_9728_79512115.1527202128599"

------=_Part_9728_79512115.1527202128599
Content-Type: text/plain; charset="UTF-8"

My example which returned references should be ok as they cause a copy on 
assignment, which is a way of breaking the dependency chain. Bellow is a 
corrected example.

auto e1 = example{}.dependent().dependent().dependent(); \\ fine
auto e2 = example{}.dependent().not_dependent().dependent(); \\ fine
auto e3 = example{}.dependent().dependent().not_dependent(); \\ fine

decltype(auto) e4 = example{}.dependent().dependent().dependent(); \\ compile 
error
decltype(auto) e5 = example{}.dependent().not_dependent().dependent(); \\ compile 
error
decltype(auto) e6 = example{}.dependent().dependent().not_dependent(); \\ 
fine

-- 
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a77b6fa8-985a-4d79-a53a-28f2602733b3%40isocpp.org.

------=_Part_9728_79512115.1527202128599
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><span><span>M</span></span><span><span><span><span><s=
pan><span>y example which returned references should be ok as they cause a =
copy on assignment, which is a way of breaking the dependency chain. Bellow=
 is a corrected example.<br></span></span></span></span></span></span></div=
><div><span><span><br></span></span></div><div><span><span>auto e1 =3D </sp=
an></span><span><span><span><span>example{}</span></span></span></span><spa=
n><span><span><span>.</span></span></span></span><span><span><span><span>de=
pendent()</span></span></span></span><span><span><span><span>.</span></span=
></span></span><span><span><span><span>dependen<wbr>t()</span></span></span=
></span><span><span><span><span>.</span></span></span></span><span><span><s=
pan><span>dependent(); \\ fine</span></span></span></span></div><div><span>=
<span>auto e2 =3D </span></span><span><span><span><span>example{}</span></s=
pan></span></span><span><span><span><span>.</span></span></span></span><spa=
n><span><span><span>dependent()</span></span></span></span><span><span><spa=
n><span>.</span></span></span></span><span><span><span><span><span><span>no=
t_<wbr>dependent</span></span></span></span></span></span><span><span><span=
><span>()</span></span></span></span><span><span><span><span>.</span></span=
></span></span><span><span><span><span>dependent(); \\ fine</span></span></=
span></span></div><div><span><span>auto e3 =3D </span></span><span><span><s=
pan><span>example{}</span></span></span></span><span><span><span><span>.</s=
pan></span></span></span><span><span><span><span>dependent()</span></span><=
/span></span><span><span><span><span>.</span></span></span></span><span><sp=
an><span><span>dependen<wbr>t()</span></span></span></span><span><span><spa=
n><span>.</span></span></span></span><span><span><span><span><span><span>no=
t_dependent</span></span></span></span></span></span><span><span><span><spa=
n>(); \\ fine</span></span></span></span></div><div><br></div><div><div><sp=
an><span>decltype(auto) e4 =3D </span></span><span><span><span><span>exampl=
e{}</span></span></span></span><span><span><span><span>.</span></span></spa=
n></span><span><span><span><span>dependent()</span></span></span></span><sp=
an><span><span><span>.</span></span></span></span><span><span><span><span>d=
ependen<wbr>t()</span></span></span></span><span><span><span><span>.</span>=
</span></span></span><span><span><span><span>dependent(); \\ </span></span>=
</span></span><span><span><span><span>compile error</span></span></span></s=
pan></div><div><span><span>decltype(auto) </span></span><span><span>e5 =3D =
</span></span><span><span><span><span>example{}</span></span></span></span>=
<span><span><span><span>.</span></span></span></span><span><span><span><spa=
n>dependent()</span></span></span></span><span><span><span><span>.</span></=
span></span></span><span><span><span><span><span><span>not_<wbr>dependent</=
span></span></span></span></span></span><span><span><span><span>()</span></=
span></span></span><span><span><span><span>.</span></span></span></span><sp=
an><span><span><span>dependent(); \\ </span></span></span></span><span><spa=
n><span><span>compile error</span></span></span></span></div><span><span>de=
cltype(auto) </span></span><span><span>e6 =3D </span></span><span><span><sp=
an><span>example{}</span></span></span></span><span><span><span><span>.</sp=
an></span></span></span><span><span><span><span>dependent()</span></span></=
span></span><span><span><span><span>.</span></span></span></span><span><spa=
n><span><span>dependen<wbr>t()</span></span></span></span><span><span><span=
><span>.</span></span></span></span><span><span><span><span><span><span>not=
_dependent</span></span></span></span></span></span><span><span><span><span=
>(); \\ fine</span></span></span></span><br><span><span><span><span></span>=
</span></span></span><span><span><span><span></span></span></span></span></=
div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a77b6fa8-985a-4d79-a53a-28f2602733b3%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/a77b6fa8-985a-4d79-a53a-28f2602733b3=
%40isocpp.org</a>.<br />

------=_Part_9728_79512115.1527202128599--

------=_Part_9727_2043010048.1527202128598--

.
