220 28273 <0892f743-bca2-4f18-b023-d4a57cea60fb@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: mihailnajdenov@gmail.com
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Something is better then nothing: Please, relax
 Initializer List use with operators!
Date: Sun, 18 Sep 2016 05:41:39 -0700 (PDT)
Lines: 296
Approved: news@gmane.org
Message-ID: <0892f743-bca2-4f18-b023-d4a57cea60fb@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_2833_368196602.1474202499435"
X-Trace: blaine.gmane.org 1474202515 1798 195.159.176.226 (18 Sep 2016 12:41:55 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Sun, 18 Sep 2016 12:41:55 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBCUJ3A7GRAPRBBEX7K7AKGQELBTY6MY@isocpp.org Sun Sep 18 14:41:50 2016
Return-path: <std-proposals+bncBCUJ3A7GRAPRBBEX7K7AKGQELBTY6MY@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-oi0-f72.google.com ([209.85.218.72])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBCUJ3A7GRAPRBBEX7K7AKGQELBTY6MY@isocpp.org>)
	id 1blbPh-0007Jm-9O
	for gclcip-std-proposals@m.gmane.org; Sun, 18 Sep 2016 14:41:41 +0200
Original-Received: by mail-oi0-f72.google.com with SMTP id t83sf21615252oie.0
        for <gclcip-std-proposals@m.gmane.org>; Sun, 18 Sep 2016 05:41:43 -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: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=6BdvWgAYhGnvYbx0C682npBJKbHas5t4Ln+xhwjsN38=;
        b=kzmlk2VEEGKkyZv6xMCX+5RNNxv77252GgeHf0kEFvgKuRF/duunAy76SnB3VQ+pBh
         eT+EYyMVuVsPQ/ROlQOZH9CHOm1+aDykjavtxK7oBggIHCM/4XbzVP0qWEaVsGRW5MRP
         tvgsZM1PFm0RT/tSaxkxF3cIi5YHb9mpjS92v1XbtfNyJjhxBO6zP16x5B8V10Y64zyN
         tJI8k8tBnLeZTTwW1lylvn9QbI4kfOcc001CXiyyD+yjYmvEJ0YQNy93W9s7FqVzL1ol
         R5S6dvpKLg4gRW5gLN/AcE7rI4R20b2mezy5dGk9E5lJIfd1WNOaiJQ+V9IpimgRBJeJ
         xq9g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=date:from:to:message-id: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=6BdvWgAYhGnvYbx0C682npBJKbHas5t4Ln+xhwjsN38=;
        b=PW8mnN1/eanNXOuI+tgFJdqdo99tjCdxYnzA0q2ZSigIBJZ5AitNsFnprqEec605Fv
         ZqWsFQwpoRRv+upYTZsI76FyBcj+7VVerzmnUN2U629EisbsCpWCi9jcX6hJhqLOI6Nv
         WUTqh3iYsrxxfm6N36pPJL9z6Oh368Yp3pMy4CrW+a1iwn4tp6jUxis9S65G4YBxZqZT
         L7gMef70qT21SSrmzEMdTrke29WgqNbE9FIFUCfO38CqrDFvYzJT6oKsOt4+CubXaY0T
         PzSjF9TK8pCfEbRFQkcwHHzhndNYVcEFO3Hut9Vy61dQx5HwVoknlmSHqIDWZyAUJWJH
         p0IQ==
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:message-id: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=6BdvWgAYhGnvYbx0C682npBJKbHas5t4Ln+xhwjsN38=;
        b=bL07yCTrBZTIIeF/Vs86GJXZhRhBQODX6w8n9UpUYd4GflE31u9bj/Kq7Wp2kkzPrO
         rU6WfCS09CgWAMKfF+nf2Y8Zx2iBIvQbfBJ/fK+rOYBMpPHjXIuDqXz7OiN8eWGAQ7fj
         0s5zJLwXYKie6Z8GoCWI6cGjfkjNONAuXJ6CJVHx5FQ9k9I58x5FeQ1F54rzJ9z1u9Nw
         xo8gR4usHLkvdNrug5QQsz7MK9F14zMSm2emNo7qMtQ9ZkqaqI0Fv6fMhX0gsHRw3+cm
         9fz+BgPJNzNwzc244qcPc65NyG3kXWqAjA3G8z5Vpz13ksEU0LLwaOk2cj5S/Ix9UrP1
         zIoQ==
X-Gm-Message-State: AE9vXwN5zRd7+25dg8wGTLNhZW1b+RLf7kn3Xccnuk6Bv7+fXRIDUPK93+gXMX9ItWzwjw==
X-Received: by 10.157.10.21 with SMTP id 21mr2778792otg.62.1474202502475;
        Sun, 18 Sep 2016 05:41:42 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.107.151.209 with SMTP id z200ls2706825iod.22.gmail; Sun, 18
 Sep 2016 05:41:40 -0700 (PDT)
X-Received: by 10.36.137.67 with SMTP id s64mr179410itd.1.1474202500299;
        Sun, 18 Sep 2016 05:41:40 -0700 (PDT)
X-Original-Sender: MihailNajdenov@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:28273
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/28273>

------=_Part_2833_368196602.1474202499435
Content-Type: multipart/alternative; 
	boundary="----=_Part_2834_286874145.1474202499435"

------=_Part_2834_286874145.1474202499435
Content-Type: text/plain; charset=UTF-8

Hello, in a recent search about why is Initializer List limited so much 
(cant be used in arithmetics, assignment, etc), I came to this post 
: http://stackoverflow.com/a/11445905/362515

Basically the problem is, Initializer List is impossible to work in any 
situation where operators are used - parsing such an expression will be to 
complex.

That is fine.

However support in limited, but well defined scenarios is possible and I 
believe the benefits will still outweigh the confusion why it is not 
working in some contexts. 
What is more *there is already a confusion why it is not working in 
"similar contexts"!* 

For example *from the user perspective assignment and comparison are 
"similar" contexts of use - one is "are you that thing" the other is 
"become that thing". *
Needless to say the syntax is, as we know, dangerously close "==" vs "="*.*

If for instance is allowed *only the type of  the RHS in operator to be 
deduced from an init-list* and expression is dissuaded to start with a 
init-list, not only many if not all use cases will be possible, *but it 
will be somewhat easier to teach why the other case is to available.*

Back to the example - it is hard to explain why this is working:
Point p;
p = {-1, -1}; 

but this is not:

if(p == {-1, -1}) return;


*But this is actually relatively easy to explain why it's not working*:
if({-1, -1} == p) return;

Basically the user will learn at some point that {,} by itself is nothing 
more the a bunch a character, shortcut to create something in given context 
- it is not an expression, not a value, not even an initializer_list<T>

He will see there is a difference b/w 
if(-1 == p.x) 
 and
if({-1, -1} == p)

He will see that in the first case he is creating something concretely - he 
is saying 'create the object int from that -1 I gave you", but in the last 
case he is just saying "I am giving you two ints in a packet". 

*The user clearly sees, he is not saying what to create with these two ints 
- might be a pair, a size, an array. The user knows he is 
underspecifying at that point. *

*He just hopes the context is enough for the compiler to do the work.*

At this point we just step in and say - no, you must give the context 
before you ask us to do the guessing!
We'll guess p == {1-, -1}, we'll guess p + {.5, 0}, we might even guess p = 
{10, 10} - p.
*But we'll not guess an expression which starts with enigma and a context 
to solve it given later.*

Thing is, *the user will not be surprised by that rule. he knows it already 
-  this is the reason we have a trailing return type! *
*For the user will not be something new if he is required to 
do something from left to right if he'll benefit (quite a lot) from it.  *
*"I will help you, if you help me" said the parser.*

As said, in its current state init-list usage is both extremely limited 
*and* it is hard to explain why.
If the rules are relaxed it will be both much, much, much more useful *and* easier 
to explain why some usage is not allowed.

The point I am trying to make is - I don't consider "allowing initializer 
lists as right-hand, but nor as left-hand arguments to most operators is 
too much of a kludge".
Init-list, {,} is magic, it does not have to work in *all cases*, it is 
there to help you* as much as it can. *And now it works in roughly half of 
the cases although it can do much more. 
Please let it do more. (And actually making it more predictable in the 
process).

*P.S*
I must stress it is not just about "less typing", it is about less type 
commitment - Point might be QPoint next year or MyPoint the other, but it 
will always, even in a million years will be represented by two numbers.

*Bonus:*
This must work, it really must work:
const auto e = car ? car->engine() : {};
 We know it does not but it should, no reason why not - first arg is given, 
second arg is given, the the third must the same type as the second, so we 
have everything to deduce it!

 

-- 
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/0892f743-bca2-4f18-b023-d4a57cea60fb%40isocpp.org.

------=_Part_2834_286874145.1474202499435
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hello, in a recent search about why is Initializer List li=
mited so much (cant be used in arithmetics, assignment, etc), I came to thi=
s post :=C2=A0http://stackoverflow.com/a/11445905/362515<div><br></div><div=
>Basically the problem is, Initializer List is impossible to work in any si=
tuation where operators are used - parsing such an expression will be to co=
mplex.</div><div><br></div><div>That is fine.</div><div><br></div><div>Howe=
ver support in limited, but well defined scenarios is possible and I believ=
e the benefits will still outweigh the confusion why it is not working in s=
ome contexts.=C2=A0</div><div>What is more <b>there is already a=C2=A0confu=
sion why it is not working in &quot;similar contexts&quot;!</b>=C2=A0</div>=
<div><b><br></b></div><div>For example <b>from the user perspective assignm=
ent and comparison are &quot;similar&quot; contexts of use - one is &quot;a=
re you that thing&quot; the other is &quot;become that thing&quot;.=C2=A0</=
b></div><div>Needless to say the syntax is, as we know, dangerously close &=
quot;=3D=3D&quot; vs &quot;=3D&quot;<b>.</b></div><div><b><br></b></div><di=
v>If for instance is allowed <b>only the type of =C2=A0the RHS in operator =
to be deduced from an init-list</b>=C2=A0and expression is dissuaded to sta=
rt with a init-list, not only many if not all use cases will be possible, <=
b>but it will be somewhat easier to teach why the other case is to availabl=
e.</b></div><div><br></div><div>Back to the example - it is hard to explain=
 why this is working:</div><div><div class=3D"prettyprint" style=3D"backgro=
und-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-sty=
le: solid; border-width: 1px; word-wrap: break-word;"><code class=3D"pretty=
print"><div class=3D"subprettyprint"><span style=3D"color: #606;" class=3D"=
styled-by-prettify">Point</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> p</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><b=
r>p </span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">{-</span><span style=
=3D"color: #066;" class=3D"styled-by-prettify">1</span><span 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: #660;" class=3D"=
styled-by-prettify">-</span><span style=3D"color: #066;" class=3D"styled-by=
-prettify">1</span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">};</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </spa=
n></div></code></div><div><br></div>but this is not:</div><div><br></div><d=
iv><div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250)=
; border-color: rgb(187, 187, 187); border-style: solid; border-width: 1px;=
 word-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprett=
yprint"><font color=3D"#660066"><span style=3D"color: #008;" class=3D"style=
d-by-prettify">if</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">p =
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D=3D</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">{-</span><span style=3D=
"color: #066;" class=3D"styled-by-prettify">1</span><span style=3D"color: #=
660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">-</span><span style=3D"color: #066;" class=3D"styled-by-pr=
ettify">1</span><span 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: #008;" class=3D"styled-by-prettify">return</span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">;</span></font></div><=
/code></div><div><br></div><div><br></div><b>But this is actually relativel=
y easy to explain why it&#39;s not working</b>:</div><div><div class=3D"pre=
ttyprint" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(=
187, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-wo=
rd;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><font color=
=3D"#660066"><span style=3D"color: #008;" class=3D"styled-by-prettify">if</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">({-</span><s=
pan style=3D"color: #066;" class=3D"styled-by-prettify">1</span><span 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: #660;" =
class=3D"styled-by-prettify">-</span><span style=3D"color: #066;" class=3D"=
styled-by-prettify">1</span><span 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: #660;" class=3D"styled-by-prettify">=3D=3D<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> p</span><s=
pan 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=
: #008;" class=3D"styled-by-prettify">return</span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">;</span></font></div></code></div><br>Bas=
ically the user will learn at some point that {,} by itself is nothing more=
 the a bunch a character, shortcut to create something in given context - i=
t is not an expression, not a value, not even an initializer_list&lt;T&gt;<=
/div><div><br>He will see there is a difference b/w=C2=A0<div class=3D"pret=
typrint" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(1=
87, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-wor=
d;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><font color=
=3D"#660066"><span style=3D"color: #008;" class=3D"styled-by-prettify">if</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">(-</span><sp=
an style=3D"color: #066;" class=3D"styled-by-prettify">1</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">=3D=3D</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify"> p</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">.</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify">x</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">)</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
</span></font></div></code></div>=C2=A0and</div><div><div class=3D"prettypr=
int" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, =
187, 187); border-style: solid; border-width: 1px; word-wrap: break-word;">=
<code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"co=
lor: #008;" class=3D"styled-by-prettify">if</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">({-</span><span style=3D"color: #066;" cla=
ss=3D"styled-by-prettify">1</span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">-=
</span><span style=3D"color: #066;" class=3D"styled-by-prettify">1</span><s=
pan 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=
: #660;" class=3D"styled-by-prettify">=3D=3D</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify"> p</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></span></div></code></div><div><br></div>He will see t=
hat in the first case he is creating something concretely - he is saying &#=
39;create the object int from that -1 I gave you&quot;, but in the last cas=
e he is just saying &quot;I am giving you two ints in a packet&quot;.=C2=A0=
</div><div><br></div><div><b>The user clearly sees, he is not saying what t=
o create with these two ints - might be a pair, a size, an array. <i>The us=
er knows he is underspecifying=C2=A0at that point.=C2=A0</i></b></div><div>=
<b><i><br></i></b></div><div><b>He just hopes the context is enough for the=
 compiler to do the work.</b></div><div><b><br></b></div><div>At this point=
 we just step in and say - no, you must give the context before you ask us =
to do the guessing!</div><div>We&#39;ll guess p =3D=3D {1-, -1}, we&#39;ll =
guess p + {.5, 0}, we might even guess p =3D {10, 10} - p.</div><div><i>But=
 we&#39;ll not guess an expression which starts with enigma and a context t=
o solve it given later.</i><br><br></div><div>Thing is, <b>the user will no=
t be=C2=A0surprised by that rule. he knows it already -=C2=A0=C2=A0this is =
the reason we have a trailing return type!=C2=A0</b></div><div><b>For the u=
ser will not be something new if he is=C2=A0required to do=C2=A0something=
=C2=A0from left to right if he&#39;ll benefit (quite a lot) from it.=C2=A0=
=C2=A0</b></div><div><b>&quot;I will help you, if you help me&quot; said th=
e parser.</b></div><div><b><br></b></div><div>As said, in its current state=
 init-list usage is both extremely limited=C2=A0<i>and</i>=C2=A0it is hard =
to explain why.</div><div>If the rules are relaxed it will be both much, mu=
ch, much more useful <i>and</i>=C2=A0easier to explain why some usage is no=
t allowed.</div><div><br></div><div>The point I am trying to make is - I do=
n&#39;t consider &quot;allowing initializer lists as right-hand, but nor as=
 left-hand arguments to most operators is
too much of a kludge&quot;.</div><div>Init-list, {,} is magic, it does not =
have to work in <i>all cases</i>, it is there to help you<i> as much as it =
can. </i>And now it works in roughly half of the cases although it can do m=
uch more.=C2=A0</div><div>Please let it do more. (And actually making it mo=
re predictable in the process).</div><div><br></div><div><b>P.S</b></div><d=
iv>I must stress it is not just about &quot;less typing&quot;, it is about =
less type commitment - Point might be QPoint next year or MyPoint the other=
, but it will always, even in a million years will be represented by two nu=
mbers.</div><div><br></div><div><b>Bonus:</b></div><div>This must work, it =
really must work:<div class=3D"prettyprint" style=3D"background-color: rgb(=
250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; bord=
er-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div cla=
ss=3D"subprettyprint"><font color=3D"#660066"><span style=3D"color: #008;" =
class=3D"styled-by-prettify">const</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">auto</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> e </span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> car =
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">?</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"> car</span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">-&gt;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify">engine</span><span 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: #660;" cla=
ss=3D"styled-by-prettify">:</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">{};</span></font></div></code></div>=C2=A0We know it does not but i=
t should, no reason why not - first arg is given, second arg is given, the =
the third must the same type as the second, so we have everything to deduce=
 it!</div><div><br></div><div>=C2=A0</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/0892f743-bca2-4f18-b023-d4a57cea60fb%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/0892f743-bca2-4f18-b023-d4a57cea60fb=
%40isocpp.org</a>.<br />

------=_Part_2834_286874145.1474202499435--

------=_Part_2833_368196602.1474202499435--

.
