220 36726 <634a78e7-dc92-4f5e-9105-83339a18b579@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: Sat, 20 Jan 2018 11:31:21 -0800 (PST)
Lines: 261
Approved: news@gmane.org
Message-ID: <634a78e7-dc92-4f5e-9105-83339a18b579@isocpp.org>
References: <0087c1a4-0b36-40ca-8d43-5bfaf0af62ca@isocpp.org>
 <a395ffbf-fc53-4288-b1ca-f559e1703eac@isocpp.org>
 <88864914-82a8-4a8b-bda7-cffd38379edf@isocpp.org>
 <4fa792ec-1f51-4357-a65a-2ce3c10c60c0@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_3058_1799439253.1516476681966"
X-Trace: blaine.gmane.org 1516476570 25695 195.159.176.226 (20 Jan 2018 19:29:30 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Sat, 20 Jan 2018 19:29:30 +0000 (UTC)
Cc: mihailnajdenov@gmail.com
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCEKFTV6ZUMBBC5SR3JQKGQE6LCTTII@isocpp.org Sat Jan 20 20:29:25 2018
Return-path: <std-proposals+bncBCEKFTV6ZUMBBC5SR3JQKGQE6LCTTII@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-ua0-f200.google.com ([209.85.217.200])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBCEKFTV6ZUMBBC5SR3JQKGQE6LCTTII@isocpp.org>)
	id 1ecypM-00065I-Mc
	for gclcip-std-proposals@m.gmane.org; Sat, 20 Jan 2018 20:29:20 +0100
Original-Received: by mail-ua0-f200.google.com with SMTP id g9sf3578005ual.8
        for <gclcip-std-proposals@m.gmane.org>; Sat, 20 Jan 2018 11:31:25 -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=tR3vL9rURz2dzoPyyl6A47GzV2FIPc566VirErjD1OY=;
        b=TYtVobxVJUAc6MrTvOw9WRD/tlkKzlYejA7ay3UrNYuEAx7caHzRSw3rmveMqnBB4X
         o9QXFSna4XLN6wrO10Y5XMjpvaxtFxdTtYXEhE2uFcYDZpPOQcUrIzXBulh04mzIsKle
         GDS3fBwLzEhtXhPk5XwDvNBhemJDp4pgv+YowFd8hDC2nuedjiobr1OTa2EDvEKfCbne
         C4qXBNmHJRPzAjbqXSixB9CDFiiqLKi5VfVmbO8bOG9yLov90YX7DzS+BP3ti3aZrVIM
         SC9fjb73kGN8KbF8WeVHu/cuKfYxRhlyjFm0FququTf3W+nkaQf+1RLwnmvfddZ7lxAv
         rl7Q==
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=tR3vL9rURz2dzoPyyl6A47GzV2FIPc566VirErjD1OY=;
        b=TwVj0u3BNH7CA/b0nyXPF1CWBvSjHFbpVt/oX+dVL+1TnhrGNc4i3CP+x3IW5HZp6d
         Rp6AJMkdbPu2w0vWNeSa0P6olShGbv52xtA25cRiH1v6Sg4Q6knjXKfHwR+wTpn4IVPy
         USF5XAZdvRPNsVi7nnkPIYXJ8RnMF7Z6CNzeKPNt4zZ1H2+vzlyilREVvKfgoeEH0mio
         N3igQvrHq3rpSFivAly3LiOp6TgdEAt6I8ywKlZ1PGpFIqDbU5GOThtofXsD5Xa1n1eH
         JIossicROsoZIL5DU/0NPSLzO9oKDLAvAchKbGNFXacVrUxSSrvTFYkLNFBN+I1DFMLE
         1cPQ==
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=tR3vL9rURz2dzoPyyl6A47GzV2FIPc566VirErjD1OY=;
        b=ac6kfxywRN8TtbOyoa53jaY9u/FBiArtgSmOoJKbQsDYJMtwwSP5VZfSAVudAp6cXN
         fVKXLMCIQ7UVXcvF/O0YRSLkk4M8j61oW+nPw+1RJ1nLb0F5VHmaIp1ytf7XCPhMZfet
         y2wMCFh/Wkn7t2JDaDPBeIW+sWJC0s5/wuW2GwTCgB3jQpyQOkcgWrleB5lCfSvpZtKb
         UIOSjQv4iTOg0Up9nIzDcgzaTsi0uiYzF/CZZPtO8PuIE2dPk6EJzUUi2QL1sMDB8lXL
         Bfp4YIjqsAS0ZCYJ2pPcIFY7smZaksI4GiW6G76SLbo9RuFyt9FEkk5OJzfm5ydzce3C
         KFeg==
X-Gm-Message-State: AKwxytcKLBx02JzYesNxUWOtyEmlrKaWZhcgxolGThBE1uodESjDsFeC
	TTmETLcPZXPtSPBRP4uqptBkGQ==
X-Google-Smtp-Source: AH8x224QdAgLF55qmMOCMm5bm3guPDJkpjcDLSW2WZhP4kUxgdGMUZ/oCTWfiD/59H0O0LAdbGQTMw==
X-Received: by 10.176.72.138 with SMTP id x10mr1370617uac.83.1516476684689;
        Sat, 20 Jan 2018 11:31:24 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.31.158.3 with SMTP id h3ls1050870vke.11.gmail; Sat, 20 Jan
 2018 11:31:23 -0800 (PST)
X-Received: by 10.31.178.206 with SMTP id b197mr239608vkf.11.1516476682617;
        Sat, 20 Jan 2018 11:31:22 -0800 (PST)
In-Reply-To: <4fa792ec-1f51-4357-a65a-2ce3c10c60c0@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:36726
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/36726>

------=_Part_3058_1799439253.1516476681966
Content-Type: multipart/alternative; 
	boundary="----=_Part_3059_105007333.1516476681966"

------=_Part_3059_105007333.1516476681966
Content-Type: text/plain; charset="UTF-8"

On Saturday, January 20, 2018 at 6:12:09 AM UTC-5, mihailn...@gmail.com 
wrote:
>
>
>
> On Friday, January 19, 2018 at 10:19:40 PM UTC+2, Nicol Bolas wrote:
>>
>> On Friday, January 19, 2018 at 7:30:52 AM UTC-5, mihailn...@gmail.com 
>> wrote:
>>>
>>> Can we "just" define special behavior of observer_ptr (in debug/analyze 
>>> mode) and solve all cases of lifetime monitoring (under the said 
>>> limitations) - from smart pointers to function_view?
>>>
>>
>> That's not "behavior" of the type. There is no actual code in 
>> `observer_ptr` that does anything you're talking about. It's simply a 
>> compiler or tool that sees you using this particular type and starts 
>> looking at things because of it.
>>
>
> If the constructor and reset of observer_ptr are decorated with something 
> like [[debug:observe_destruction]] the behavior of observer_ptr will be 
> enforced by the compiler. 
>
> The behavior, use and definition of observer_ptr are not changed.  
>  
>
>>
>> It should also be noted that this still doesn't handle perfect 
>> forwarding. Not unless it is the caller of the function who wraps the 
>> parameter in an `observer_ptr`.
>>
>
> class A_view
> {
>   A_view(const A* pa) : _p(pa) {}
>   A_view(const A& a) : _p(&a) {}
>   A_view(A&& a) : _p(&a) {}
>
>   observer_ptr<const A> _p;
> }; 
>
> observer_ptr will monitor addressof(*_p) for ~A() call.
>

How would it know? If all the compiler in that translation unit sees is:

class A_view
{
public:
  A_view(const A &p);

private:
  observer_ptr<A> p_;
};

How could the compiler* possibly* know that this code is invalid:

A_view v(A{});

We're not talking about runtime detection here; this is purely 
compile-time. And the compiler doesn't necessarily see everything. If 
`A_view` is in another translation unit that isn't visible to static 
analysis, this doesn't work.

-- 
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/634a78e7-dc92-4f5e-9105-83339a18b579%40isocpp.org.

------=_Part_3059_105007333.1516476681966
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On Saturday, January 20, 2018 at 6:12:09 AM UTC-5, mihailn=
....@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;ma=
rgin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><br><br>On Friday, January 19, 2018 at 10:19:40 PM UTC+2, Nicol Bo=
las wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0=
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Frida=
y, January 19, 2018 at 7:30:52 AM UTC-5, <a>mihailn...@gmail.com</a> wrote:=
<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><font face=3D=
"arial,sans-serif"><span style=3D"text-align:left;color:rgb(34,34,34);text-=
transform:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-st=
yle:normal;font-variant:normal;font-weight:400;text-decoration:none;word-sp=
acing:0px;display:inline!important;white-space:normal;float:none;background=
-color:transparent">Can we <span style=3D"display:inline!important;float:no=
ne;background-color:transparent;color:rgb(34,34,34);font-family:arial,sans-=
serif;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;=
letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;=
text-transform:none;white-space:normal;word-spacing:0px">&quot;just&quot; <=
/span>define special behavior of=C2=A0<span style=3D"background-color:trans=
parent;border-bottom-color:rgb(34,34,34);border-bottom-style:none;border-bo=
ttom-width:0px;border-left-color:rgb(34,34,34);border-left-style:none;borde=
r-left-width:0px;border-right-color:rgb(34,34,34);border-right-style:none;b=
order-right-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;=
border-top-width:0px;color:rgb(34,34,34);display:inline;float:none;font-fam=
ily:arial,sans-serif;font-size:13px;font-style:normal;font-variant:normal;f=
ont-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left:0px;marg=
in-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-rig=
ht:0px;padding-top:0px;text-align:left;text-decoration:none;text-indent:0px=
;text-transform:none;white-space:normal;word-spacing:0px">observer_ptr (in =
debug/analyze mode) and solve all cases of lifetime monitoring (under the s=
aid limitations) - from smart pointers to function_view?</span></span></fon=
t></div></div></blockquote><div><br></div><div>That&#39;s not &quot;behavio=
r&quot; of the type. There is no actual code in `observer_ptr` that does an=
ything you&#39;re talking about. It&#39;s simply a compiler or tool that se=
es you using this particular type and starts looking at things because of i=
t.</div></div></blockquote><div><br></div><div>If the constructor and reset=
 of <span style=3D"display:inline!important;float:none;background-color:tra=
nsparent;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:normal;text-align:left;text-decoration:none;text-=
indent:0px;text-transform:none;white-space:normal;word-spacing:0px">observe=
r_ptr are decorated with something like<font face=3D"courier new,monospace"=
> [[debug:observe_destruction]] </font>the=C2=A0<span style=3D"display:inli=
ne!important;float:none;background-color:transparent;color:rgb(34,34,34);fo=
nt-family:&quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif;font-size:13px=
;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:norma=
l;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px">behavior of=C2=A0<span>observer_ptr wi=
ll be enforced by the compiler. </span></span></span></div><div><span style=
=3D"display:inline!important;float:none;background-color:transparent;color:=
rgb(34,34,34);font-family:&quot;Arial&quot;,&quot;Helvetica&quot;,sans-seri=
f;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;lett=
er-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text=
-transform:none;white-space:normal;word-spacing:0px"><span style=3D"display=
:inline!important;float:none;background-color:transparent;color:rgb(34,34,3=
4);font-family:&quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif;font-size=
:13px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:=
normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:=
none;white-space:normal;word-spacing:0px"><span><br></span></span></span></=
div><div><span style=3D"display:inline!important;float:none;background-colo=
r:transparent;color:rgb(34,34,34);font-family:&quot;Arial&quot;,&quot;Helve=
tica&quot;,sans-serif;font-size:13px;font-style:normal;font-variant:normal;=
font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;=
text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><s=
pan style=3D"display:inline!important;float:none;background-color:transpare=
nt;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:normal;text-align:left;text-decoration:none;text-indent=
:0px;text-transform:none;white-space:normal;word-spacing:0px"><span>The beh=
avior, use and definition of observer_ptr are not changed. =C2=A0</span></s=
pan></span></div><div>=C2=A0</div><blockquote 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><br></div><div>It should also be noted that this sti=
ll doesn&#39;t handle perfect forwarding. Not unless it is the caller of th=
e function who wraps the parameter in an `observer_ptr`.</div></div></block=
quote><div><br></div><div><font face=3D"courier new,monospace">class A_view=
</font></div><div><font face=3D"courier new,monospace">{</font></div><div><=
font face=3D"courier new,monospace">=C2=A0 </font><font face=3D"courier new=
,monospace"><span style=3D"text-align:left;color:rgb(34,34,34);text-transfo=
rm:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-style:nor=
mal;font-variant:normal;font-weight:400;text-decoration:none;word-spacing:0=
px;display:inline!important;white-space:normal;float:none;background-color:=
transparent">A_view(const A* pa) : _p(pa) {}</span></font></div><div><font =
face=3D"courier new,monospace">=C2=A0 <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"><span>A_view(const A&amp; a) : _p(&a=
mp;a) {}</span></span></font></div><div><font face=3D"courier new,monospace=
">=C2=A0 <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:norm=
al;word-spacing:0px;display:inline!important;white-space:normal;float:none;=
background-color:transparent"><span style=3D"margin:0px;padding:0px;border:=
0px rgb(34,34,34);text-align:left;color:rgb(34,34,34);text-transform:none;t=
ext-indent:0px;letter-spacing:normal;font-size:13px;font-variant:normal;wor=
d-spacing:0px;display:inline;white-space:normal;float:none;background-color=
:transparent"><span>A_view(A&amp;&amp; a) : _p(&amp;a) {}</span></span></sp=
an></font></div><div><span style=3D"text-align:left;color:rgb(34,34,34);tex=
t-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:transparent"><span style=3D"margin:0px;padding=
:0px;border:0px rgb(34,34,34);text-align:left;color:rgb(34,34,34);text-tran=
sform:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-varian=
t:normal;word-spacing:0px;display:inline;white-space:normal;float:none;back=
ground-color:transparent"><span><font face=3D"courier new,monospace"><br></=
font></span></span></span></div><div><font face=3D"courier new,monospace">=
=C2=A0 <span style=3D"text-align:left;color:rgb(34,34,34);text-transform:no=
ne;text-indent:0px;letter-spacing:normal;font-size:13px;font-variant:normal=
;word-spacing:0px;display:inline!important;white-space:normal;float:none;ba=
ckground-color:transparent"><span style=3D"margin:0px;padding:0px;border:0p=
x rgb(34,34,34);text-align:left;color:rgb(34,34,34);text-transform:none;tex=
t-indent:0px;letter-spacing:normal;font-size:13px;font-variant:normal;word-=
spacing:0px;display:inline;white-space:normal;float:none;background-color:t=
ransparent"><span>observer_ptr&lt;const A&gt; _p;</span><b></b></span></spa=
n></font></div><div><font face=3D"courier new,monospace">};=C2=A0</font></d=
iv><div><font face=3D"courier new"><br></font></div><div><font face=3D"aria=
l,sans-serif">observer_ptr will monitor addressof(*_p) for ~A() call.</font=
></div></div></blockquote><div><br></div><div>How would it know? If all the=
 compiler in that translation unit sees is:</div><div><br></div><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"prettypri=
nt"><div class=3D"subprettyprint"><span class=3D"styled-by-prettify" style=
=3D"color: #008;">class</span><span class=3D"styled-by-prettify" style=3D"c=
olor: #000;"> A_view<br></span><span class=3D"styled-by-prettify" style=3D"=
color: #660;">{</span><span class=3D"styled-by-prettify" style=3D"color: #0=
00;"><br></span><span class=3D"styled-by-prettify" style=3D"color: #008;">p=
ublic</span><span class=3D"styled-by-prettify" style=3D"color: #660;">:</sp=
an><span class=3D"styled-by-prettify" style=3D"color: #000;"><br>=C2=A0 A_v=
iew</span><span class=3D"styled-by-prettify" style=3D"color: #660;">(</span=
><span class=3D"styled-by-prettify" style=3D"color: #008;">const</span><spa=
n class=3D"styled-by-prettify" style=3D"color: #000;"> A </span><span class=
=3D"styled-by-prettify" style=3D"color: #660;">&amp;</span><span class=3D"s=
tyled-by-prettify" style=3D"color: #000;">p</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: #008;">private</span><span class=3D"styled-by-prettify" sty=
le=3D"color: #660;">:</span><span class=3D"styled-by-prettify" style=3D"col=
or: #000;"><br>=C2=A0 observer_ptr</span><span class=3D"styled-by-prettify"=
 style=3D"color: #660;">&lt;</span><span class=3D"styled-by-prettify" style=
=3D"color: #000;">A</span><span class=3D"styled-by-prettify" style=3D"color=
: #660;">&gt;</span><span class=3D"styled-by-prettify" style=3D"color: #000=
;"> p_</span><span class=3D"styled-by-prettify" style=3D"color: #660;">;</s=
pan><span class=3D"styled-by-prettify" style=3D"color: #000;"><br></span><s=
pan class=3D"styled-by-prettify" style=3D"color: #660;">};</span></div></co=
de></div><div><br></div><div>How could the compiler<i> possibly</i> know th=
at this code is invalid:</div><div><br></div><div class=3D"prettyprint" sty=
le=3D"border: 1px solid rgb(187, 187, 187); word-wrap: break-word; backgrou=
nd-color: rgb(250, 250, 250);"><code class=3D"prettyprint"><div class=3D"su=
bprettyprint"><span class=3D"styled-by-prettify" style=3D"color: #000;">A_v=
iew v</span><span class=3D"styled-by-prettify" style=3D"color: #660;">(</sp=
an><span class=3D"styled-by-prettify" style=3D"color: #000;">A</span><span =
class=3D"styled-by-prettify" style=3D"color: #660;">{});</span><span class=
=3D"styled-by-prettify" style=3D"color: #000;"><br></span></div></code></di=
v><br><div>We&#39;re not talking about runtime detection here; this is pure=
ly compile-time. And the compiler doesn&#39;t necessarily see everything. I=
f `A_view` is in another translation unit that isn&#39;t visible to static =
analysis, this doesn&#39;t work.</div><div><br></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/634a78e7-dc92-4f5e-9105-83339a18b579%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/634a78e7-dc92-4f5e-9105-83339a18b579=
%40isocpp.org</a>.<br />

------=_Part_3059_105007333.1516476681966--

------=_Part_3058_1799439253.1516476681966--

.
