Topic: Thumbs Up for "Coroutines TS Use Cases" and the


Author: florian.csdt@gmail.com
Date: Fri, 22 Jun 2018 07:42:38 -0700 (PDT)
Raw View
------=_Part_12019_105285983.1529678559090
Content-Type: multipart/alternative;
 boundary="----=_Part_12020_1513321230.1529678559090"

------=_Part_12020_1513321230.1529678559090
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

The suffix unary operator --> would lead to ambiguous syntax:

f()-->+5;
// (f() -->) + (5)
// or
// (f()--) > (+5)

I don't know if you intended to use --> as a binary operator, but the infix=
=20
binary operator --> would also lead to ambiguous syntax:
f()-->g()
// (f()) --> (g())
// or
// (f()--) > (g())
In this case, it is not even possible to put brackets at the right place to=
=20
disambiguate.

I have the impression you could build more ambiguous examples, but that was=
=20
2 examples I had in mind.

However, I have the impression that ~> (both unary postfix and binary=20
infix) would never be ambiguous (<~ would be, though).


Le vendredi 22 juin 2018 15:45:35 UTC+2, mihailn...@gmail.com a =C3=A9crit =
:
>
> I am very excited to see Coroutines TS Use Cases=20
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0973r0.pdf> and=
 Core=20
> Coroutines =20
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1063r0.pdf>
>
> Ever since some CppCon presentations on how Coroutines can be used for no=
n=20
> async task, like unpacking 'expected' and 'optional' I was waiting for=20
> someone to push these in similar direction.
> More "basic" (less hooks, controlled allocation) , not so heavily=20
> influenced by async (syntax, design goals), recognized as more fundamenta=
l=20
> utility.=20
>
> In any case, I read=20
> <https://blog.jetbrains.com/clion/2018/06/iso-cpp-committee-rapperswil-20=
18-trip-report/>=20
> the committee didn't like the syntax, so I have a suggestion(s).
>
> First I like the idea of unpacking/unwrapping and that we should gat away=
=20
> from "(a)waiting".
> I think it will be nice to build on the idea of indirection and build=20
> (syntactically) on the indirection operator ->=20
>
> First variant is ~>, aka "soft indirection", this is, the indirection is=
=20
> not immediate, but after unpack/some time (if async)
>
> expected<int> SumOfSizes()
> {=20
>   int result =3D 0;=20
>   for (int i =3D 0; i < kMaxIndex; ++i)
>   {=20
>     result +=3D GetString(i)~>size(); //< unpack and call. Notice there i=
s=20
> no dot
>   }=20
>   return result;=20
> }=20
>
> I suggest to reuse the same op as "dereference"
>
> optional<string> f();=20
> string s =3D f()~>; //< "eject" the value
>
> Second alternative is long arrow --> or "far indirection", again=20
> non-immediate indirection, must unpack.=20
>
> optional<string> f();=20
> string s =3D f()-->; //< "eject"=20
>
> The main benefit (or downside) is that it is clearly visible.=20
>
> Thanks
>

--=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/92275c20-adc6-484e-81cc-df62fd54d42f%40isocpp.or=
g.

------=_Part_12020_1513321230.1529678559090
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">The suffix unary operator <span style=3D"font-family: cour=
ier new, monospace;">--&gt;</span> would lead to ambiguous syntax:<br><br><=
div style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 1=
87, 187); border-style: solid; border-width: 1px; overflow-wrap: break-word=
;" class=3D"prettyprint"><code class=3D"prettyprint"><div class=3D"subprett=
yprint"><span style=3D"color: #000;" class=3D"styled-by-prettify">f</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">()--&gt;+</span><s=
pan style=3D"color: #066;" class=3D"styled-by-prettify">5</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: #800=
;" class=3D"styled-by-prettify">// (f() --&gt;) + (5)</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color:=
 #800;" class=3D"styled-by-prettify">// or</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #800;" cla=
ss=3D"styled-by-prettify">// (f()--) &gt; (+5)</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"><br></span></div></code></div><br>I don=
&#39;t know if you intended to use <span style=3D"font-family: courier new,=
 monospace;">--&gt;</span> as a binary operator, but the infix binary opera=
tor <span style=3D"font-family: courier new, monospace;">--&gt;</span> woul=
d also lead to ambiguous syntax:<br><div style=3D"background-color: rgb(250=
, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; border-=
width: 1px; overflow-wrap: break-word;" class=3D"prettyprint"><code class=
=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #000;"=
 class=3D"styled-by-prettify">f</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">()--&gt;</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify">g</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: #800;" class=3D"styled-by-prettify">// (=
f()) --&gt; (g())</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"><br></span><span style=3D"color: #800;" class=3D"styled-by-prettify"=
>// or</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>=
</span><span style=3D"color: #800;" class=3D"styled-by-prettify">// (f()--)=
 &gt; (g())</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
><br></span></div></code></div>In this case, it is not even possible to put=
 brackets at the right place to disambiguate.<br><br>I have the impression =
you could build more ambiguous examples, but that was 2 examples I had in m=
ind.<br><br>However, I have the impression that <span style=3D"font-family:=
 courier new, monospace;">~&gt;</span> (both unary postfix and binary infix=
) would never be ambiguous (<span style=3D"font-family: courier new, monosp=
ace;">&lt;~</span> would be, though).<br><br><br>Le vendredi 22 juin 2018 1=
5:45:35 UTC+2, mihailn...@gmail.com a =C3=A9crit=C2=A0:<blockquote class=3D=
"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc s=
olid;padding-left: 1ex;"><div dir=3D"ltr"><div>I am very excited to see=C2=
=A0<a href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0973=
r0.pdf" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;=
http://www.google.com/url?q\x3dhttp%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%=
2Fwg21%2Fdocs%2Fpapers%2F2018%2Fp0973r0.pdf\x26sa\x3dD\x26sntz\x3d1\x26usg\=
x3dAFQjCNG_8_I30sNw2juv_7ewjxA0mEWCZw&#39;;return true;" onclick=3D"this.hr=
ef=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fwww.open-std.org%2Fjt=
c1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2018%2Fp0973r0.pdf\x26sa\x3dD\x26sntz\x3=
d1\x26usg\x3dAFQjCNG_8_I30sNw2juv_7ewjxA0mEWCZw&#39;;return true;">Coroutin=
es TS Use Cases</a> and <a href=3D"http://www.open-std.org/jtc1/sc22/wg21/d=
ocs/papers/2018/p1063r0.pdf" target=3D"_blank" rel=3D"nofollow" onmousedown=
=3D"this.href=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fwww.open-s=
td.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2018%2Fp1063r0.pdf\x26sa\x3dD=
\x26sntz\x3d1\x26usg\x3dAFQjCNFsBxvKM3pjCsfv1d9FutaDuB0UVw&#39;;return true=
;" onclick=3D"this.href=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2F=
www.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2018%2Fp1063r0.pdf\=
x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFsBxvKM3pjCsfv1d9FutaDuB0UVw&#39;;r=
eturn true;">Core Coroutines=C2=A0</a></div><div><br></div><div>Ever since =
some CppCon presentations on how Coroutines can be used for non async task,=
 like unpacking &#39;expected&#39; and &#39;optional&#39; I was waiting for=
 someone to push these in similar direction.</div><div>More &quot;basic&quo=
t; (less hooks, controlled allocation) , not so heavily influenced by async=
 (syntax, design goals), recognized as more fundamental utility.=C2=A0</div=
><div><br></div><div>In any case, I <a href=3D"https://blog.jetbrains.com/c=
lion/2018/06/iso-cpp-committee-rapperswil-2018-trip-report/" target=3D"_bla=
nk" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://www.google.com=
/url?q\x3dhttps%3A%2F%2Fblog.jetbrains.com%2Fclion%2F2018%2F06%2Fiso-cpp-co=
mmittee-rapperswil-2018-trip-report%2F\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAF=
QjCNHj51eu_w_5qJC_KxNEj6gy29PH5g&#39;;return true;" onclick=3D"this.href=3D=
&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fblog.jetbrains.com%2Fcli=
on%2F2018%2F06%2Fiso-cpp-committee-rapperswil-2018-trip-report%2F\x26sa\x3d=
D\x26sntz\x3d1\x26usg\x3dAFQjCNHj51eu_w_5qJC_KxNEj6gy29PH5g&#39;;return tru=
e;">read</a> the committee didn&#39;t like the syntax, so I have a suggesti=
on(s).</div><div><br></div><div>First I like the idea of unpacking/unwrappi=
ng and that we should gat away from &quot;(a)waiting&quot;.</div><div>I thi=
nk it will be nice to build on the idea of indirection and build (syntactic=
ally) on the indirection operator <font face=3D"courier new,monospace">-&gt=
;</font>=C2=A0</div><div><br></div><div>First variant is ~&gt;, aka &quot;s=
oft indirection&quot;, this is, the indirection is not immediate, but after=
 unpack/some time (if async)</div><div><br></div><font face=3D"courier new,=
monospace">expected&lt;int&gt; SumOfSizes()<br>{ <br>=C2=A0 int result =3D =
0; <br>=C2=A0 for (int i =3D 0; i &lt; kMaxIndex; ++i)<br>=C2=A0 {    <br>=
=C2=A0 =C2=A0 result +=3D GetString(i)~&gt;size(); //&lt; unpack and call. =
Notice there is no dot<br>=C2=A0 }   <br>=C2=A0 return result; <br></font><=
div><font face=3D"courier new,monospace">}=C2=A0</font></div><div><br></div=
><div>I suggest to reuse the same op as &quot;dereference&quot;</div><div><=
br></div><div><font face=3D"courier new,monospace">optional&lt;string&gt; f=
();=C2=A0</font></div><div><font face=3D"courier new,monospace">string s =
=3D f()~&gt;; //&lt; &quot;eject&quot; the value</font></div><div><font fac=
e=3D"courier new,monospace"><br></font></div><div><font face=3D"arial,sans-=
serif">Second alternative is long arrow <font face=3D"courier new,monospace=
">--&gt;</font> <span style=3D"text-align:left;color:rgb(34,34,34);text-tra=
nsform:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-style=
:normal;font-variant:normal;font-weight:400;text-decoration:none;word-spaci=
ng:0px;display:inline!important;white-space:normal;float:none;background-co=
lor:transparent">or &quot;far indirection&quot;, again non-immediate indire=
ction, must unpack.=C2=A0</span></font></div><div><font face=3D"arial,sans-=
serif"><span style=3D"text-align:left;color:rgb(34,34,34);text-transform:no=
ne;text-indent:0px;letter-spacing:normal;font-size:13px;font-style:normal;f=
ont-variant:normal;font-weight:400;text-decoration:none;word-spacing:0px;di=
splay:inline!important;white-space:normal;float:none;background-color:trans=
parent"><br></span></font></div><div><font face=3D"arial,sans-serif"><span =
style=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text-inden=
t:0px;letter-spacing:normal;font-size:13px;font-variant:normal;word-spacing=
:0px;display:inline!important;white-space:normal;float:none;background-colo=
r:transparent"><div><font style=3D"border-bottom-color:rgb(34,34,34);border=
-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34);=
border-left-style:none;border-left-width:0px;border-right-color:rgb(34,34,3=
4);border-right-style:none;border-right-width:0px;border-top-color:rgb(34,3=
4,34);border-top-style:none;border-top-width:0px;margin-bottom:0px;margin-l=
eft:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px=
;padding-right:0px;padding-top:0px" face=3D"courier new,monospace">optional=
&lt;string&gt; f();=C2=A0</font></div><div><font style=3D"border-bottom-col=
or:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;border-le=
ft-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;border-=
right-color:rgb(34,34,34);border-right-style:none;border-right-width:0px;bo=
rder-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;mar=
gin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bott=
om:0px;padding-left:0px;padding-right:0px;padding-top:0px" face=3D"courier =
new,monospace">string s =3D f()--&gt;; //&lt; &quot;eject&quot;=C2=A0</font=
></div><div><font style=3D"border-bottom-color:rgb(34,34,34);border-bottom-=
style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-l=
eft-style:none;border-left-width:0px;border-right-color:rgb(34,34,34);borde=
r-right-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);bo=
rder-top-style:none;border-top-width:0px;margin-bottom:0px;margin-left:0px;=
margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding=
-right:0px;padding-top:0px" face=3D"courier new,monospace"><br></font></div=
><div><font style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:=
none;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-st=
yle:none;border-left-width:0px;border-right-color:rgb(34,34,34);border-righ=
t-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-t=
op-style:none;border-top-width:0px;margin-bottom:0px;margin-left:0px;margin=
-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right=
:0px;padding-top:0px">The main benefit (or downside) is that it is clearly =
visible.=C2=A0</font><font style=3D"border-bottom-color:rgb(34,34,34);borde=
r-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34)=
;border-left-style:none;border-left-width:0px;border-right-color:rgb(34,34,=
34);border-right-style:none;border-right-width:0px;border-top-color:rgb(34,=
34,34);border-top-style:none;border-top-width:0px;margin-bottom:0px;margin-=
left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0p=
x;padding-right:0px;padding-top:0px"><br></font></div><div><br></div><div>T=
hanks</div></span></font></div></div></blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/92275c20-adc6-484e-81cc-df62fd54d42f%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/92275c20-adc6-484e-81cc-df62fd54d42f=
%40isocpp.org</a>.<br />

------=_Part_12020_1513321230.1529678559090--

------=_Part_12019_105285983.1529678559090--

.


Author: "'Geoffrey Romer' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Mon, 25 Jun 2018 14:31:04 -0700
Raw View
--000000000000fd2b8f056f7e193f
Content-Type: text/plain; charset="UTF-8"

On Fri, Jun 22, 2018 at 6:45 AM <mihailnajdenov@gmail.com> wrote:

> I am very excited to see Coroutines TS Use Cases
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0973r0.pdf> and Core
> Coroutines
> <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1063r0.pdf>
>
> Ever since some CppCon presentations on how Coroutines can be used for non
> async task, like unpacking 'expected' and 'optional' I was waiting for
> someone to push these in similar direction.
> More "basic" (less hooks, controlled allocation) , not so heavily
> influenced by async (syntax, design goals), recognized as more fundamental
> utility.
>
> In any case, I read
> <https://blog.jetbrains.com/clion/2018/06/iso-cpp-committee-rapperswil-2018-trip-report/>
> the committee didn't like the syntax, so I have a suggestion(s).
>

I think that post is referring more to objections to the `operator[<-]()`
overload syntax, rather than the spelling of the operator as such.


>
> First I like the idea of unpacking/unwrapping and that we should gat away
> from "(a)waiting".
> I think it will be nice to build on the idea of indirection and build
> (syntactically) on the indirection operator ->
>
> First variant is ~>, aka "soft indirection", this is, the indirection is
> not immediate, but after unpack/some time (if async)
>
> expected<int> SumOfSizes()
> {
>   int result = 0;
>   for (int i = 0; i < kMaxIndex; ++i)
>   {
>     result += GetString(i)~>size(); //< unpack and call. Notice there is
> no dot
>   }
>   return result;
> }
>
> I suggest to reuse the same op as "dereference"
>
> optional<string> f();
> string s = f()~>; //< "eject" the value
>
> Second alternative is long arrow --> or "far indirection", again
> non-immediate indirection, must unpack.
>
> optional<string> f();
> string s = f()-->; //< "eject"
>
> The main benefit (or downside) is that it is clearly visible.
>
> Thanks
>

--
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/CA%2BcyFgt6-A7x94_MQ6LxA8T91HERJ1pzHnM3jTh1EBEUm%2BtKug%40mail.gmail.com.

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

<div dir=3D"ltr"><br><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri=
, Jun 22, 2018 at 6:45 AM &lt;<a href=3D"mailto:mihailnajdenov@gmail.com">m=
ihailnajdenov@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_=
quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1=
ex"><div dir=3D"ltr"><div>I am very excited to see=C2=A0<a href=3D"http://w=
ww.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0973r0.pdf" target=3D"_bla=
nk">Coroutines TS Use Cases</a> and <a href=3D"http://www.open-std.org/jtc1=
/sc22/wg21/docs/papers/2018/p1063r0.pdf" target=3D"_blank">Core Coroutines=
=C2=A0</a></div><div><br></div><div>Ever since some CppCon presentations on=
 how Coroutines can be used for non async task, like unpacking &#39;expecte=
d&#39; and &#39;optional&#39; I was waiting for someone to push these in si=
milar direction.</div><div>More &quot;basic&quot; (less hooks, controlled a=
llocation) , not so heavily influenced by async (syntax, design goals), rec=
ognized as more fundamental utility.=C2=A0</div><div><br></div><div>In any =
case, I <a href=3D"https://blog.jetbrains.com/clion/2018/06/iso-cpp-committ=
ee-rapperswil-2018-trip-report/" target=3D"_blank">read</a> the committee d=
idn&#39;t like the syntax, so I have a suggestion(s).</div></div></blockquo=
te><div><br></div><div>I think that post is referring more to objections to=
 the `operator[&lt;-]()` overload syntax, rather than the spelling of the o=
perator as such.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
dir=3D"ltr"><div><br></div><div>First I like the idea of unpacking/unwrappi=
ng and that we should gat away from &quot;(a)waiting&quot;.</div><div>I thi=
nk it will be nice to build on the idea of indirection and build (syntactic=
ally) on the indirection operator <font face=3D"courier new,monospace">-&gt=
;</font>=C2=A0</div><div><br></div><div>First variant is ~&gt;, aka &quot;s=
oft indirection&quot;, this is, the indirection is not immediate, but after=
 unpack/some time (if async)</div><div><br></div><font face=3D"courier new,=
monospace">expected&lt;int&gt; SumOfSizes()<br>{ <br>=C2=A0 int result =3D =
0; <br>=C2=A0 for (int i =3D 0; i &lt; kMaxIndex; ++i)<br>=C2=A0 {    <br>=
=C2=A0 =C2=A0 result +=3D GetString(i)~&gt;size(); //&lt; unpack and call. =
Notice there is no dot<br>=C2=A0 }   <br>=C2=A0 return result; <br></font><=
div><font face=3D"courier new,monospace">}=C2=A0</font></div><div><br></div=
><div>I suggest to reuse the same op as &quot;dereference&quot;</div><div><=
br></div><div><font face=3D"courier new,monospace">optional&lt;string&gt; f=
();=C2=A0</font></div><div><font face=3D"courier new,monospace">string s =
=3D f()~&gt;; //&lt; &quot;eject&quot; the value</font></div><div><font fac=
e=3D"courier new,monospace"><br></font></div><div><font face=3D"arial,sans-=
serif">Second alternative is long arrow <font face=3D"courier new,monospace=
">--&gt;</font> <span style=3D"text-align:left;color:rgb(34,34,34);text-tra=
nsform:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-style=
:normal;font-variant:normal;font-weight:400;text-decoration:none;word-spaci=
ng:0px;display:inline!important;white-space:normal;float:none;background-co=
lor:transparent">or &quot;far indirection&quot;, again non-immediate indire=
ction, must unpack.=C2=A0</span></font></div><div><font face=3D"arial,sans-=
serif"><span style=3D"text-align:left;color:rgb(34,34,34);text-transform:no=
ne;text-indent:0px;letter-spacing:normal;font-size:13px;font-style:normal;f=
ont-variant:normal;font-weight:400;text-decoration:none;word-spacing:0px;di=
splay:inline!important;white-space:normal;float:none;background-color:trans=
parent"><br></span></font></div><div><font face=3D"arial,sans-serif"><span =
style=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text-inden=
t:0px;letter-spacing:normal;font-size:13px;font-variant:normal;word-spacing=
:0px;display:inline!important;white-space:normal;float:none;background-colo=
r:transparent"><div><font face=3D"courier new,monospace" style=3D"border-bo=
ttom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;b=
order-left-color:rgb(34,34,34);border-left-style:none;border-left-width:0px=
;border-right-color:rgb(34,34,34);border-right-style:none;border-right-widt=
h:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-top-width=
:0px;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padd=
ing-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px">optional=
&lt;string&gt; f();=C2=A0</font></div><div><font face=3D"courier new,monosp=
ace" style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:none;bo=
rder-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-style:non=
e;border-left-width:0px;border-right-color:rgb(34,34,34);border-right-style=
:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-styl=
e:none;border-top-width:0px;margin-bottom:0px;margin-left:0px;margin-right:=
0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;pa=
dding-top:0px">string s =3D f()--&gt;; //&lt; &quot;eject&quot;=C2=A0</font=
></div><div><font face=3D"courier new,monospace" style=3D"border-bottom-col=
or:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;border-le=
ft-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;border-=
right-color:rgb(34,34,34);border-right-style:none;border-right-width:0px;bo=
rder-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;mar=
gin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bott=
om:0px;padding-left:0px;padding-right:0px;padding-top:0px"><br></font></div=
><div><font style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:=
none;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-st=
yle:none;border-left-width:0px;border-right-color:rgb(34,34,34);border-righ=
t-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-t=
op-style:none;border-top-width:0px;margin-bottom:0px;margin-left:0px;margin=
-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right=
:0px;padding-top:0px">The main benefit (or downside) is that it is clearly =
visible.=C2=A0</font><font style=3D"border-bottom-color:rgb(34,34,34);borde=
r-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34)=
;border-left-style:none;border-left-width:0px;border-right-color:rgb(34,34,=
34);border-right-style:none;border-right-width:0px;border-top-color:rgb(34,=
34,34);border-top-style:none;border-top-width:0px;margin-bottom:0px;margin-=
left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0p=
x;padding-right:0px;padding-top:0px"><br></font></div><div><br></div><div>T=
hanks</div></span></font></div></div></blockquote></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/CA%2BcyFgt6-A7x94_MQ6LxA8T91HERJ1pzHn=
M3jTh1EBEUm%2BtKug%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CA%2BcyFgt6-A=
7x94_MQ6LxA8T91HERJ1pzHnM3jTh1EBEUm%2BtKug%40mail.gmail.com</a>.<br />

--000000000000fd2b8f056f7e193f--

.