Topic: [c++std-core-27227] An implementation of


Author: "'Geoffrey Romer' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Fri, 6 Mar 2015 10:22:35 -0800
Raw View
--001a11c1092ec646060510a2c49e
Content-Type: text/plain; charset=UTF-8

On Fri, Mar 6, 2015 at 10:09 AM, Bjarne Stroustrup <bjarne@stroustrup.com>
wrote:

>
>
> On 3/6/2015 1:07 PM, Nicol Bolas wrote:
>
>
>
> On Friday, March 6, 2015 at 12:38:14 PM UTC-5, Jonathan Wakely wrote:
>>
>> On 6 March 2015 at 17:21, Nicol Bolas wrote:
>> > Explain to me, the novice C++ programmer, why this thing which doesn't
>> look
>> > like a template suddenly became a template. Explain to me why I have to
>> > implement it in a header, even though it looks exactly like every other
>> > non-template function declaration/definition.
>> >
>> > To the novice C++ programmer, it isn't "all just programming." Whether
>> > something is a template matters.
>>
>> Ah, the "won't somebody think of the children" argument.
>>
>> The answer to why it suddenly became a template is that its parameter
>> is a concept, not a type. A concept is a family of types.  I don't see
>> why that should be much harder to teach than "a function template is a
>> family of functions" and "a class template is a family of types".
>>
>
> If a "family of functions" is so fundamentally different from a regular
> function that it can't be declared/defined in the same way, why does it
> look exactly like a regular function? If swapping one identifier for
> another can so radically change how you go about implementing something,
> shouldn't it be more syntactically obvious that you've made a major change?
>
> Without the template keyword, it doesn't look like a template. And
> therefore, it is not immediately obvious that it should be treated as such.
>
>
> People will learn. Learning that
>     void f(auto);
> implies template is kid's play compared to some things we expect people to
> figure out.
>

That's not the case he's talking about. He's talking about this one:

void f(T);

I don't see how "people will learn" to tell whether that's a template,
because there just fundamentally isn't enough information there to answer
that question, and in real code the necessary information might be anywhere
in the transitive #include graph.

--

---
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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.

--001a11c1092ec646060510a2c49e
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">=
On Fri, Mar 6, 2015 at 10:09 AM, Bjarne Stroustrup <span dir=3D"ltr">&lt;<a=
 href=3D"mailto:bjarne@stroustrup.com" target=3D"_blank">bjarne@stroustrup.=
com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 =20
   =20
 =20
  <div bgcolor=3D"#FFFFFF" text=3D"#000000"><div><div class=3D"h5">
    <br>
    <br>
    <div>On 3/6/2015 1:07 PM, Nicol Bolas wrote:<br>
    </div>
    <blockquote type=3D"cite">
      <div dir=3D"ltr"><br>
        <br>
        On Friday, March 6, 2015 at 12:38:14 PM UTC-5, Jonathan Wakely
        wrote:
        <blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8=
ex;border-left:1px #ccc solid;padding-left:1ex">On 6
          March 2015 at 17:21, Nicol Bolas wrote:
          <br>
          &gt; Explain to me, the novice C++ programmer, why this thing
          which doesn&#39;t look
          <br>
          &gt; like a template suddenly became a template. Explain to me
          why I have to
          <br>
          &gt; implement it in a header, even though it looks exactly
          like every other
          <br>
          &gt; non-template function declaration/definition.
          <br>
          &gt;
          <br>
          &gt; To the novice C++ programmer, it isn&#39;t &quot;all just
          programming.&quot; Whether
          <br>
          &gt; something is a template matters.
          <br>
          <br>
          Ah, the &quot;won&#39;t somebody think of the children&quot; argu=
ment.
          <br>
          <br>
          The answer to why it suddenly became a template is that its
          parameter
          <br>
          is a concept, not a type. A concept is a family of types.=C2=A0 I
          don&#39;t see
          <br>
          why that should be much harder to teach than &quot;a function
          template is a
          <br>
          family of functions&quot; and &quot;a class template is a family =
of
          types&quot;.
          <br>
        </blockquote>
        <div><br>
          If a &quot;family of functions&quot; is so fundamentally differen=
t from
          a regular function that it can&#39;t be declared/defined in the
          same way, why does it look exactly like a regular function? If
          swapping one identifier for another can so radically change
          how you go about implementing something, shouldn&#39;t it be more
          syntactically obvious that you&#39;ve made a major change?<br>
          <br>
          Without the template keyword, it doesn&#39;t look like a template=
..
          And therefore, it is not immediately obvious that it should be
          treated as such.</div>
        <br>
      </div>
    </blockquote>
    <br></div></div>
    People will learn. Learning that<br>
    =C2=A0=C2=A0=C2=A0 void f(auto);<br>
    implies template is kid&#39;s play compared to some things we expect
    people to figure out.<br></div></blockquote><div><br></div><div>That&#3=
9;s not the case he&#39;s talking about. He&#39;s talking about this one:</=
div><div><br></div><div>void f(T);=C2=A0</div></div><br></div><div class=3D=
"gmail_extra">I don&#39;t see how &quot;people will learn&quot; to tell whe=
ther that&#39;s a template, because there just fundamentally isn&#39;t enou=
gh information there to answer that question, and in real code the necessar=
y information might be anywhere in the transitive #include graph.</div></di=
v>

<p></p>

-- <br />
<br />
--- <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 />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

--001a11c1092ec646060510a2c49e--

.


Author: Nevin Liber <nevin@eviloverlord.com>
Date: Fri, 6 Mar 2015 12:42:14 -0600
Raw View
--089e015385f4798aae0510a30d3f
Content-Type: text/plain; charset=UTF-8

On 6 March 2015 at 12:22, 'Geoffrey Romer' via ISO C++ Standard -
Discussion <std-discussion@isocpp.org> wrote:

>
> That's not the case he's talking about. He's talking about this one:
>
> void f(T);
>
> I don't see how "people will learn" to tell whether that's a template,
> because there just fundamentally isn't enough information there to answer
> that question, and in real code the necessary information might be anywhere
> in the transitive #include graph.
>

There are two audiences (As Andrew pointed out in his reply to my previous
message):

1.  The person calling the function.  For the most part, they won't know or
care whether or not it is a template function; they just include the
correct header and call it.

2.  The person defining the function.  They have to know whether or not it
is a template or a specific concrete type, but they had to know that anyway
to write the function.
--
 Nevin ":-)" Liber  <mailto:nevin@eviloverlord.com>  (847) 691-1404

--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-discussion+unsubscribe@isocpp.org.
To post to this group, send email to std-discussion@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-discussion/.

--089e015385f4798aae0510a30d3f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">On 6 March 2015 at 12:22, &#39;Geoffrey Romer&#39; via ISO=
 C++ Standard - Discussion <span dir=3D"ltr">&lt;<a href=3D"mailto:std-disc=
ussion@isocpp.org" target=3D"_blank">std-discussion@isocpp.org</a>&gt;</spa=
n> wrote:<br><div class=3D"gmail_extra"><div class=3D"gmail_quote"><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div class=3D"gm=
ail_extra"><br><div class=3D"gmail_quote"><span class=3D""></span><div>That=
&#39;s not the case he&#39;s talking about. He&#39;s talking about this one=
:</div><div><br></div><div>void f(T);=C2=A0</div></div><br></div><div class=
=3D"gmail_extra">I don&#39;t see how &quot;people will learn&quot; to tell =
whether that&#39;s a template, because there just fundamentally isn&#39;t e=
nough information there to answer that question, and in real code the neces=
sary information might be anywhere in the transitive #include graph.</div><=
/div></blockquote><div><br></div><div>There are two audiences (As Andrew po=
inted out in his reply to my previous message):<br><br></div><div>1.=C2=A0 =
The person calling the function.=C2=A0 For the most part, they won&#39;t kn=
ow or care whether or not it is a template function; they just include the =
correct header and call it.<br><br></div><div>2.=C2=A0 The person defining =
the function.=C2=A0 They have to know whether or not it is a template or a =
specific concrete type, but they had to know that anyway to write the funct=
ion.<br></div></div>-- <br><div class=3D"gmail_signature">=C2=A0Nevin &quot=
;:-)&quot; Liber=C2=A0 &lt;mailto:<a href=3D"mailto:nevin@eviloverlord.com"=
 target=3D"_blank">nevin@eviloverlord.com</a>&gt;=C2=A0 (847) 691-1404</div=
>
</div></div>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Discussion&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-discussion+unsubscribe@isocpp.org">std-discus=
sion+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-discussion@isocp=
p.org">std-discussion@isocpp.org</a>.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-discussion/">http://groups.google.com/a/isocpp.org/group/std-discussion=
/</a>.<br />

--089e015385f4798aae0510a30d3f--

.


Author: Tony Van Eerd <tvaneerd@blackberry.com>
Date: Fri, 6 Mar 2015 18:58:20 +0000
Raw View
--_000_2015030618581865086259101394blackberrycom_
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

If all we need is auto, then is the next step:

struct X
{
    int x;
    auto y;
};

X is obviously a template?
So is Y:

struct Y
{
    int x;
    ForwardIterator y;
};

=E2=80=8E?

(Again, I'm not actually against 'auto means template function'=E2=80=8E; I=
 just bring up counter arguments to be comfortable that we explored the des=
ign space and that we have a path of consistency going forward)

Tony


Sent from my BlackBerry 10 Turing machine.
From: Bjarne Stroustrup
Sent: Friday, March 6, 2015 1:14 PM
To: c++std-core@accu.org; std-discussion@isocpp.org
Reply To: c++std-core@accu.org
Cc: std-proposals@isocpp.org; faisalv@gmail.com; hsutter@microsoft.com
Subject: [c++std-core-27227] Re: An implementation of enhanced auto deducti=
on and abbreviated template syntax using Clang




On 3/6/2015 1:07 PM, Nicol Bolas wrote:


On Friday, March 6, 2015 at 12:38:14 PM UTC-5, Jonathan Wakely wrote:
On 6 March 2015 at 17:21, Nicol Bolas wrote:
> Explain to me, the novice C++ programmer, why this thing which doesn't lo=
ok
> like a template suddenly became a template. Explain to me why I have to
> implement it in a header, even though it looks exactly like every other
> non-template function declaration/definition.
>
> To the novice C++ programmer, it isn't "all just programming." Whether
> something is a template matters.

Ah, the "won't somebody think of the children" argument.

The answer to why it suddenly became a template is that its parameter
is a concept, not a type. A concept is a family of types.  I don't see
why that should be much harder to teach than "a function template is a
family of functions" and "a class template is a family of types".

If a "family of functions" is so fundamentally different from a regular fun=
ction that it can't be declared/defined in the same way, why does it look e=
xactly like a regular function? If swapping one identifier for another can =
so radically change how you go about implementing something, shouldn't it b=
e more syntactically obvious that you've made a major change?

Without the template keyword, it doesn't look like a template. And therefor=
e, it is not immediately obvious that it should be treated as such.


People will learn. Learning that
    void f(auto);
implies template is kid's play compared to some things we expect people to =
figure out.

--=20

---=20
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 e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.

--_000_2015030618581865086259101394blackberrycom_
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dwindows-1=
256">
</head>
<body bgcolor=3D"#FFFFFF">
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
If all we need is auto, then is the next step:</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<br>
</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
struct X</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
{</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
&nbsp; &nbsp; int x;</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
&nbsp; &nbsp; auto y;</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
};</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<br>
</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
X is obviously a template?</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
So is Y:</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<br>
</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<span style=3D"font-size:initial; text-align:initial; line-height:initial">=
struct Y</span></div>
<div style=3D"font-size:initial; text-align:initial; width:488px; font-fami=
ly:Calibri,'Slate Pro',sans-serif,sans-serif; color:rgb(31,73,125)">
{</div>
<div style=3D"font-size:initial; text-align:initial; width:488px; font-fami=
ly:Calibri,'Slate Pro',sans-serif,sans-serif; color:rgb(31,73,125)">
&nbsp; &nbsp; int x;</div>
<div style=3D"font-size:initial; text-align:initial; width:488px; font-fami=
ly:Calibri,'Slate Pro',sans-serif,sans-serif; color:rgb(31,73,125)">
&nbsp; &nbsp; ForwardIterator y;</div>
<div style=3D"font-size:initial; text-align:initial; width:488px; font-fami=
ly:Calibri,'Slate Pro',sans-serif,sans-serif; color:rgb(31,73,125)">
};</div>
<div style=3D"font-size:initial; text-align:initial; width:488px; font-fami=
ly:Calibri,'Slate Pro',sans-serif,sans-serif; color:rgb(31,73,125)">
<br>
</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
=E2=80=8E?</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<br>
</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
(Again, I'm not actually against 'auto means template function'=E2=80=8E; I=
 just bring up counter arguments to be comfortable that we explored the des=
ign space and that we have a path of consistency going forward)&nbsp;</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<br>
</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
Tony</div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<span style=3D"font-size:initial; text-align:initial; line-height:initial">=
<br>
</span></div>
<div style=3D"width:100%; font-size:initial; font-family:Calibri,'Slate Pro=
',sans-serif,sans-serif; color:rgb(31,73,125); text-align:initial; backgrou=
nd-color:rgb(255,255,255)">
<br style=3D"display:initial">
</div>
<div style=3D"font-size:initial; font-family:Calibri,'Slate Pro',sans-serif=
,sans-serif; color:rgb(31,73,125); text-align:initial; background-color:rgb=
(255,255,255)">
Sent&nbsp;from&nbsp;my&nbsp;BlackBerry&nbsp;10&nbsp;Turing&nbsp;machine.</d=
iv>
<table width=3D"100%" style=3D"background-color:white; border-spacing:0px">
<tbody>
<tr>
<td colspan=3D"2" style=3D"font-size:initial; text-align:initial; backgroun=
d-color:rgb(255,255,255)">
<div style=3D"border-style:solid none none; border-top-color:rgb(181,196,22=
3); border-top-width:1pt; padding:3pt 0in 0in; font-family:Tahoma,'BB Alpha=
 Sans','Slate Pro'; font-size:10pt">
<div><b>From: </b>Bjarne Stroustrup</div>
<div><b>Sent: </b>Friday, March 6, 2015 1:14 PM</div>
<div><b>To: </b>c&#43;&#43;std-core@accu.org; std-discussion@isocpp.org</di=
v>
<div><b>Reply To: </b>c&#43;&#43;std-core@accu.org</div>
<div><b>Cc: </b>std-proposals@isocpp.org; faisalv@gmail.com; hsutter@micros=
oft.com</div>
<div><b>Subject: </b>[c&#43;&#43;std-core-27227] Re: An implementation of e=
nhanced auto deduction and abbreviated template syntax using Clang</div>
</div>
</td>
</tr>
</tbody>
</table>
<div style=3D"border-style:solid none none; border-top-color:rgb(186,188,20=
9); border-top-width:1pt; font-size:initial; text-align:initial; background=
-color:rgb(255,255,255)">
</div>
<br>
<div><br>
<br>
<div class=3D"moz-cite-prefix">On 3/6/2015 1:07 PM, Nicol Bolas wrote:<br>
</div>
<blockquote type=3D"cite">
<div dir=3D"ltr"><br>
<br>
On Friday, March 6, 2015 at 12:38:14 PM UTC-5, Jonathan Wakely wrote:
<blockquote class=3D"gmail_quote" style=3D"margin:0; margin-left:0.8ex; bor=
der-left:1px #ccc solid; padding-left:1ex">
On 6 March 2015 at 17:21, Nicol Bolas wrote: <br>
&gt; Explain to me, the novice C&#43;&#43; programmer, why this thing which=
 doesn't look <br>
&gt; like a template suddenly became a template. Explain to me why I have t=
o <br>
&gt; implement it in a header, even though it looks exactly like every othe=
r <br>
&gt; non-template function declaration/definition. <br>
&gt; <br>
&gt; To the novice C&#43;&#43; programmer, it isn't &quot;all just programm=
ing.&quot; Whether <br>
&gt; something is a template matters. <br>
<br>
Ah, the &quot;won't somebody think of the children&quot; argument. <br>
<br>
The answer to why it suddenly became a template is that its parameter <br>
is a concept, not a type. A concept is a family of types. &nbsp;I don't see=
 <br>
why that should be much harder to teach than &quot;a function template is a=
 <br>
family of functions&quot; and &quot;a class template is a family of types&q=
uot;. <br>
</blockquote>
<div><br>
If a &quot;family of functions&quot; is so fundamentally different from a r=
egular function that it can't be declared/defined in the same way, why does=
 it look exactly like a regular function? If swapping one identifier for an=
other can so radically change how you go about
 implementing something, shouldn't it be more syntactically obvious that yo=
u've made a major change?<br>
<br>
Without the template keyword, it doesn't look like a template. And therefor=
e, it is not immediately obvious that it should be treated as such.</div>
<br>
</div>
</blockquote>
<br>
People will learn. Learning that<br>
&nbsp;&nbsp;&nbsp; void f(auto);<br>
implies template is kid's play compared to some things we expect people to =
figure out.<br>
<br>
</div>
</body>
</html>

<p></p>

-- <br />
<br />
--- <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 />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

--_000_2015030618581865086259101394blackberrycom_--

.


Author: Tom Honermann <thonermann@coverity.com>
Date: Fri, 6 Mar 2015 14:04:08 -0500
Raw View
On 03/06/2015 01:42 PM, Nevin Liber wrote:
> There are two audiences (As Andrew pointed out in his reply to my
> previous message):
>
> 1.  The person calling the function.  For the most part, they won't know
> or care whether or not it is a template function; they just include the
> correct header and call it.
>
> 2.  The person defining the function.  They have to know whether or not
> it is a template or a specific concrete type, but they had to know that
> anyway to write the function.

I would argue for a third audience (though arguably a subset of the 2nd
case above):

3.  The person modifying the function.  They have to know whether or not
it is a template or a specific concrete type.

We can say that, if a person changes a function without first
determining that and causes a regression, well shame on them.  I think
that is fair.  But I think we can do better by offering a little assistance.

Tom.

--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-discussion+unsubscribe@isocpp.org.
To post to this group, send email to std-discussion@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-discussion/.

.


Author: Matthew Fioravante <fmatthew5876@gmail.com>
Date: Fri, 6 Mar 2015 11:14:45 -0800 (PST)
Raw View
------=_Part_1143_625912532.1425669285392
Content-Type: multipart/alternative;
 boundary="----=_Part_1144_1337022318.1425669285393"

------=_Part_1144_1337022318.1425669285393
Content-Type: text/plain; charset=UTF-8



On Friday, March 6, 2015 at 1:58:23 PM UTC-5, Tony Van Eerd wrote:
>
>  If all we need is auto, then is the next step:
>
>  struct X
>  {
>      int x;
>      auto y;
>  };
>
>  X is obviously a template
>

Lets have even more fun:

//This is a template
struct A {
  auto x;
};

//This is not a template
struct B {
  auto x = 1;
};


(for the record, I'd be happy either way but its good to play devils
advocate)

--

---
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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.

------=_Part_1144_1337022318.1425669285393
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><br>On Friday, March 6, 2015 at 1:58:23 PM UTC-5, Tony=
 Van Eerd wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt =
0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">



<div bgcolor=3D"#FFFFFF">
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
If all we need is auto, then is the next step:</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
<br>
</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
struct X</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
{</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
&nbsp; &nbsp; int x;</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
&nbsp; &nbsp; auto y;</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
};</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
<br>
</div>
<div style=3D"width: 100%; font-family: Calibri,'Slate Pro',sans-serif,sans=
-serif; color: rgb(31, 73, 125); background-color: rgb(255, 255, 255);">
X is obviously a template</div></div></blockquote><div><br>Lets have even m=
ore fun:<br><br><div class=3D"prettyprint" style=3D"background-color: rgb(2=
50, 250, 250); border: 1px solid rgb(187, 187, 187); word-wrap: break-word;=
"><code class=3D"prettyprint"></code><div class=3D"subprettyprint"><span st=
yle=3D"color: rgb(136, 0, 0);" class=3D"styled-by-prettify">//This is a tem=
plate</span><span style=3D"color: rgb(0, 0, 0);" class=3D"styled-by-prettif=
y"><br></span><span style=3D"color: rgb(0, 0, 136);" class=3D"styled-by-pre=
ttify">struct</span><span style=3D"color: rgb(0, 0, 0);" class=3D"styled-by=
-prettify"> A </span><span style=3D"color: rgb(102, 102, 0);" class=3D"styl=
ed-by-prettify">{</span><span style=3D"color: rgb(0, 0, 0);" class=3D"style=
d-by-prettify"><br>&nbsp; </span><span style=3D"color: rgb(0, 0, 136);" cla=
ss=3D"styled-by-prettify">auto</span><span style=3D"color: rgb(0, 0, 0);" c=
lass=3D"styled-by-prettify"> x</span><span style=3D"color: rgb(102, 102, 0)=
;" class=3D"styled-by-prettify">;</span><span style=3D"color: rgb(0, 0, 0);=
" class=3D"styled-by-prettify"><br></span><span style=3D"color: rgb(102, 10=
2, 0);" class=3D"styled-by-prettify">};</span><span style=3D"color: rgb(0, =
0, 0);" class=3D"styled-by-prettify"><br><br></span><span style=3D"color: r=
gb(136, 0, 0);" class=3D"styled-by-prettify">//This is not a template</span=
><span style=3D"color: rgb(0, 0, 0);" class=3D"styled-by-prettify"><br></sp=
an><span style=3D"color: rgb(0, 0, 136);" class=3D"styled-by-prettify">stru=
ct</span><span style=3D"color: rgb(0, 0, 0);" class=3D"styled-by-prettify">=
 B </span><span style=3D"color: rgb(102, 102, 0);" class=3D"styled-by-prett=
ify">{</span><span style=3D"color: rgb(0, 0, 0);" class=3D"styled-by-pretti=
fy"><br>&nbsp; </span><span style=3D"color: rgb(0, 0, 136);" class=3D"style=
d-by-prettify">auto</span><span style=3D"color: rgb(0, 0, 0);" class=3D"sty=
led-by-prettify"> x </span><span style=3D"color: rgb(102, 102, 0);" class=
=3D"styled-by-prettify">=3D</span><span style=3D"color: rgb(0, 0, 0);" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: rgb(0, 102, 102);" c=
lass=3D"styled-by-prettify">1</span><span style=3D"color: rgb(102, 102, 0);=
" class=3D"styled-by-prettify">;</span><span style=3D"color: rgb(0, 0, 0);"=
 class=3D"styled-by-prettify"><br></span><span style=3D"color: rgb(102, 102=
, 0);" class=3D"styled-by-prettify">};</span><span style=3D"color: rgb(0, 0=
, 0);" class=3D"styled-by-prettify"><br></span></div></div><br><br>(for the=
 record, I'd be happy either way but its good to play devils advocate)<br><=
/div></div>

<p></p>

-- <br />
<br />
--- <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 />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

------=_Part_1144_1337022318.1425669285393--
------=_Part_1143_625912532.1425669285392--

.


Author: Scott Prager <splinterofchaos@gmail.com>
Date: Fri, 6 Mar 2015 11:28:44 -0800 (PST)
Raw View
------=_Part_757_830639737.1425670124874
Content-Type: multipart/alternative;
 boundary="----=_Part_758_1608038602.1425670124878"

------=_Part_758_1608038602.1425670124878
Content-Type: text/plain; charset=UTF-8



On Friday, March 6, 2015 at 2:14:47 PM UTC-5, Matthew Fioravante wrote:
>
>
>
> On Friday, March 6, 2015 at 1:58:23 PM UTC-5, Tony Van Eerd wrote:
>>
>>  If all we need is auto, then is the next step:
>>
>>  struct X
>>  {
>>      int x;
>>      auto y;
>>  };
>>
>>  X is obviously a template
>>
>
> Lets have even more fun:
>
> //This is a template
> struct A {
>   auto x;
> };
>
> //This is not a template
> struct B {
>   auto x = 1;
> };
>
>
> (for the record, I'd be happy either way but its good to play devils
> advocate)
>

These examples seem rather farcical to me. How would we instantiate such a
type? At least with functions, we get implicit specialization based on the
arguments supplied, but with types... to make it feasible, we'd have to
enable
this syntax:

std::pair p{x, std::ref(y)};  // std::pair<X, Y&>

....and I don't see that happening. I think the analogy of template classes
to
template functions is apples to oranges since they operate by very different
rules.

*(Not that I don't think the above syntax would be great, just not as
feasible.)*

--

---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-discussion+unsubscribe@isocpp.org.
To post to this group, send email to std-discussion@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-discussion/.

------=_Part_758_1608038602.1425670124878
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><br>On Friday, March 6, 2015 at 2:14:47 PM UTC-5, Matt=
hew Fioravante wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;m=
argin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><br><br>On Friday, March 6, 2015 at 1:58:23 PM UTC-5, Tony Van Eer=
d wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0pt 0pt 0pt 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex">



<div bgcolor=3D"#FFFFFF">
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
If all we need is auto, then is the next step:</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
<br>
</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
struct X</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
{</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
&nbsp; &nbsp; int x;</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
&nbsp; &nbsp; auto y;</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
};</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
<br>
</div>
<div style=3D"width:100%;font-family:Calibri,'Slate Pro',sans-serif,sans-se=
rif;color:rgb(31,73,125);background-color:rgb(255,255,255)">
X is obviously a template</div></div></blockquote><div><br>Lets have even m=
ore fun:<br><br><div style=3D"background-color:rgb(250,250,250);border:1px =
solid rgb(187,187,187);word-wrap:break-word"><code></code><div><span style=
=3D"color:rgb(136,0,0)">//This is a template</span><span style=3D"color:rgb=
(0,0,0)"><br></span><span style=3D"color:rgb(0,0,136)">struct</span><span s=
tyle=3D"color:rgb(0,0,0)"> A </span><span style=3D"color:rgb(102,102,0)">{<=
/span><span style=3D"color:rgb(0,0,0)"><br>&nbsp; </span><span style=3D"col=
or:rgb(0,0,136)">auto</span><span style=3D"color:rgb(0,0,0)"> x</span><span=
 style=3D"color:rgb(102,102,0)">;</span><span style=3D"color:rgb(0,0,0)"><b=
r></span><span style=3D"color:rgb(102,102,0)">};</span><span style=3D"color=
:rgb(0,0,0)"><br><br></span><span style=3D"color:rgb(136,0,0)">//This is no=
t a template</span><span style=3D"color:rgb(0,0,0)"><br></span><span style=
=3D"color:rgb(0,0,136)">struct</span><span style=3D"color:rgb(0,0,0)"> B </=
span><span style=3D"color:rgb(102,102,0)">{</span><span style=3D"color:rgb(=
0,0,0)"><br>&nbsp; </span><span style=3D"color:rgb(0,0,136)">auto</span><sp=
an style=3D"color:rgb(0,0,0)"> x </span><span style=3D"color:rgb(102,102,0)=
">=3D</span><span style=3D"color:rgb(0,0,0)"> </span><span style=3D"color:r=
gb(0,102,102)">1</span><span style=3D"color:rgb(102,102,0)">;</span><span s=
tyle=3D"color:rgb(0,0,0)"><br></span><span style=3D"color:rgb(102,102,0)">}=
;</span><span style=3D"color:rgb(0,0,0)"><br></span></div></div><br><br>(fo=
r the record, I'd be happy either way but its good to play devils advocate)=
<br></div></div></blockquote><div><br></div><div><div>These examples seem r=
ather farcical to me. How would we instantiate such a</div><div>type? At le=
ast with functions, we get implicit specialization based on the</div><div>a=
rguments supplied, but with types... to make it feasible, we'd have to enab=
le</div><div>this syntax:</div><div><br></div><div><div class=3D"prettyprin=
t" style=3D"border: 1px solid rgb(187, 187, 187); word-wrap: break-word; ba=
ckground-color: rgb(250, 250, 250);"><code class=3D"prettyprint"><div class=
=3D"subprettyprint"><span style=3D"color: #000;" class=3D"styled-by-prettif=
y">std</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify">pair p</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">{</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify">x</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> std</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">::</span><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">ref</span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
">y</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)};</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> &nbsp;</span>=
<span style=3D"color: #800;" class=3D"styled-by-prettify">// std::pair&lt;X=
, Y&amp;&gt;</span></div></code></div></div><div><br></div><div>...and I do=
n't see that happening. I think the analogy of template classes to</div><di=
v>template functions is apples to oranges since they operate by very differ=
ent</div><div>rules.</div></div><div><br></div><div><i>(Not that I don't th=
ink the above syntax would be great, just not as feasible.)</i></div></div>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Discussion&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-discussion+unsubscribe@isocpp.org">std-discus=
sion+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-discussion@isocp=
p.org">std-discussion@isocpp.org</a>.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-discussion/">http://groups.google.com/a/isocpp.org/group/std-discussion=
/</a>.<br />

------=_Part_758_1608038602.1425670124878--
------=_Part_757_830639737.1425670124874--

.


Author: "Vicente J. Botet Escriba" <vicente.botet@wanadoo.fr>
Date: Sat, 07 Mar 2015 17:51:07 +0100
Raw View
This is a multi-part message in MIME format.
--------------010009050209080206050501
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Le 06/03/15 19:58, Tony Van Eerd a =C3=A9crit :
> If all we need is auto, then is the next step:
>
> struct X
> {
>     int x;
>     auto y;
> };
>
> X is obviously a template?
> So is Y:
>
> struct Y
> {
>     int x;
>     ForwardIterator y;
> };
>
> =E2=80=8E?
>
> (Again, I'm not actually against 'auto means template function'=E2=80=8E;=
 I=20
> just bring up counter arguments to be comfortable that we explored the=20
> design space and that we have a path of consistency going forward)
>
>
While for template functions the type is deduced, how could you deduce=20
the type for auto or ForwardIterator. How would you declare an instance=20
of X, or a parameter of type X.

X<???> v;

what if we had

struct X
{
     auto x;
     auto y;
};

X<???, ???> v;

Should the parameters need to be given in the order of declaration of=20
the auto/Concept data members?

I find this confusing.

Vicente

--=20

---=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-discussion+unsubscribe@isocpp.org.
To post to this group, send email to std-discussion@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-discuss=
ion/.

--------------010009050209080206050501
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type=
">
  </head>
  <body text=3D"#000000" bgcolor=3D"#FFFFFF">
    <div class=3D"moz-cite-prefix">Le 06/03/15 19:58, Tony Van Eerd a
      =C3=A9crit=C2=A0:<br>
    </div>
    <blockquote
      cite=3D"mid:20150306185818.6508625.910.1394@blackberry.com"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf=
-8">
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        If all we need is auto, then is the next step:</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        <br>
      </div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        struct X</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        {</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        =C2=A0 =C2=A0 int x;</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        =C2=A0 =C2=A0 auto y;</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        };</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        <br>
      </div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        X is obviously a template?</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        So is Y:</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        <br>
      </div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        <span style=3D"font-size:initial; text-align:initial;
          line-height:initial">struct Y</span></div>
      <div style=3D"font-size:initial; text-align:initial; width:488px;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125)">
        {</div>
      <div style=3D"font-size:initial; text-align:initial; width:488px;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125)">
        =C2=A0 =C2=A0 int x;</div>
      <div style=3D"font-size:initial; text-align:initial; width:488px;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125)">
        =C2=A0 =C2=A0 ForwardIterator y;</div>
      <div style=3D"font-size:initial; text-align:initial; width:488px;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125)">
        };</div>
      <div style=3D"font-size:initial; text-align:initial; width:488px;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125)">
        <br>
      </div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        =E2=80=8E?</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        <br>
      </div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        (Again, I'm not actually against 'auto means template
        function'=E2=80=8E; I just bring up counter arguments to be comfort=
able
        that we explored the design space and that we have a path of
        consistency going forward)=C2=A0</div>
      <div style=3D"width:100%; font-size:initial;
        font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
        color:rgb(31,73,125); text-align:initial;
        background-color:rgb(255,255,255)">
        <br>
      </div>
      <br>
    </blockquote>
    While for template functions the type is deduced, how could you
    deduce the type for auto or ForwardIterator. How would you declare
    an instance of X, or a parameter of type X.<br>
    <br>
    X&lt;???&gt; v;<br>
    <br>
    what if we had<br>
    <br>
    <div style=3D"width:100%; font-size:initial;
      font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
      color:rgb(31,73,125); text-align:initial;
      background-color:rgb(255,255,255)">
      struct X</div>
    <div style=3D"width:100%; font-size:initial;
      font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
      color:rgb(31,73,125); text-align:initial;
      background-color:rgb(255,255,255)">
      {</div>
    <div style=3D"width:100%; font-size:initial;
      font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
      color:rgb(31,73,125); text-align:initial;
      background-color:rgb(255,255,255)">
      =C2=A0 =C2=A0 auto x;</div>
    <div style=3D"width:100%; font-size:initial;
      font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
      color:rgb(31,73,125); text-align:initial;
      background-color:rgb(255,255,255)">
      =C2=A0 =C2=A0 auto y;</div>
    <div style=3D"width:100%; font-size:initial;
      font-family:Calibri,'Slate Pro',sans-serif,sans-serif;
      color:rgb(31,73,125); text-align:initial;
      background-color:rgb(255,255,255)">
      };</div>
    <br>
    X&lt;???, ???&gt; v;<br>
    <br>
    Should the parameters need to be given in the order of declaration
    of the auto/Concept data members?<br>
    <br>
    I find this confusing.<br>
    <br>
    Vicente<br>
  </body>
</html>

<p></p>

-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Discussion&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-discussion+unsubscribe@isocpp.org">std-discus=
sion+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-discussion@isocp=
p.org">std-discussion@isocpp.org</a>.<br />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-discussion/">http://groups.google.com/a/isocpp.org/group/std-discussion=
/</a>.<br />

--------------010009050209080206050501--

.