220 27332 <e9fdc297-6cb0-4b6e-84d3-bc0b04c003a6@isocpp.org> article
Path: news.gmane.org!not-for-mail
From: demiobenour@gmail.com
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Relocation as a solution for the valueless
 variant problem?
Date: Wed, 27 Jul 2016 18:44:16 -0700 (PDT)
Lines: 259
Approved: news@gmane.org
Message-ID: <e9fdc297-6cb0-4b6e-84d3-bc0b04c003a6@isocpp.org>
References: <b4feb52d-4cd0-475f-9f3d-6694564bc1b0@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: plane.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_6220_1247268716.1469670256782"
X-Trace: ger.gmane.org 1469670272 12565 80.91.229.3 (28 Jul 2016 01:44:32 GMT)
X-Complaints-To: usenet@ger.gmane.org
NNTP-Posting-Date: Thu, 28 Jul 2016 01:44:32 +0000 (UTC)
Cc: isocppgroup@denisbider.com
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCD5RBOM2UBBB4WG4W6AKGQEEE5YMJQ@isocpp.org Thu Jul 28 03:44:25 2016
Return-path: <std-proposals+bncBCD5RBOM2UBBB4WG4W6AKGQEEE5YMJQ@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-it0-f72.google.com ([209.85.214.72])
	by plane.gmane.org with esmtp (Exim 4.69)
	(envelope-from <std-proposals+bncBCD5RBOM2UBBB4WG4W6AKGQEEE5YMJQ@isocpp.org>)
	id 1bSaN6-00016B-IG
	for gclcip-std-proposals@m.gmane.org; Thu, 28 Jul 2016 03:44:24 +0200
Original-Received: by mail-it0-f72.google.com with SMTP id j124sf37757586ith.1
        for <gclcip-std-proposals@m.gmane.org>; Wed, 27 Jul 2016 18:44:24 -0700 (PDT)
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:x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=bkeKFUehM+TdXWtL7inWHi2Z7gPRQmnvBFttFaH8Y5o=;
        b=sbr4iB2JhIN+8CDJxF8ROaleYHj7ZpEbQjcyPRB/l1Tyo8RuJq9E0SfaoyXRYrDcAz
         FLt1B6+og/pLfVSEPraTYOKeujjwhiHInxu5UHPUybt8m67+/7Qd4GVkVHKzyiHUm8lj
         EigSXDs3giZSUKWNhLNXPp/uInTLmiFuvJSqgM0nY0e8xaUlBsqv6+jsQ35MHIR27ZPF
         d/yUNTG/UAE4hE/vtSONNNy6T30RSiA9kN9JpNh19vOn60ds0ETKdB0DZpH/R2sy0627
         Lcmlgkh1dlCKCMnpqSt0VKAA5q186VASFABRO17/HDq36+NVkxmGj1ZBqLPD70NJvvjx
         zwtQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=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=bkeKFUehM+TdXWtL7inWHi2Z7gPRQmnvBFttFaH8Y5o=;
        b=vFd/JLZulRebRp1otV3THe6KkVx8DXdjED5rmS3NK0LsQ00l5Xb5v6t6q1QsVRdkN/
         gbtUu/35pFRspU8LcVghsUNjIRhLJusZl5EJVSol0VPo4LM5Iziap3UxEdmvyS27r112
         cJ7VAhPA6VnDBnofLbl6LFaIdhH2Wg3io5GmQdCa9g4Rwa0RwhGW0WDXiyKSrvtF0mcu
         FUkXG9Ses3a8AykzAgdvwHMxPMIs2pCuz0WqW5Waqws0CC+mjyXnZb5oiBzXfUQeewHN
         bzoBeM0SKw2uFao0P4fpBN9dUakvHk029W0P8060PGC+eHzttRG9vy9js+SDJFfAv/ZM
         iVDw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        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=bkeKFUehM+TdXWtL7inWHi2Z7gPRQmnvBFttFaH8Y5o=;
        b=ORN8eXI1nH2dq7+Xw1qeqpqmkLN6YXLD891bwwcv4SfwZRZv/NjXSkB/9DthU22HSg
         1R1exUNLkTdKtXbWkUZTdbQRLzLas9Kx3bOnyJLwTAqAMrwFqJRAzlbTQNY72ua1Ck7E
         1VN8TDU0a7S1Ea4vAHlgobfZl7kFirRMfuqq/StwR2OUjKfbV9RI3PMyvo0LEsgga/1j
         kYYAx32yq1ZGBZ14MaIbSos6jEZHFIKOu6SVQniye3SFMm5HImY31zXx5TXkX6JaneH2
         H9CecBcyItN6rSX3GE3OuZCUMYAStcnT3qfZEKewuxYnTO54vJZimV4ZARp4+OQHgOAk
         HiuQ==
X-Gm-Message-State: AEkoout6+ydJw+9rqFgtD/ExW0FT+YvCBaXUoMRpYWgMdohHRYHU8OZbiCZhNBKPWCP/rQ==
X-Received: by 10.157.5.37 with SMTP id 34mr28368528otw.43.1469670263616;
        Wed, 27 Jul 2016 18:44:23 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.107.160.75 with SMTP id j72ls1118979ioe.14.gmail; Wed, 27 Jul
 2016 18:44:18 -0700 (PDT)
X-Received: by 10.36.107.7 with SMTP id v7mr1334172itc.10.1469670258148;
        Wed, 27 Jul 2016 18:44:18 -0700 (PDT)
In-Reply-To: <b4feb52d-4cd0-475f-9f3d-6694564bc1b0@isocpp.org>
X-Original-Sender: demiobenour@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:27332
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/27332>

------=_Part_6220_1247268716.1469670256782
Content-Type: multipart/alternative; 
	boundary="----=_Part_6221_970988934.1469670256783"

------=_Part_6221_970988934.1469670256783
Content-Type: text/plain; charset=UTF-8

Here is another option: require move constructors to be noexcept for use in 
variants.

On Tuesday, April 5, 2016 at 7:58:18 PM UTC-4, isocp...@denisbider.com 
wrote:
>
> A proposal has recently been floated:
>
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0308r0.html
>
> ... which proposes pilfering as a solution to the valueless variant 
> problem.
>
> Please correct me if I'm wrong - my understanding of the valueless variant 
> problem is that it arises if a move constructor throws during assignment 
> and emplacement, such as this:
>
>   std::variant<X, Y> a = X();
>   std::variant<X, Y> b = Y();
>   try { b = std::move(a); }    // bad_alloc here
>   catch (std::bad_alloc) {}
>
>
> In this case, variant's assignment operator has to do something like this:
>
>   b.y.~Y();
>   new (&b.x) X(std::move(a.x));
>
>
> To avoid a valueless result in case of exception, one's first thought 
> might be to move first into a temporary:
>
>   X temp { std::move(a.x) };
>   b.y.~Y();
>   new (&b.x) X(std::move(temp.x);
>
>
> Unfortunately, this does not gain anything. Now the second move 
> constructor may throw, resulting in the same situation.
>
> However!
>
> If C++ implemented relocation, as described in this proposal P0023:
>
> http://denisbider.com/Relocator.pdf
>
> Then the solution involving a temporary would work:
>
>   std::aligned_storage_t<sizeof(X), alignof(X)> tempData;
>   X* temp = new (tempData) { std::move(a.x) };
>   b.y.~Y();
>   new (&b.x) >>X(*temp);
>
>
> This would now be exception-safe:
>
> - without requiring pilfering;
> - and without a potentially, but almost never, valueless variant.
>
> Food for thought?
>
> I believe the relocation proposal has so far not progressed for, at least, 
> these two reasons:
>
> (1) Proposals require champions to travel to meetings to represent them.
> (2) I am not willing to travel for this proposal, because I think the C++ 
> committee should just do the right thing, independent of who travels to a 
> meeting.
>
> The language should consider ideas based on their merit - not conditional 
> on the appearance of valiant knights who will cross swamps and deserts, to 
> rescue ideas from a castle. :-)
>
>
>

-- 
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/e9fdc297-6cb0-4b6e-84d3-bc0b04c003a6%40isocpp.org.

------=_Part_6221_970988934.1469670256783
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Here is another option: require move constructors to be no=
except for use in variants.<br><br>On Tuesday, April 5, 2016 at 7:58:18 PM =
UTC-4, isocp...@denisbider.com wrote:<blockquote class=3D"gmail_quote" styl=
e=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left:=
 1ex;"><div dir=3D"ltr"><div>A proposal has recently been floated:</div><di=
v><br></div><div><a href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/pap=
ers/2016/p0308r0.html" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"th=
is.href=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fwww.open-std.org=
%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2016%2Fp0308r0.html\x26sa\x3dD\x26s=
ntz\x3d1\x26usg\x3dAFQjCNHNLlrqQeeAqLCC-Xsesn7EEo8zPA&#39;;return true;" on=
click=3D"this.href=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fwww.o=
pen-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2016%2Fp0308r0.html\x26s=
a\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNHNLlrqQeeAqLCC-Xsesn7EEo8zPA&#39;;retur=
n true;">http://www.open-std.org/jtc1/<wbr>sc22/wg21/docs/papers/2016/<wbr>=
p0308r0.html</a></div><div><br></div><div>... which proposes pilfering as a=
 solution to the valueless variant problem.</div><div><br></div><div>Please=
 correct me if I&#39;m wrong - my understanding of the valueless variant pr=
oblem is that it arises if a move constructor throws during assignment and =
emplacement, such as this:</div><div><br></div><div><pre style=3D"backgroun=
d:rgb(246,248,255);color:rgb(0,0,32)">  <span style=3D"color:rgb(0,102,238)=
">std</span><span style=3D"color:rgb(64,96,128)">::</span>variant<span styl=
e=3D"color:rgb(64,96,128)">&lt;</span>X<span style=3D"color:rgb(48,128,128)=
">,</span> Y<span style=3D"color:rgb(64,96,128)">&gt;</span> a <span style=
=3D"color:rgb(48,128,128)">=3D</span> X<span style=3D"color:rgb(48,128,128)=
">(</span><span style=3D"color:rgb(48,128,128)">)</span><span style=3D"colo=
r:rgb(64,96,128)">;</span>
  <span style=3D"color:rgb(0,102,238)">std</span><span style=3D"color:rgb(6=
4,96,128)">::</span>variant<span style=3D"color:rgb(64,96,128)">&lt;</span>=
X<span style=3D"color:rgb(48,128,128)">,</span> Y<span style=3D"color:rgb(6=
4,96,128)">&gt;</span> b <span style=3D"color:rgb(48,128,128)">=3D</span> Y=
<span style=3D"color:rgb(48,128,128)">(</span><span style=3D"color:rgb(48,1=
28,128)">)</span><span style=3D"color:rgb(64,96,128)">;</span>
  <span style=3D"color:rgb(32,0,128);font-weight:bold">try</span> <span sty=
le=3D"color:rgb(64,96,128)">{</span> b <span style=3D"color:rgb(48,128,128)=
">=3D</span> <span style=3D"color:rgb(0,102,238)">std</span><span style=3D"=
color:rgb(64,96,128)">::</span><span style=3D"color:rgb(0,48,96)">move</spa=
n><span style=3D"color:rgb(48,128,128)">(</span>a<span style=3D"color:rgb(4=
8,128,128)">)</span><span style=3D"color:rgb(64,96,128)">;</span> <span sty=
le=3D"color:rgb(64,96,128)">}</span>    <span style=3D"color:rgb(89,89,121)=
">// bad_alloc here</span>
  <span style=3D"color:rgb(32,0,128);font-weight:bold">catch</span> <span s=
tyle=3D"color:rgb(48,128,128)">(</span><span style=3D"color:rgb(0,102,238)"=
>std</span><span style=3D"color:rgb(64,96,128)">::</span><span style=3D"col=
or:rgb(0,48,96)">bad_alloc</span><span style=3D"color:rgb(48,128,128)">)</s=
pan> <span style=3D"color:rgb(64,96,128)">{</span><span style=3D"color:rgb(=
64,96,128)">}</span>

</pre></div><div><br></div><div>In this case, variant&#39;s assignment oper=
ator has to do something like this:</div><div><br></div><div><pre style=3D"=
background:rgb(246,248,255);color:rgb(0,0,32)">  b<span style=3D"color:rgb(=
48,128,128)">.</span>y<span style=3D"color:rgb(48,128,128)">.</span><span s=
tyle=3D"color:rgb(48,128,128)">~</span>Y<span style=3D"color:rgb(48,128,128=
)">(</span><span style=3D"color:rgb(48,128,128)">)</span><span style=3D"col=
or:rgb(64,96,128)">;</span>
  <span style=3D"color:rgb(32,0,128);font-weight:bold">new</span> <span sty=
le=3D"color:rgb(48,128,128)">(</span><span style=3D"color:rgb(48,128,128)">=
&amp;</span>b<span style=3D"color:rgb(48,128,128)">.</span>x<span style=3D"=
color:rgb(48,128,128)">)</span> X<span style=3D"color:rgb(48,128,128)">(</s=
pan><span style=3D"color:rgb(0,102,238)">std</span><span style=3D"color:rgb=
(64,96,128)">::</span><span style=3D"color:rgb(0,48,96)">move</span><span s=
tyle=3D"color:rgb(48,128,128)">(</span>a<span style=3D"color:rgb(48,128,128=
)">.</span>x<span style=3D"color:rgb(48,128,128)">)</span><span style=3D"co=
lor:rgb(48,128,128)">)</span><span style=3D"color:rgb(64,96,128)">;</span>

</pre></div><div><br></div><div>To avoid a valueless result in case of exce=
ption, one&#39;s first thought might be to move first into a temporary:</di=
v><div><br></div><div><pre style=3D"background:rgb(246,248,255);color:rgb(0=
,0,32)">  X temp <span style=3D"color:rgb(64,96,128)">{</span> <span style=
=3D"color:rgb(0,102,238)">std</span><span style=3D"color:rgb(64,96,128)">::=
</span><span style=3D"color:rgb(0,48,96)">move</span><span style=3D"color:r=
gb(48,128,128)">(</span>a<span style=3D"color:rgb(48,128,128)">.</span>x<sp=
an style=3D"color:rgb(48,128,128)">)</span> <span style=3D"color:rgb(64,96,=
128)">}</span><span style=3D"color:rgb(64,96,128)">;</span>
  b<span style=3D"color:rgb(48,128,128)">.</span>y<span style=3D"color:rgb(=
48,128,128)">.</span><span style=3D"color:rgb(48,128,128)">~</span>Y<span s=
tyle=3D"color:rgb(48,128,128)">(</span><span style=3D"color:rgb(48,128,128)=
">)</span><span style=3D"color:rgb(64,96,128)">;</span>
  <span style=3D"color:rgb(32,0,128);font-weight:bold">new</span> <span sty=
le=3D"color:rgb(48,128,128)">(</span><span style=3D"color:rgb(48,128,128)">=
&amp;</span>b<span style=3D"color:rgb(48,128,128)">.</span>x<span style=3D"=
color:rgb(48,128,128)">)</span> X<span style=3D"color:rgb(48,128,128)">(</s=
pan><span style=3D"color:rgb(0,102,238)">std</span><span style=3D"color:rgb=
(64,96,128)">::</span><span style=3D"color:rgb(0,48,96)">move</span><span s=
tyle=3D"color:rgb(48,128,128)">(</span>temp<span style=3D"color:rgb(48,128,=
128)">.</span>x<span style=3D"color:rgb(48,128,128)">)</span><span style=3D=
"color:rgb(64,96,128)">;</span>

</pre></div><div><br></div><div>Unfortunately, this does not gain anything.=
 Now the second move constructor may throw, resulting in the same situation=
..</div><div><br></div><div>However!</div><div><br></div><div>If C++ impleme=
nted relocation, as described in this proposal P0023:</div><div><br></div><=
div><a href=3D"http://denisbider.com/Relocator.pdf" target=3D"_blank" rel=
=3D"nofollow" onmousedown=3D"this.href=3D&#39;http://www.google.com/url?q\x=
3dhttp%3A%2F%2Fdenisbider.com%2FRelocator.pdf\x26sa\x3dD\x26sntz\x3d1\x26us=
g\x3dAFQjCNGRaVpviwtOSXhpXtDNRASkBLXVYw&#39;;return true;" onclick=3D"this.=
href=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fdenisbider.com%2FRe=
locator.pdf\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGRaVpviwtOSXhpXtDNRASkB=
LXVYw&#39;;return true;">http://denisbider.com/<wbr>Relocator.pdf</a></div>=
<div><br></div><div>Then the solution involving a temporary would work:</di=
v><div><br></div><div><pre style=3D"background:rgb(246,248,255);color:rgb(0=
,0,32)">  <span style=3D"color:rgb(0,102,238)">std</span><span style=3D"col=
or:rgb(64,96,128)">::</span>aligned_storage_t<span style=3D"color:rgb(64,96=
,128)">&lt;</span><span style=3D"color:rgb(32,0,128);font-weight:bold">size=
of</span><span style=3D"color:rgb(48,128,128)">(</span><wbr>X<span style=3D=
"color:rgb(48,128,128)">)</span><span style=3D"color:rgb(48,128,128)">,</sp=
an> alignof<span style=3D"color:rgb(48,128,128)">(</span>X<span style=3D"co=
lor:rgb(48,128,128)">)</span><span style=3D"color:rgb(64,96,128)">&gt;</spa=
n> tempData<span style=3D"color:rgb(64,96,128)">;</span>
  X<span style=3D"color:rgb(48,128,128)">*</span> temp <span style=3D"color=
:rgb(48,128,128)">=3D</span> <span style=3D"color:rgb(32,0,128);font-weight=
:bold">new</span> <span style=3D"color:rgb(48,128,128)">(</span>tempData<sp=
an style=3D"color:rgb(48,128,128)">)</span> <span style=3D"color:rgb(64,96,=
128)">{</span> <span style=3D"color:rgb(0,102,238)">std</span><span style=
=3D"color:rgb(64,96,128)">::</span><span style=3D"color:rgb(0,48,96)">move<=
/span><span style=3D"color:rgb(48,128,128)">(</span>a<span style=3D"color:r=
gb(48,128,128)">.</span>x<span style=3D"color:rgb(48,128,128)">)</span> <sp=
an style=3D"color:rgb(64,96,128)">}</span><span style=3D"color:rgb(64,96,12=
8)">;</span>
  b<span style=3D"color:rgb(48,128,128)">.</span>y<span style=3D"color:rgb(=
48,128,128)">.</span><span style=3D"color:rgb(48,128,128)">~</span>Y<span s=
tyle=3D"color:rgb(48,128,128)">(</span><span style=3D"color:rgb(48,128,128)=
">)</span><span style=3D"color:rgb(64,96,128)">;</span>
  <span style=3D"color:rgb(32,0,128);font-weight:bold">new</span> <span sty=
le=3D"color:rgb(48,128,128)">(</span><span style=3D"color:rgb(48,128,128)">=
&amp;</span>b<span style=3D"color:rgb(48,128,128)">.</span>x<span style=3D"=
color:rgb(48,128,128)">)</span> <span style=3D"color:rgb(48,128,128)">&gt;<=
/span><span style=3D"color:rgb(48,128,128)">&gt;</span>X<span style=3D"colo=
r:rgb(48,128,128)">(</span><span style=3D"color:rgb(48,128,128)">*</span>te=
mp<span style=3D"color:rgb(48,128,128)">)</span><span style=3D"color:rgb(64=
,96,128)">;</span>

</pre></div><div><br></div><div>This would now be exception-safe:</div><div=
><br></div><div>- without requiring pilfering;</div><div>- and without a=C2=
=A0potentially, but almost never, valueless variant.</div><div><div><div><d=
iv><br></div><div>Food for thought?</div><div><br></div></div></div></div><=
div>I believe the relocation proposal has so far not progressed for, at lea=
st, these two reasons:</div><div><br></div><div>(1)=C2=A0Proposals require =
champions to travel to meetings=C2=A0to represent them.</div><div>(2)=C2=A0=
I am not willing to travel for this proposal, because I think the C++ commi=
ttee should just do the right thing, independent of who travels to a meetin=
g.</div><div><br></div><div>The language should=C2=A0consider ideas based=
=C2=A0on their merit -=C2=A0not conditional on the appearance of valiant kn=
ights who=C2=A0will cross swamps and deserts, to rescue=C2=A0ideas=C2=A0fro=
m a castle. :-)</div><div><br></div><div><br></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/e9fdc297-6cb0-4b6e-84d3-bc0b04c003a6%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/e9fdc297-6cb0-4b6e-84d3-bc0b04c003a6=
%40isocpp.org</a>.<br />

------=_Part_6221_970988934.1469670256783--

------=_Part_6220_1247268716.1469670256782--

.
