220 32340 <45a81e95-d352-49ab-9c6e-7375aa41413c@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: Jakob Riedle <jakob.riedle@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: =?UTF-8?B?UmU6IFtzdGQtcHJvcG9zYWxzXSBSZTogQWRkaW5nIHRoZSBLZXl3b3JkIOKAnGludGVyZg==?=
	=?UTF-8?B?YWNl4oCdIGluIEMrKw==?=
Date: Mon, 8 May 2017 13:48:54 -0700 (PDT)
Lines: 259
Approved: news@gmane.org
Message-ID: <45a81e95-d352-49ab-9c6e-7375aa41413c@isocpp.org>
References: <c8742174-fef0-44a9-988d-2c8aebba9243@isocpp.org>
 <CACL3gUXPSVdsT0Z77igxGVtHU9ALGPcN=7hwKKKfBmt8eQmXtA@mail.gmail.com>
 <9ee212eb-4037-40c4-94c3-57a9a170a4c3@isocpp.org> <1765502.4y06pMOS3s@tjmaciei-mobl1>
 <e8fb03f4-8c94-46c2-a612-acab81117998@isocpp.org>
 <CAOHCbiswurpbE6tG3igWTsFfpJ=LAeT9PoTUZBNsrnMOhEwSxQ@mail.gmail.com>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_2457_1611138434.1494276534876"
X-Trace: blaine.gmane.org 1494276535 26131 195.159.176.226 (8 May 2017 20:48:55 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Mon, 8 May 2017 20:48:55 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCX2XNFO6MPRBN5TYPEAKGQE4MY6ZZQ@isocpp.org Mon May 08 22:48:51 2017
Return-path: <std-proposals+bncBCX2XNFO6MPRBN5TYPEAKGQE4MY6ZZQ@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-yw0-f197.google.com ([209.85.161.197])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBCX2XNFO6MPRBN5TYPEAKGQE4MY6ZZQ@isocpp.org>)
	id 1d7paN-0006fL-42
	for gclcip-std-proposals@m.gmane.org; Mon, 08 May 2017 22:48:51 +0200
Original-Received: by mail-yw0-f197.google.com with SMTP id h21sf57559415ywc.4
        for <gclcip-std-proposals@m.gmane.org>; Mon, 08 May 2017 13:48:57 -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
         :x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=dIuHMVRAr5RMfRmCcpc7CuafcX2h3uGLUCpmywWWeG0=;
        b=1G9cz29jQBWm2OnbNrz1RLI+Fh6Yj+geb6ulqYRRJadATAMrW1En0OD1psS0WURBxl
         weFQvb2w+RlB+72o+QKr8DqjFPEGbe2bOegq+wu7a2HpwHW14ZXP9dOCrNqDr/CV5jNr
         2NeutwkDIHk9Ixe0+t8Gm8Om6sFEIR3wc8Ao9egVUxp69AtokRsvMdHXpbE2AniA0BUm
         PGBw4q+q64fAbMfq6DrbE3mnOKknqZLGLZ2eWa1YA0u3GiY5CnqM/DKqTbLs3nWR56Hz
         C8/1UBzoPYeP8MUkgOZ0Bb5jCKiT5b+i7/MjFbWt8ncu21B7fHWoK3zJtT03W3ATqFdb
         PPjw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=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=dIuHMVRAr5RMfRmCcpc7CuafcX2h3uGLUCpmywWWeG0=;
        b=HgBJd2G3CFgbk49SNmpuWVLsOawTmml3pFvts/RMdXf1DG6WYYsITy/4YvZieciHNp
         jwPhwoo2foVqOqF8ptMkj4/MWhcIE6+RXnLAB8Ut0NCZO3K4784N1RPAWeR2RCQMFzts
         aw+yjuxHXHUBw1vkCqhCH3wC2z+0JUpTsKM6vLvksjR7HLSKoQmZMbz2ExHZsnyI4hlY
         +s11yzLCbEvI+zGGBq2LMRbBzGTu10r59+jPR35T7QZqofKUBjIqIsmpE20XoGtbIBfV
         UWgLCrFJzlcPUZHnc8VuSMaokx2eZVWWRaf08JLvW2to30g2eEXGogE3QfcPFdU2irth
         OS8Q==
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=dIuHMVRAr5RMfRmCcpc7CuafcX2h3uGLUCpmywWWeG0=;
        b=Fn0iAx236WyxgBGHaHnie59m3ABbmtJGjJrlJ5CdrQBewnodp5nujMpcaE2O8P1N6g
         hThmGZ3Rdq9ii1iADZ+ugszxUWMpIyOhWl6+aJakv/VsPXZRlvm/XrR4yTqmvR4m8/UP
         0+f2gutAK8Ig85cdkebQNSVwPIl9xRsKHnuzojzBIS/LWGMUDAxQ4VLQfNvtGej6RoXj
         GhCYdb/4YTEFNSMWTFh9iWgbFawWwXyn+hNCUVj9dSW0XX6mzPM3ttg6cR0wSNBzk6e4
         hTgb75v3YKATH/5SESuyNqArKelxybuZlI9BDuDojiqtDEVWbwlvnpP4c9JeHYVxwaZJ
         NNGw==
X-Gm-Message-State: AN3rC/6NLwIBK/dU+nX+jhLpyPG+WO+msApRJjRVzh1QHfVkDutP2c5m
	jWU7tWS3th2WOQ==
X-Received: by 10.129.91.130 with SMTP id p124mr31882772ywb.49.1494276536479;
        Mon, 08 May 2017 13:48:56 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.157.9.241 with SMTP id 46ls10773154otz.6.gmail; Mon, 08 May
 2017 13:48:55 -0700 (PDT)
X-Received: by 10.157.28.130 with SMTP id l2mr717854ota.17.1494276535389;
        Mon, 08 May 2017 13:48:55 -0700 (PDT)
In-Reply-To: <CAOHCbiswurpbE6tG3igWTsFfpJ=LAeT9PoTUZBNsrnMOhEwSxQ@mail.gmail.com>
X-Original-Sender: jakob.riedle@gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <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:32340
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/32340>

------=_Part_2457_1611138434.1494276534876
Content-Type: multipart/alternative; 
	boundary="----=_Part_2458_1204108005.1494276534876"

------=_Part_2458_1204108005.1494276534876
Content-Type: text/plain; charset=UTF-8

At first I was very skeptical of the proposal to add something that I 
though to be already in the language.
The topic being discussed here now seems to me the missing link between 
concepts and type erasure!!

Thank you Mingxin Wang!

Foo foo; // foo happens to model Concept
> std::erased<Concept> efoo = foo;
> func(efoo);  // Not a templatized function
>
Nice idea!

Can we make that even more awesome?? YES!!

How about this:

void func(){
 // ...
}

int main(){
// Here the concept 'Callable' is used at a non-deduced context (where no 
deduction happens)
// Therefore, the Concept will automatically be interpreted as an abstract 
class to which other types can be type erased to.
std::vector<Callable> myVec;
myVec.emplace( &func );
}

class MyClass{
 std::vector<Callable> myVec; // same applies here since we are in an 
undeduced context

 void set_vector( std::vector<Callable> newVec ){ // This is still a 
function template where Callable might be deduced as std::function<void()>
  myVec = std::move(newVec); // Here an implicit conversion happens from 
the potentially specialized vector (e.g. 
std::vector<std::function<void()>>) to the vector of type erased Callables
 }
}

Whenever compile time type deduction *can *happen, it will, *analog to 
contextpr*.
This is both very efficient and intuitive if you think about it.
Another example might be helpful:

void do_something( std::vector<Callable> vec ){
// ...
}

std::vector<Callable> foo1;
std::vector<std::function<void()>> foo2;

do_something( foo1 ); // 'vec' will stay a vector of type erased Callables
do_something( foo2 ); // 'vec' will be deduced to 
std::vector<std::function<void()>>

Again: Everything that can be deduced at compile time will and everything 
that cannot will be deferred to run time.
Since this interpretation of concepts as implicit base classes only happens 
in undeduced contexts (this is currently not allowed), its not breaking 
code.

How 'bout that???

Cheers,
Jakob

-- 
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/45a81e95-d352-49ab-9c6e-7375aa41413c%40isocpp.org.

------=_Part_2458_1204108005.1494276534876
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>At first I was very skeptical of the proposal to add =
something that I though to be already in the language.<br></div><div>The to=
pic being discussed here now seems to me the missing link between concepts =
and type erasure!!</div><div><br></div><div>Thank you Mingxin Wang!</div><d=
iv><b><br></b></div><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"><div><div><div dir=3D"ltr"><div>Foo foo; // foo happens to model C=
oncept<br></div><div>std::erased&lt;Concept&gt; efoo =3D foo;<br></div><div=
>func(efoo);=C2=A0 // Not a templatized function</div></div></div></div></d=
iv></blockquote><div>Nice idea!</div><div><br></div><div>Can we make that e=
ven more awesome?? YES!!</div><div><br></div><div>How about this:</div><div=
><br></div><div class=3D"prettyprint" style=3D"background-color: rgb(250, 2=
50, 250); border-color: rgb(187, 187, 187); border-style: solid; border-wid=
th: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"=
subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-prettify">v=
oid</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> func</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">(){</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0</span><s=
pan style=3D"color: #800;" class=3D"styled-by-prettify">// ...</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">}</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"><br><br></span><span style=3D"color: =
#008;" class=3D"styled-by-prettify">int</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> main</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(){</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"><br></span><span style=3D"color: #800;" class=3D"styled-by=
-prettify">// Here the concept &#39;Callable&#39; is used at a non-deduced =
context (where no deduction happens)</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"><br></span><span style=3D"color: #800;" class=3D"=
styled-by-prettify">// Therefore, the Concept will automatically be interpr=
eted as an abstract class to which other types can be type erased to.</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>std</span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">::</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify">vector</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"color=
: #606;" class=3D"styled-by-prettify">Callable</span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">&gt;</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"> myVec</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"><br>myVec</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">.</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify">emplace</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">&amp;</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify">func </span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">}</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify"><br><br></span><span style=3D"color: #008;" cla=
ss=3D"styled-by-prettify">class</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styled-b=
y-prettify">MyClass</span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">{</span><span style=3D"color: #000;" class=3D"styled-by-prettify">=
<br>=C2=A0std</span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">::</span><span style=3D"color: #000;" class=3D"styled-by-prettify">vecto=
r</span><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</spa=
n><span style=3D"color: #606;" class=3D"styled-by-prettify">Callable</span>=
<span style=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><span =
style=3D"color: #000;" class=3D"styled-by-prettify"> myVec</span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">;</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #800;"=
 class=3D"styled-by-prettify">// same applies here since we are in an unded=
uced context</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"><br><br>=C2=A0</span><span style=3D"color: #008;" class=3D"styled-by-pret=
tify">void</span><span style=3D"color: #000;" class=3D"styled-by-prettify">=
 set_vector</span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>(</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> std</sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">::</span><span=
 style=3D"color: #000;" class=3D"styled-by-prettify">vector</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"=
color: #606;" class=3D"styled-by-prettify">Callable</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">&gt;</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify"> newVec </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">){</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #800;" class=3D"styl=
ed-by-prettify">// This is still a function template where Callable might b=
e deduced as std::function&lt;void()&gt;</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"><br>=C2=A0 myVec </span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"> std</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">::</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify">move</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
>newVec</span><span style=3D"color: #660;" class=3D"styled-by-prettify">);<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><sp=
an style=3D"color: #800;" class=3D"styled-by-prettify">// Here an implicit =
conversion happens from the potentially specialized vector (e.g. std::vecto=
r&lt;std::function&lt;void()&gt;&gt;) to the vector of type erased Callable=
s</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=C2=
=A0</span><span style=3D"color: #660;" class=3D"styled-by-prettify">}</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">}</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"><br></span></div></code></div><=
div><br></div><div>Whenever compile time type deduction <b>can </b>happen, =
it will, <b>analog to contextpr</b>.</div><div>This is both very efficient =
and intuitive if you think about it.</div><div>Another example might be hel=
pful:</div><div><br></div><div class=3D"prettyprint" style=3D"background-co=
lor: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: so=
lid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"=
><div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled=
-by-prettify">void</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"> do_something</span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> std</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify">vector</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span=
 style=3D"color: #606;" class=3D"styled-by-prettify">Callable</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> vec </span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">){</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #800;" c=
lass=3D"styled-by-prettify">// ...</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"><br></span><span style=3D"color: #660;" class=3D"st=
yled-by-prettify">}</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"><br><br>std</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">::</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
">vector</span><span style=3D"color: #660;" class=3D"styled-by-prettify">&l=
t;</span><span style=3D"color: #606;" class=3D"styled-by-prettify">Callable=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> foo1</span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"><br>std</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify">vector</span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">&lt;</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify">std</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">::</span><span style=3D"color: #008;" class=3D"styled-by=
-prettify">function</span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">&lt;</span><span style=3D"color: #008;" class=3D"styled-by-prettif=
y">void</span><span style=3D"color: #660;" class=3D"styled-by-prettify">()&=
gt;&gt;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> fo=
o2</span><span style=3D"color: #660;" class=3D"styled-by-prettify">;</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"><br><br>do_someth=
ing</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> foo1 </span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #800;" class=3D"styled-by-prettify">// &#39;vec&#39; will stay a vector o=
f type erased Callables</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"><br>do_something</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"> foo2 </span><span style=3D"color: #660;" class=3D"styled-by-pret=
tify">);</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> <=
/span><span style=3D"color: #800;" class=3D"styled-by-prettify">// &#39;vec=
&#39; will be deduced to std::vector&lt;std::function&lt;void()&gt;&gt;</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"><br></span></d=
iv></code></div><div><br></div>Again: Everything that can be deduced at com=
pile time will and everything that cannot will be deferred to run time.<div=
>Since this interpretation of concepts as implicit base classes only happen=
s in undeduced contexts (this is currently not allowed), its not breaking c=
ode.</div><div><br></div><div>How &#39;bout that???</div><div><br></div><di=
v>Cheers,</div><div>Jakob</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/45a81e95-d352-49ab-9c6e-7375aa41413c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/45a81e95-d352-49ab-9c6e-7375aa41413c=
%40isocpp.org</a>.<br />

------=_Part_2458_1204108005.1494276534876--

------=_Part_2457_1611138434.1494276534876--

.
