220 36619 <4270ffec-ccc7-4abd-836d-213db296be84@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: Nicol Bolas <jmckesson@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Static analysis and the future of C++
Date: Sun, 14 Jan 2018 08:03:45 -0800 (PST)
Lines: 304
Approved: news@gmane.org
Message-ID: <4270ffec-ccc7-4abd-836d-213db296be84@isocpp.org>
References: <0087c1a4-0b36-40ca-8d43-5bfaf0af62ca@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_2965_1898407645.1515945825171"
X-Trace: blaine.gmane.org 1515945708 7870 195.159.176.226 (14 Jan 2018 16:01:48 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Sun, 14 Jan 2018 16:01:48 +0000 (UTC)
Cc: mihailnajdenov@gmail.com
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCEKFTV6ZUMBBYX65XJAKGQEP4MFUBQ@isocpp.org Sun Jan 14 17:01:44 2018
Return-path: <std-proposals+bncBCEKFTV6ZUMBBYX65XJAKGQEP4MFUBQ@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-ua0-f199.google.com ([209.85.217.199])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBCEKFTV6ZUMBBYX65XJAKGQEP4MFUBQ@isocpp.org>)
	id 1eakj9-0001ib-K9
	for gclcip-std-proposals@m.gmane.org; Sun, 14 Jan 2018 17:01:43 +0100
Original-Received: by mail-ua0-f199.google.com with SMTP id i9sf7738766uak.13
        for <gclcip-std-proposals@m.gmane.org>; Sun, 14 Jan 2018 08:03:47 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to:cc: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=HIYYzDLZY0g2zTKWcuwPkTieg+Q9YYDmxjz5ljRUGZw=;
        b=yzwdmogs83d2gAWbqGWLTs27CAIchNcZmbvyyhtlaN1sNwnTOQBeR7Tv8qHXFrO6Th
         yPfNfMzQNz7+6aysvQkifX5qlQmE1rFSsXruwWcDv/xlXx2XfkWEQlq+5iCPLkP6xfXs
         94Ql2v+67OEff6rgj4IHEoHVRmA/GRKg3sDwWUJQPDYCiEYPmLeA/F/XREQE1TGmMAxl
         OZzhL3uqUvvATBdDx8mUlGQa1oNp2lG9KCB2bhMLusQhLkoGstJNFzIxAajOY4sETzmq
         8wkE3GqB9AkEpiIA7si2AN2NB2VYZIsC9OPQg7ji34/8SYbSq55MG95XSP3c3wY/29HR
         jnPw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:cc: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=HIYYzDLZY0g2zTKWcuwPkTieg+Q9YYDmxjz5ljRUGZw=;
        b=Q4iVytkBWHg+VfMH+QwGEDjLxHYsvMQ6KqwCkBMcaEf2BgxGMjU8llytC5AgVrwTsP
         Iwd20Bdzo5c2la63w6X+z5Cn+qMUqj9L4S3yUDnhlzBvoSh0MJ0rWeGjdxMTrjb02y0O
         PocGDy3fI3GJEz2WcNBrwvUVcg0jK/Sf1yiQCICF9p4j2N5iu9E3/sYXpPisg0gW6rFd
         KKXk5StJnaMPqB6xF0P+fpvF749oisL/wKg8rPJQojczrLP27qvsGgi9eRJ/siQGtUmP
         9+9GuzsyhWGJ37+zVRMFKcuxpDL7lH/E/wTTRhOXFNDLduhQ2Zdhb1X9PO/TuZ5dASCc
         3EyA==
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:cc: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=HIYYzDLZY0g2zTKWcuwPkTieg+Q9YYDmxjz5ljRUGZw=;
        b=kcEPkrD84vsne+M17+Di/khQ+gNeGWB0vYh67+IZdLnXI3OpxE925vounzSL3gAzH+
         CFc3FHaXMHB+zOCxl/LgMq6Tfravf+sPCZNTB6YVXpb11efo95JLEyZnY09WIVsJm716
         XagT2/kVylbtjT3IMGJAgTrZjYKC8LDv6Dz4MI/BfL4CRSHtXn0vYTwee1yJj3FL6ilX
         qluhPZ4rxpL9uJtxo2Piab2mTw4aEDGAyvjhtXQh+bnYdlLjR4QOgLXI32gAY2gJjPdD
         4MDf8Qfu+WWypLK+beBiw4t4j81Azh/Mmep+IWNFjo/4nlzh46UvHr23pCNXHla8zeR5
         GISQ==
X-Gm-Message-State: AKwxytfOPka7YxnzRHp9xXhMv7E5I52UV5XBNHf9RIcQV3QTqnLw95Rq
	8KrD6mdYwKP6LseZuRkQQfbj4A==
X-Google-Smtp-Source: ACJfBovqz3DvIMvmUC1J0hlUqCT0Ikuy55rP4a0gUGWxSQ5h90/Aa/GI4ZfQaxnT9W63+LIr9dbstg==
X-Received: by 10.176.73.81 with SMTP id a17mr8768568uad.88.1515945827307;
        Sun, 14 Jan 2018 08:03:47 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.159.59.2 with SMTP id i2ls1730595uah.6.gmail; Sun, 14 Jan 2018
 08:03:46 -0800 (PST)
X-Received: by 10.31.161.69 with SMTP id k66mr3485726vke.10.1515945825758;
        Sun, 14 Jan 2018 08:03:45 -0800 (PST)
In-Reply-To: <0087c1a4-0b36-40ca-8d43-5bfaf0af62ca@isocpp.org>
X-Original-Sender: jmckesson@gmail.com
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:36619
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/36619>

------=_Part_2965_1898407645.1515945825171
Content-Type: multipart/alternative; 
	boundary="----=_Part_2966_810626191.1515945825172"

------=_Part_2966_810626191.1515945825172
Content-Type: text/plain; charset="UTF-8"

On Sunday, January 14, 2018 at 8:40:26 AM UTC-5, mihailn...@gmail.com wrote:
>
> Hello, 
> In recent years there is a boom of static analysis - from new languages 
> like Rust and Swift to the powerful tools, provided by C++ compilers.
>
> However I don't see it C++ language *mandating* any of these.
>

.... why would it?

The standard defines behavior. The standard decides what is valid language 
and how it behaves.

Static analysis is for looking at what is valid language and deciding 
whether or not it's likely that the behavior your code gets is the behavior 
you actually wanted. If you make a change to the language, you aren't "using 
static analysis"; you've made something *linguistically* impossible.

It's like the difference between saying "we shouldn't swear" vs. removing 
swear words from the English language entirely.

Whether compilers include static analysis tools, and how they are used, is 
out-of-bounds for the standard. Though you could think of contracts as a 
mechanism to make static analysis easier, that's more a useful additional 
thing that contracts do.

I have a question - is this something the committee is looking into? Is 
> there a working group for this? 
> If a tool is a lifesaver, why is it not mandatory - who does not what to 
> save lifes?
>
> I strongly believe bringing more (any?) static analysis into the language 
> is away to keep it modern and relevant, especially, considering C++ very 
> static language and has a lot of compile-time information the tools can 
> work with.
>
> Any answers and thoughts are welcome.
>
> Now on a concrete idea - to *use static analysis to make *_view classes 
> safe(er).*
>

This is the wrong tool for the job. The ideal solution is to make such code *ill 
formed*, not to rely on "static analysis" to make compilers give a warning 
or something.

Or better yet, to change the language to make such code *functional*. After 
all, if you're going to go through the effort of tagging a function with 
this attribute, why not tag it with a keyword that extends the lifetime of 
the temporary correctly?

A_view(extend A&& arg) : _a(&arg) {}

....

A_view ref(A{}); //A{}'s lifetime is extended to that of the declaration's 
enclosing scope.




Here is a suggestion:
>
> struct A_view
> {
>   A_view( [[dependent_lifetime]]  A&& arg) : _a(&arg) {}
>   A* _a;
> };
>
> Now, given the code above using A_view, after ~A() is called on the 
> variable arg points to. will be marked as an error:
>
> A_view ref(A{}); //< OK, no use of ref
>
> A_view (A{}).func(); //< OK , A outlives ref
>
> A_view ref(A{});
> ref.func(); //< error/warning, ref used after A is destroyed
>
> I believed this can be enforced by *any* compiler, as* long as *these 
> limitations apply.
> 1) A_view is not heap allocated 
> 2) We forbid *all* uses of ref, not just uses involving _a;
>
> These two limitations are there to avoid tracking lifetime through 
> pointers.
>
> Lifetime contract is exclusively b/w ref and *(&arg). 
> Considering the compiler is responsible to destroy both of these, it 
> *should* be possible to give a error/warning if variable ref is used 
> after variable *(&arg) is destroyed.
> Copies of ref do not contribute to lifetime tracking - assumed is the 
> view outlives the viewed the same way it is assumed when the view is 
> created from a non-rvalue.
>
> Comments are more then welcome, both on the broader topic about mandating 
> static analysis and the concrete proposal.
>
> Thanks 
> Mihail Naydenov
>

-- 
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/4270ffec-ccc7-4abd-836d-213db296be84%40isocpp.org.

------=_Part_2966_810626191.1515945825172
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Sunday, January 14, 2018 at 8:40:26 AM UTC-5, mihailn..=
..@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;marg=
in-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"=
ltr"><div>Hello, </div><div>In recent years there is a boom of static analy=
sis - from new languages like Rust and Swift to the powerful tools, provide=
d by C++ compilers.</div><div><br></div><div>However I don&#39;t see it C++=
 language <i>mandating</i> any of these.</div></div></blockquote><div><br><=
/div><div>... why would it?</div><div><br></div><div>The standard defines b=
ehavior. The standard decides what is valid language and how it behaves.</d=
iv><div><br></div><div>Static analysis is for looking at what is valid lang=
uage and deciding whether or not it&#39;s likely that the behavior your cod=
e gets is the behavior you actually wanted. If you make a change to the lan=
guage, you aren&#39;t &quot;<span style=3D"display: inline !important; floa=
t: none; background-color: transparent; color: rgb(34, 34, 34); font-family=
: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font=
-style: normal; font-variant: normal; font-weight: 400; letter-spacing: nor=
mal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px;=
 text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal;=
 word-spacing: 0px;">using </span>static analysis&quot;; you&#39;ve made so=
mething <i>linguistically</i> impossible.</div><div><br></div><div>It&#39;s=
 like the difference between saying &quot;we shouldn&#39;t swear&quot; vs. =
removing swear words from the English language entirely.</div><div><br></di=
v><div>Whether compilers include static analysis tools, and how they are us=
ed, is out-of-bounds for the standard. Though you could think of contracts =
as a mechanism to make static analysis easier, that&#39;s more a useful add=
itional thing that contracts do.</div><div><br></div><blockquote class=3D"g=
mail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc sol=
id;padding-left: 1ex;"><div dir=3D"ltr"><div>I have a question - is this so=
mething the committee is looking into? Is there a working group for this?=
=C2=A0</div><div>If a tool is a lifesaver, why is it not mandatory - who do=
es not what to save lifes?</div><div><br></div><div>I strongly believe brin=
ging more (any?) <span style=3D"display:inline!important;float:none;backgro=
und-color:transparent;color:rgb(34,34,34);font-family:&quot;Arial&quot;,&qu=
ot;Helvetica&quot;,sans-serif;font-size:13px;font-style:normal;font-variant=
:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decorati=
on:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing=
:0px">static analysis into the language is away to keep it modern and relev=
ant, especially, considering C++ very static language and has a lot of comp=
ile-time information the tools can work with.</span></div><div><br></div><d=
iv>Any answers and thoughts are welcome.</div><div><br></div><div>Now on a =
concrete idea - to <b>use <span style=3D"text-align:left;color:rgb(34,34,34=
);text-transform:none;text-indent:0px;letter-spacing:normal;font-family:&qu=
ot;Arial&quot;,&quot;Helvetica&quot;,sans-serif;font-size:13px;font-style:n=
ormal;font-variant:normal;text-decoration:none;word-spacing:0px;display:inl=
ine!important;white-space:normal;float:none;background-color:transparent">s=
tatic analysis to make *_view classes safe(er)</span>.</b><b><br></b></div>=
</div></blockquote><div><br></div><div>This is the wrong tool for the job. =
The ideal solution is to make such code <i>ill formed</i>, not to rely on &=
quot;static analysis&quot; to make compilers give a warning or something.</=
div><div><br></div><div>Or better yet, to change the language to make such =
code <i>functional</i>. After all, if you&#39;re going to go through the ef=
fort of tagging a function with this attribute, why not tag it with a keywo=
rd that extends the lifetime of the temporary correctly?</div><div><br></di=
v><div class=3D"prettyprint" style=3D"border: 1px solid rgb(187, 187, 187);=
 word-wrap: break-word; background-color: rgb(250, 250, 250);"><code class=
=3D"prettyprint"><div class=3D"subprettyprint"><span class=3D"styled-by-pre=
ttify" style=3D"color: #000;">A_view</span><span class=3D"styled-by-prettif=
y" style=3D"color: #660;">(</span><span class=3D"styled-by-prettify" style=
=3D"color: #000;">extend A</span><span class=3D"styled-by-prettify" style=
=3D"color: #660;">&amp;&amp;</span><span class=3D"styled-by-prettify" style=
=3D"color: #000;"> arg</span><span class=3D"styled-by-prettify" style=3D"co=
lor: #660;">)</span><span class=3D"styled-by-prettify" style=3D"color: #000=
;"> </span><span class=3D"styled-by-prettify" style=3D"color: #660;">:</spa=
n><span class=3D"styled-by-prettify" style=3D"color: #000;"> _a</span><span=
 class=3D"styled-by-prettify" style=3D"color: #660;">(&amp;</span><span cla=
ss=3D"styled-by-prettify" style=3D"color: #000;">arg</span><span class=3D"s=
tyled-by-prettify" style=3D"color: #660;">)</span><span class=3D"styled-by-=
prettify" style=3D"color: #000;"> </span><span class=3D"styled-by-prettify"=
 style=3D"color: #660;">{}</span><span class=3D"styled-by-prettify" style=
=3D"color: #000;"><br><br></span><span class=3D"styled-by-prettify" style=
=3D"color: #660;">...</span><span class=3D"styled-by-prettify" style=3D"col=
or: #000;"><br><br>A_view </span><span class=3D"styled-by-prettify" style=
=3D"color: #008;">ref</span><span class=3D"styled-by-prettify" style=3D"col=
or: #660;">(</span><span class=3D"styled-by-prettify" style=3D"color: #000;=
">A</span><span class=3D"styled-by-prettify" style=3D"color: #660;">{});</s=
pan><span class=3D"styled-by-prettify" style=3D"color: #000;"> </span><span=
 class=3D"styled-by-prettify" style=3D"color: #800;">//A{}&#39;s lifetime i=
s extended to that of the declaration&#39;s enclosing scope.</span><span cl=
ass=3D"styled-by-prettify" style=3D"color: #000;"><br></span></div></code><=
/div><div><br></div><div><br></div><div><br></div><div><br></div><blockquot=
e class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: =
1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><b></b></div><div>=
Here is a suggestion:</div><div><br></div><div><font face=3D"courier new,mo=
nospace">struct A_view</font></div><div><font face=3D"courier new,monospace=
">{</font></div><div><font face=3D"courier new,monospace">=C2=A0 A_view( [[=
dependent_lifetime]]=C2=A0 A&amp;&amp; arg) : _a(&amp;arg) {}</font></div><=
div><font face=3D"courier new,monospace">=C2=A0 A* _a;</font></div><div><fo=
nt face=3D"courier new,monospace">};</font></div><div><font face=3D"courier=
 new,monospace"><br></font></div><div>Now, given the code above using A_vie=
w, after ~A() is called on the variable arg points to. will be marked as an=
 error:</div><div><br></div><div><font face=3D"courier new,monospace">A_vie=
w ref(A{}); //&lt; OK, no use of ref</font></div><div><font face=3D"courier=
 new,monospace"><br></font></div><div><span style=3D"text-align:left;color:=
rgb(34,34,34);text-transform:none;text-indent:0px;letter-spacing:normal;fon=
t-size:13px;font-style:normal;font-variant:normal;font-weight:400;text-deco=
ration:none;word-spacing:0px;display:inline!important;white-space:normal;fl=
oat:none;background-color:transparent"><font face=3D"courier new,monospace"=
>A_view (A{}).func(); //&lt; OK , A outlives ref</font></span></div><div><s=
pan style=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text-i=
ndent:0px;letter-spacing:normal;font-size:13px;font-style:normal;font-varia=
nt:normal;font-weight:400;text-decoration:none;word-spacing:0px;display:inl=
ine!important;white-space:normal;float:none;background-color:transparent"><=
font face=3D"courier new,monospace"><br></font></span></div><div><span styl=
e=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text-indent:0p=
x;letter-spacing:normal;font-size:13px;font-variant:normal;word-spacing:0px=
;display:inline!important;white-space:normal;float:none;background-color:tr=
ansparent"><span style=3D"text-align:left;color:rgb(34,34,34);text-transfor=
m:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-style:norm=
al;font-variant:normal;font-weight:400;text-decoration:none;word-spacing:0p=
x;display:inline!important;white-space:normal;float:none;background-color:t=
ransparent"><font face=3D"courier new,monospace">A_view ref(A{});</font></s=
pan></span></div><div><font face=3D"courier new,monospace">ref<span style=
=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text-indent:0px=
;letter-spacing:normal;font-size:13px;font-variant:normal;word-spacing:0px;=
display:inline!important;white-space:normal;float:none;background-color:tra=
nsparent"><span style=3D"text-align:left;color:rgb(34,34,34);text-transform=
:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-style:norma=
l;font-variant:normal;font-weight:400;text-decoration:none;word-spacing:0px=
;display:inline!important;white-space:normal;float:none;background-color:tr=
ansparent">.func(); //&lt; error/warning, ref used after A is destroyed</sp=
an></span></font></div><div><font face=3D"courier new,monospace"><span styl=
e=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text-indent:0p=
x;letter-spacing:normal;font-size:13px;font-variant:normal;word-spacing:0px=
;display:inline!important;white-space:normal;float:none;background-color:tr=
ansparent"><span style=3D"text-align:left;color:rgb(34,34,34);text-transfor=
m:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-style:norm=
al;font-variant:normal;font-weight:400;text-decoration:none;word-spacing:0p=
x;display:inline!important;white-space:normal;float:none;background-color:t=
ransparent"><br></span></span></font></div><div><span style=3D"text-align:l=
eft;color:rgb(34,34,34);text-transform:none;text-indent:0px;letter-spacing:=
normal;font-size:13px;font-variant:normal;word-spacing:0px;display:inline!i=
mportant;white-space:normal;float:none;background-color:transparent"><span =
style=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text-inden=
t:0px;letter-spacing:normal;font-size:13px;font-style:normal;font-variant:n=
ormal;font-weight:400;text-decoration:none;word-spacing:0px;display:inline!=
important;white-space:normal;float:none;background-color:transparent"><font=
 face=3D"arial,sans-serif">I believed this can be enforced by <i>any</i> co=
mpiler, as<i> long as </i>these limitations apply.</font></span></span></di=
v><div>1) A_view is not heap allocated=C2=A0</div><div>2) We forbid <b>all<=
/b> uses of <font face=3D"courier new,monospace">ref</font>, not just uses =
involving _a;</div><div><br></div><div>These two limitations are there to a=
void tracking lifetime through pointers.</div><div><br></div><div>Lifetime =
contract is exclusively b/w <font face=3D"courier new,monospace">ref </font=
><font face=3D"arial,sans-serif">and</font><font face=3D"courier new,monosp=
ace"> *(&amp;arg).=C2=A0</font></div><div><font face=3D"arial,sans-serif">C=
onsidering the compiler is responsible to destroy both of these, it <i>shou=
ld</i> be possible to give a error/warning if variable <font face=3D"courie=
r new,monospace">ref</font> is used after variable=C2=A0<span style=3D"disp=
lay:inline!important;float:none;background-color:transparent;color:rgb(34,3=
4,34);font-family:courier new,monospace;font-size:13px;font-style:normal;fo=
nt-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;tex=
t-decoration:none;text-indent:0px;text-transform:none;white-space:normal;wo=
rd-spacing:0px">*(&amp;arg)<font face=3D"arial,sans-serif"> </font><font fa=
ce=3D"arial,sans-serif">is destroyed.</font></span></font></div><div><font =
face=3D"arial,sans-serif">Copies of <font face=3D"courier new,monospace">re=
f</font> do not contribute to lifetime tracking - assumed is the view outli=
ves the viewed the same way it is assumed when the view is created from a n=
on-rvalue.</font><font face=3D"arial,sans-serif"><i><b></b></i></font></div=
><div><b><i><font face=3D"arial,sans-serif"><br></font></i></b></div><div><=
font face=3D"arial,sans-serif">Comments are more then welcome, both on the =
broader topic about mandating static analysis and the concrete proposal.</f=
ont></div><div><br></div><div>Thanks=C2=A0</div><div>Mihail Naydenov</div><=
/div></blockquote></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/4270ffec-ccc7-4abd-836d-213db296be84%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/4270ffec-ccc7-4abd-836d-213db296be84=
%40isocpp.org</a>.<br />

------=_Part_2966_810626191.1515945825172--

------=_Part_2965_1898407645.1515945825171--

.
