Topic: Simple, terse universal forwading for the
Author: Nicolas Lesser <blitzrakete@gmail.com>
Date: Sun, 27 May 2018 18:36:02 +0200
Raw View
--0000000000009c22d1056d329dfc
Content-Type: text/plain; charset="UTF-8"
>
> It ALWAYS clear what to use.
>
It is AWALAYS wrong to use the other.
>
No, that's not true. What if I want to move a forwarding reference? This is
a very legit usage of std::move.
> ALL information is available to the compiler
>
> => the compiler can do the work for us.
>
> If you want to be explicit - the old functions will still be there, but I
> am hard pressed to find ONE instance, where it is NEEDED.
>
> Again, is there a place *ever* where this heuristic will be wrong?
>
Yes, as said above:
template<typename T>
void eat(T &&Value) {
Vec.push_back(std::move(Value));
}
I don't want to do any unnecessary moves or copy and duplicate code, so the
above is the only way to do this. Your give() function would do the wrong
thing here.
--
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/CALmDwq2ku8%3DUX1XYGtroNQ5nUCZ6HvSN9TDSmrdg4S%2BYOU0R1A%40mail.gmail.com.
--0000000000009c22d1056d329dfc
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_quote"><blockquote class=3D"gmail_quot=
e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">=
<div dir=3D"ltr"><div>It ALWAYS clear what to use.=C2=A0<br></div></div></b=
lockquote><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>It is AWALAY=
S wrong to use the other.</div></div></blockquote><div><br></div><div>No, t=
hat's not true. What if I want to move a forwarding reference? This is =
a very legit usage of std::move.</div><div>=C2=A0</div><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><div dir=3D"ltr"><div>ALL information is available to the compil=
er</div><div><br></div><div>=3D> the compiler can do the work for us.</d=
iv><div><br></div><div>If you want to be explicit - the old functions will =
still be there, but I am hard pressed to find ONE instance, where it is NEE=
DED.</div><div><br></div><div>Again, is there a place <i>ever</i> where thi=
s heuristic will be wrong?=C2=A0</div></div></blockquote><div><br></div><di=
v>Yes, as said above:</div><div><br></div><div>template<typename T></=
div><div>void eat(T &&Value) {<br>=C2=A0 Vec.push_back(std::move(Va=
lue));</div><div>}</div><div><br></div><div>I don't want to do any unne=
cessary moves or copy and duplicate code, so the above is the only way to d=
o this. Your give() function would do the wrong thing here.</div></div></di=
v>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CALmDwq2ku8%3DUX1XYGtroNQ5nUCZ6HvSN9T=
DSmrdg4S%2BYOU0R1A%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALmDwq2ku8%3=
DUX1XYGtroNQ5nUCZ6HvSN9TDSmrdg4S%2BYOU0R1A%40mail.gmail.com</a>.<br />
--0000000000009c22d1056d329dfc--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sun, 27 May 2018 09:51:53 -0700 (PDT)
Raw View
------=_Part_26908_192512710.1527439913958
Content-Type: multipart/alternative;
boundary="----=_Part_26909_1146235021.1527439913959"
------=_Part_26909_1146235021.1527439913959
Content-Type: text/plain; charset="UTF-8"
On Sunday, May 27, 2018 at 12:37:25 PM UTC-4, Nicolas Lesser wrote:
>
> It ALWAYS clear what to use.
>>
> It is AWALAYS wrong to use the other.
>>
>
> No, that's not true. What if I want to move a forwarding reference? This
> is a very legit usage of std::move.
>
>
>> ALL information is available to the compiler
>>
>> => the compiler can do the work for us.
>>
>> If you want to be explicit - the old functions will still be there, but I
>> am hard pressed to find ONE instance, where it is NEEDED.
>>
>> Again, is there a place *ever* where this heuristic will be wrong?
>>
>
> Yes, as said above:
>
> template<typename T>
> void eat(T &&Value) {
> Vec.push_back(std::move(Value));
> }
>
> I don't want to do any unnecessary moves or copy and duplicate code, so
> the above is the only way to do this. Your give() function would do the
> wrong thing here.
>
No, that's wrong. Observe:
std::string value = ...;
eat(value);
Has `value` been changed? I certainly can't tell from looking at the code.
And if you had used `forward` instead of `move`, the answer would be "no".
By contrast, if I had done `eat(std::move(value))`, I can reasonably assume
`value` has been moved from.
This is the very reason why C++ does not allow implicit moving in a lot of
places. The goal is to make it so that, if a value is being moved from, you
can see it in people's code at every level of that code.
*Can* you write the code you showed? Sure. *Should you* write such
functions? No.
What you *should* write is this:
template<typename T,
class = std::enable_if_t<!std::is_lvalue_reference<T>::value>>
void eat(T &&Value)
{
Vec.push_back(std::move(Value));
}
This forcefully prevents `eat` from being called with lvalues. If you write
an interface where the API function will move from the value, then you
should *prevent* users from passing lvalues, period.
--
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/8e1c6607-a92d-496b-aad1-e992e049a748%40isocpp.org.
------=_Part_26909_1146235021.1527439913959
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Sunday, May 27, 2018 at 12:37:25 PM UTC-4, Nico=
las Lesser wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr"><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"m=
argin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"l=
tr"><div>It ALWAYS clear what to use.=C2=A0<br></div></div></blockquote><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #=
ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>It is AWALAYS wrong to us=
e the other.</div></div></blockquote><div><br></div><div>No, that's not=
true. What if I want to move a forwarding reference? This is a very legit =
usage of std::move.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote"=
style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><d=
iv dir=3D"ltr"><div>ALL information is available to the compiler</div><div>=
<br></div><div>=3D> the compiler can do the work for us.</div><div><br><=
/div><div>If you want to be explicit - the old functions will still be ther=
e, but I am hard pressed to find ONE instance, where it is NEEDED.</div><di=
v><br></div><div>Again, is there a place <i>ever</i> where this heuristic w=
ill be wrong?=C2=A0</div></div></blockquote><div><br></div><div>Yes, as sai=
d above:</div><div><br></div><div>template<typename T></div><div>void=
eat(T &&Value) {<br>=C2=A0 Vec.push_back(std::move(Value)<wbr>);</=
div><div>}</div><div><br></div><div>I don't want to do any unnecessary =
moves or copy and duplicate code, so the above is the only way to do this. =
Your give() function would do the wrong thing here.</div></div></div></bloc=
kquote><div><br></div><div>No, that's wrong. Observe:</div><div><br></d=
iv><div style=3D"background-color: rgb(250, 250, 250); border-color: rgb(18=
7, 187, 187); border-style: solid; border-width: 1px; overflow-wrap: break-=
word;" class=3D"prettyprint"><code class=3D"prettyprint"><div class=3D"subp=
rettyprint"><span style=3D"color: #000;" class=3D"styled-by-prettify">std</=
span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</span><sp=
an style=3D"color: #008;" class=3D"styled-by-prettify">string</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"> value </span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #660=
;" class=3D"styled-by-prettify">...;</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"><br>eat</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify">value</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">);</span></div></code></div><div><br></div><div>Has `value` been =
changed? I certainly can't tell from looking at the code. And if you ha=
d used `forward` instead of `move`, the answer would be "no".</di=
v><div><br></div>By contrast, if I had done `eat(std::move(value))`, I can =
reasonably assume `value` has been moved from.<br><div><br></div><div><div>=
This is the very reason why C++ does not allow implicit moving in a lot of =
places. The goal is to make it so that, if a value is being moved from, you=
can see it in people's code at every level of that code.</div><div><br=
></div><div><i>Can</i> you write the code you showed? Sure. <i>Should you</=
i> write such functions? No.</div></div><div><br></div><div>What you <i>sho=
uld</i> write is this:</div><div><br></div><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: #=
008;" class=3D"styled-by-prettify">template</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify"><</span><span style=3D"color: #008;" cl=
ass=3D"styled-by-prettify">typename</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> T</span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"><br>=C2=A0 </span><span style=3D"color: #008;" class=3D"styled-by-p=
rettify">class</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> std</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">::</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify">enable_if_t</span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify"><!</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify">std</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">::</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify">is_lvalue_reference</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify"><</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify">T</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">>::</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify">value</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">>></span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"><br></span><span style=3D"color: #008;" class=3D"styled-by=
-prettify">void</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> eat</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify">T </span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">&&</span><=
span style=3D"color: #606;" class=3D"styled-by-prettify">Value</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color:=
#660;" class=3D"styled-by-prettify">{</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify"><br>=C2=A0 </span><span style=3D"color: #606;" =
class=3D"styled-by-prettify">Vec</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">.</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify">push_back</span><span style=3D"color: #660;" class=3D"styled=
-by-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify">std</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify">move</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span st=
yle=3D"color: #606;" class=3D"styled-by-prettify">Value</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">));</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">}</span></div></code></div><div><br></div=
><div>This forcefully prevents `eat` from being called with lvalues. If you=
write an interface where the API function will move from the value, then y=
ou should <i>prevent</i> users from passing lvalues, period.<br></div></div=
>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/8e1c6607-a92d-496b-aad1-e992e049a748%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/8e1c6607-a92d-496b-aad1-e992e049a748=
%40isocpp.org</a>.<br />
------=_Part_26909_1146235021.1527439913959--
------=_Part_26908_192512710.1527439913958--
.
Author: Nicolas Lesser <blitzrakete@gmail.com>
Date: Sun, 27 May 2018 19:09:07 +0200
Raw View
--000000000000f4aa7b056d3313e2
Content-Type: text/plain; charset="UTF-8"
I see. Personally, I also wouldn't write such a function too :). But thanks
for clarifying.
On Sun, May 27, 2018 at 6:51 PM Nicol Bolas <jmckesson@gmail.com> wrote:
>
>
> On Sunday, May 27, 2018 at 12:37:25 PM UTC-4, Nicolas Lesser wrote:
>>
>> It ALWAYS clear what to use.
>>>
>> It is AWALAYS wrong to use the other.
>>>
>>
>> No, that's not true. What if I want to move a forwarding reference? This
>> is a very legit usage of std::move.
>>
>>
>>> ALL information is available to the compiler
>>>
>>> => the compiler can do the work for us.
>>>
>>> If you want to be explicit - the old functions will still be there, but
>>> I am hard pressed to find ONE instance, where it is NEEDED.
>>>
>>> Again, is there a place *ever* where this heuristic will be wrong?
>>>
>>
>> Yes, as said above:
>>
>> template<typename T>
>> void eat(T &&Value) {
>> Vec.push_back(std::move(Value));
>> }
>>
>> I don't want to do any unnecessary moves or copy and duplicate code, so
>> the above is the only way to do this. Your give() function would do the
>> wrong thing here.
>>
>
> No, that's wrong. Observe:
>
> std::string value = ...;
> eat(value);
>
> Has `value` been changed? I certainly can't tell from looking at the code.
> And if you had used `forward` instead of `move`, the answer would be "no".
>
> By contrast, if I had done `eat(std::move(value))`, I can reasonably
> assume `value` has been moved from.
>
> This is the very reason why C++ does not allow implicit moving in a lot of
> places. The goal is to make it so that, if a value is being moved from, you
> can see it in people's code at every level of that code.
>
> *Can* you write the code you showed? Sure. *Should you* write such
> functions? No.
>
> What you *should* write is this:
>
> template<typename T,
> class = std::enable_if_t<!std::is_lvalue_reference<T>::value>>
> void eat(T &&Value)
> {
> Vec.push_back(std::move(Value));
> }
>
> This forcefully prevents `eat` from being called with lvalues. If you
> write an interface where the API function will move from the value, then
> you should *prevent* users from passing lvalues, period.
>
> --
> 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/8e1c6607-a92d-496b-aad1-e992e049a748%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8e1c6607-a92d-496b-aad1-e992e049a748%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
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/CALmDwq1CpLZJMFiY1-3Nk-bq%2B686h2g7rdT6JcSpSg6yYu39zg%40mail.gmail.com.
--000000000000f4aa7b056d3313e2
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I see. Personally, I also wouldn't write such a functi=
on too :). But thanks for clarifying.</div><br><div class=3D"gmail_quote"><=
div dir=3D"ltr">On Sun, May 27, 2018 at 6:51 PM Nicol Bolas <<a href=3D"=
mailto:jmckesson@gmail.com">jmckesson@gmail.com</a>> wrote:<br></div><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #=
ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><br>On Sunday, May 27, 201=
8 at 12:37:25 PM UTC-4, Nicolas Lesser wrote:<blockquote class=3D"gmail_quo=
te" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-=
left:1ex"><div dir=3D"ltr"><div class=3D"gmail_quote"><blockquote class=3D"=
gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-=
left:1ex"><div dir=3D"ltr"><div>It ALWAYS clear what to use.=C2=A0<br></div=
></div></blockquote><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0=
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>It=
is AWALAYS wrong to use the other.</div></div></blockquote><div><br></div>=
<div>No, that's not true. What if I want to move a forwarding reference=
? This is a very legit usage of std::move.</div><div>=C2=A0</div><blockquot=
e class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc sol=
id;padding-left:1ex"><div dir=3D"ltr"><div>ALL information is available to =
the compiler</div><div><br></div><div>=3D> the compiler can do the work =
for us.</div><div><br></div><div>If you want to be explicit - the old funct=
ions will still be there, but I am hard pressed to find ONE instance, where=
it is NEEDED.</div><div><br></div><div>Again, is there a place <i>ever</i>=
where this heuristic will be wrong?=C2=A0</div></div></blockquote><div><br=
></div><div>Yes, as said above:</div><div><br></div><div>template<typena=
me T></div><div>void eat(T &&Value) {<br>=C2=A0 Vec.push_back(st=
d::move(Value));</div><div>}</div><div><br></div><div>I don't want to d=
o any unnecessary moves or copy and duplicate code, so the above is the onl=
y way to do this. Your give() function would do the wrong thing here.</div>=
</div></div></blockquote><div><br></div><div>No, that's wrong. Observe:=
</div><div><br></div><div style=3D"background-color:rgb(250,250,250);border=
-color:rgb(187,187,187);border-style:solid;border-width:1px" class=3D"m_-34=
22731299770880894prettyprint"><code class=3D"m_-3422731299770880894prettypr=
int"><div class=3D"m_-3422731299770880894subprettyprint"><span style=3D"col=
or:#000" class=3D"m_-3422731299770880894styled-by-prettify">std</span><span=
style=3D"color:#660" class=3D"m_-3422731299770880894styled-by-prettify">::=
</span><span style=3D"color:#008" class=3D"m_-3422731299770880894styled-by-=
prettify">string</span><span style=3D"color:#000" class=3D"m_-3422731299770=
880894styled-by-prettify"> value </span><span style=3D"color:#660" class=3D=
"m_-3422731299770880894styled-by-prettify">=3D</span><span style=3D"color:#=
000" class=3D"m_-3422731299770880894styled-by-prettify"> </span><span style=
=3D"color:#660" class=3D"m_-3422731299770880894styled-by-prettify">...;</sp=
an><span style=3D"color:#000" class=3D"m_-3422731299770880894styled-by-pret=
tify"><br>eat</span><span style=3D"color:#660" class=3D"m_-3422731299770880=
894styled-by-prettify">(</span><span style=3D"color:#000" class=3D"m_-34227=
31299770880894styled-by-prettify">value</span><span style=3D"color:#660" cl=
ass=3D"m_-3422731299770880894styled-by-prettify">);</span></div></code></di=
v><div><br></div><div>Has `value` been changed? I certainly can't tell =
from looking at the code. And if you had used `forward` instead of `move`, =
the answer would be "no".</div><div><br></div>By contrast, if I h=
ad done `eat(std::move(value))`, I can reasonably assume `value` has been m=
oved from.<br><div><br></div><div><div>This is the very reason why C++ does=
not allow implicit moving in a lot of places. The goal is to make it so th=
at, if a value is being moved from, you can see it in people's code at =
every level of that code.</div><div><br></div><div><i>Can</i> you write the=
code you showed? Sure. <i>Should you</i> write such functions? No.</div></=
div><div><br></div><div>What you <i>should</i> write is this:</div><div><br=
></div><div style=3D"background-color:rgb(250,250,250);border-color:rgb(187=
,187,187);border-style:solid;border-width:1px" class=3D"m_-3422731299770880=
894prettyprint"><code class=3D"m_-3422731299770880894prettyprint"><div clas=
s=3D"m_-3422731299770880894subprettyprint"><span style=3D"color:#008" class=
=3D"m_-3422731299770880894styled-by-prettify">template</span><span style=3D=
"color:#660" class=3D"m_-3422731299770880894styled-by-prettify"><</span>=
<span style=3D"color:#008" class=3D"m_-3422731299770880894styled-by-prettif=
y">typename</span><span style=3D"color:#000" class=3D"m_-342273129977088089=
4styled-by-prettify"> T</span><span style=3D"color:#660" class=3D"m_-342273=
1299770880894styled-by-prettify">,</span><span style=3D"color:#000" class=
=3D"m_-3422731299770880894styled-by-prettify"><br>=C2=A0 </span><span style=
=3D"color:#008" class=3D"m_-3422731299770880894styled-by-prettify">class</s=
pan><span style=3D"color:#000" class=3D"m_-3422731299770880894styled-by-pre=
ttify"> </span><span style=3D"color:#660" class=3D"m_-3422731299770880894st=
yled-by-prettify">=3D</span><span style=3D"color:#000" class=3D"m_-34227312=
99770880894styled-by-prettify"> std</span><span style=3D"color:#660" class=
=3D"m_-3422731299770880894styled-by-prettify">::</span><span style=3D"color=
:#000" class=3D"m_-3422731299770880894styled-by-prettify">enable_if_t</span=
><span style=3D"color:#660" class=3D"m_-3422731299770880894styled-by-pretti=
fy"><!</span><span style=3D"color:#000" class=3D"m_-3422731299770880894s=
tyled-by-prettify">std</span><span style=3D"color:#660" class=3D"m_-3422731=
299770880894styled-by-prettify">::</span><span style=3D"color:#000" class=
=3D"m_-3422731299770880894styled-by-prettify">is_lvalue_reference</span><sp=
an style=3D"color:#660" class=3D"m_-3422731299770880894styled-by-prettify">=
<</span><span style=3D"color:#000" class=3D"m_-3422731299770880894styled=
-by-prettify">T</span><span style=3D"color:#660" class=3D"m_-34227312997708=
80894styled-by-prettify">>::</span><span style=3D"color:#000" class=3D"m=
_-3422731299770880894styled-by-prettify">value</span><span style=3D"color:#=
660" class=3D"m_-3422731299770880894styled-by-prettify">>></span><spa=
n style=3D"color:#000" class=3D"m_-3422731299770880894styled-by-prettify"><=
br></span><span style=3D"color:#008" class=3D"m_-3422731299770880894styled-=
by-prettify">void</span><span style=3D"color:#000" class=3D"m_-342273129977=
0880894styled-by-prettify"> eat</span><span style=3D"color:#660" class=3D"m=
_-3422731299770880894styled-by-prettify">(</span><span style=3D"color:#000"=
class=3D"m_-3422731299770880894styled-by-prettify">T </span><span style=3D=
"color:#660" class=3D"m_-3422731299770880894styled-by-prettify">&&<=
/span><span style=3D"color:#606" class=3D"m_-3422731299770880894styled-by-p=
rettify">Value</span><span style=3D"color:#660" class=3D"m_-342273129977088=
0894styled-by-prettify">)</span><span style=3D"color:#000" class=3D"m_-3422=
731299770880894styled-by-prettify"><br></span><span style=3D"color:#660" cl=
ass=3D"m_-3422731299770880894styled-by-prettify">{</span><span style=3D"col=
or:#000" class=3D"m_-3422731299770880894styled-by-prettify"><br>=C2=A0 </sp=
an><span style=3D"color:#606" class=3D"m_-3422731299770880894styled-by-pret=
tify">Vec</span><span style=3D"color:#660" class=3D"m_-3422731299770880894s=
tyled-by-prettify">.</span><span style=3D"color:#000" class=3D"m_-342273129=
9770880894styled-by-prettify">push_back</span><span style=3D"color:#660" cl=
ass=3D"m_-3422731299770880894styled-by-prettify">(</span><span style=3D"col=
or:#000" class=3D"m_-3422731299770880894styled-by-prettify">std</span><span=
style=3D"color:#660" class=3D"m_-3422731299770880894styled-by-prettify">::=
</span><span style=3D"color:#000" class=3D"m_-3422731299770880894styled-by-=
prettify">move</span><span style=3D"color:#660" class=3D"m_-342273129977088=
0894styled-by-prettify">(</span><span style=3D"color:#606" class=3D"m_-3422=
731299770880894styled-by-prettify">Value</span><span style=3D"color:#660" c=
lass=3D"m_-3422731299770880894styled-by-prettify">));</span><span style=3D"=
color:#000" class=3D"m_-3422731299770880894styled-by-prettify"><br></span><=
span style=3D"color:#660" class=3D"m_-3422731299770880894styled-by-prettify=
">}</span></div></code></div><div><br></div><div>This forcefully prevents `=
eat` from being called with lvalues. If you write an interface where the AP=
I function will move from the value, then you should <i>prevent</i> users f=
rom passing lvalues, period.<br></div></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">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/8e1c6607-a92d-496b-aad1-e992e049a748%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8e1c6607-a92d-=
496b-aad1-e992e049a748%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CALmDwq1CpLZJMFiY1-3Nk-bq%2B686h2g7rd=
T6JcSpSg6yYu39zg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALmDwq1CpLZJMF=
iY1-3Nk-bq%2B686h2g7rdT6JcSpSg6yYu39zg%40mail.gmail.com</a>.<br />
--000000000000f4aa7b056d3313e2--
.
Author: mihailnajdenov@gmail.com
Date: Sun, 27 May 2018 12:05:10 -0700 (PDT)
Raw View
------=_Part_27154_841629941.1527447910286
Content-Type: multipart/alternative;
boundary="----=_Part_27155_466580422.1527447910286"
------=_Part_27155_466580422.1527447910286
Content-Type: text/plain; charset="UTF-8"
So the question still stands:
Is there a *valid* reason to move a forwarding reference? Is there a *need*
for this?
If there is a need, then move can be preserved and used instead.
If there is no need, move *could* be deprecated.
Question 2: Should one ever use forward *instead of* move.
Question 3: Will give ever result in ambiguity in code? As in human
confusion or uncertainty of what is happening?
Question 4. Is it possible to implement.
I believe the answers of these 4 questions make the said proposal a good
improvement to the language.
On Sunday, May 27, 2018 at 8:10:30 PM UTC+3, Nicolas Lesser wrote:
>
> I see. Personally, I also wouldn't write such a function too :). But
> thanks for clarifying.
>
> On Sun, May 27, 2018 at 6:51 PM Nicol Bolas <jmck...@gmail.com
> <javascript:>> wrote:
>
>>
>>
>> On Sunday, May 27, 2018 at 12:37:25 PM UTC-4, Nicolas Lesser wrote:
>>>
>>> It ALWAYS clear what to use.
>>>>
>>> It is AWALAYS wrong to use the other.
>>>>
>>>
>>> No, that's not true. What if I want to move a forwarding reference? This
>>> is a very legit usage of std::move.
>>>
>>>
>>>> ALL information is available to the compiler
>>>>
>>>> => the compiler can do the work for us.
>>>>
>>>> If you want to be explicit - the old functions will still be there, but
>>>> I am hard pressed to find ONE instance, where it is NEEDED.
>>>>
>>>> Again, is there a place *ever* where this heuristic will be wrong?
>>>>
>>>
>>> Yes, as said above:
>>>
>>> template<typename T>
>>> void eat(T &&Value) {
>>> Vec.push_back(std::move(Value));
>>> }
>>>
>>> I don't want to do any unnecessary moves or copy and duplicate code, so
>>> the above is the only way to do this. Your give() function would do the
>>> wrong thing here.
>>>
>>
>> No, that's wrong. Observe:
>>
>> std::string value = ...;
>> eat(value);
>>
>> Has `value` been changed? I certainly can't tell from looking at the
>> code. And if you had used `forward` instead of `move`, the answer would be
>> "no".
>>
>> By contrast, if I had done `eat(std::move(value))`, I can reasonably
>> assume `value` has been moved from.
>>
>> This is the very reason why C++ does not allow implicit moving in a lot
>> of places. The goal is to make it so that, if a value is being moved from,
>> you can see it in people's code at every level of that code.
>>
>> *Can* you write the code you showed? Sure. *Should you* write such
>> functions? No.
>>
>> What you *should* write is this:
>>
>> template<typename T,
>> class = std::enable_if_t<!std::is_lvalue_reference<T>::value>>
>> void eat(T &&Value)
>> {
>> Vec.push_back(std::move(Value));
>> }
>>
>> This forcefully prevents `eat` from being called with lvalues. If you
>> write an interface where the API function will move from the value, then
>> you should *prevent* users from passing lvalues, period.
>>
>> --
>> 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-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8e1c6607-a92d-496b-aad1-e992e049a748%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8e1c6607-a92d-496b-aad1-e992e049a748%40isocpp.org?utm_medium=email&utm_source=footer>
>> .
>>
>
--
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/2f782c2d-e89c-4d8b-8ef6-372c00e62ab1%40isocpp.org.
------=_Part_27155_466580422.1527447910286
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>So the question still stands:</div><div><br></div><di=
v>Is there a <i>valid</i> reason to move a forwarding reference? Is there a=
<i>need</i> for this?=C2=A0</div><div>If there is a need, then move can be=
preserved and used instead.</div><div>If there is no need, move <i>could</=
i> be deprecated.</div><div><br></div><div>Question 2: Should one ever use =
forward <i>instead of</i> move.=C2=A0</div><div><br></div><div>Question 3: =
Will <font face=3D"courier new,monospace">give</font> ever result in ambigu=
ity in code? As in human confusion or uncertainty of what is happening?</di=
v><div><br></div><div>Question 4. Is it possible to implement.<br></div><di=
v><br></div><div>I believe the answers of these 4 questions make the said p=
roposal a good improvement to the language.</div><div><br></div><div><br></=
div>On Sunday, May 27, 2018 at 8:10:30 PM UTC+3, Nicolas Lesser wrote:<bloc=
kquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-l=
eft: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I see. Personally,=
I also wouldn't write such a function too :). But thanks for clarifyin=
g.</div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Sun, May 27, 201=
8 at 6:51 PM Nicol Bolas <<a onmousedown=3D"this.href=3D'javascript:=
';return true;" onclick=3D"this.href=3D'javascript:';return tru=
e;" href=3D"javascript:" target=3D"_blank" rel=3D"nofollow" gdf-obfuscated-=
mailto=3D"K8GOGLZIBgAJ">jmck...@gmail.com</a>> wrote:<br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc so=
lid;padding-left:1ex"><div dir=3D"ltr"><br><br>On Sunday, May 27, 2018 at 1=
2:37:25 PM UTC-4, Nicolas Lesser wrote:<blockquote class=3D"gmail_quote" st=
yle=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1=
ex"><div dir=3D"ltr"><div class=3D"gmail_quote"><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>It ALWAYS clear what to use.=C2=A0<br></div></div=
></blockquote><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>It is AW=
ALAYS wrong to use the other.</div></div></blockquote><div><br></div><div>N=
o, that's not true. What if I want to move a forwarding reference? This=
is a very legit usage of std::move.</div><div>=C2=A0</div><blockquote clas=
s=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;pad=
ding-left:1ex"><div dir=3D"ltr"><div>ALL information is available to the co=
mpiler</div><div><br></div><div>=3D> the compiler can do the work for us=
..</div><div><br></div><div>If you want to be explicit - the old functions w=
ill still be there, but I am hard pressed to find ONE instance, where it is=
NEEDED.</div><div><br></div><div>Again, is there a place <i>ever</i> where=
this heuristic will be wrong?=C2=A0</div></div></blockquote><div><br></div=
><div>Yes, as said above:</div><div><br></div><div>template<typename T&g=
t;</div><div>void eat(T &&Value) {<br>=C2=A0 Vec.push_back(std::mov=
e(Value)<wbr>);</div><div>}</div><div><br></div><div>I don't want to do=
any unnecessary moves or copy and duplicate code, so the above is the only=
way to do this. Your give() function would do the wrong thing here.</div><=
/div></div></blockquote><div><br></div><div>No, that's wrong. Observe:<=
/div><div><br></div><div style=3D"background-color:rgb(250,250,250);border-=
color:rgb(187,187,187);border-style:solid;border-width:1px"><code><div><spa=
n style=3D"color:#000">std</span><span style=3D"color:#660">::</span><span =
style=3D"color:#008">string</span><span style=3D"color:#000"> value </span>=
<span style=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><sp=
an style=3D"color:#660">...;</span><span style=3D"color:#000"><br>eat</span=
><span style=3D"color:#660">(</span><span style=3D"color:#000">value</span>=
<span style=3D"color:#660">);</span></div></code></div><div><br></div><div>=
Has `value` been changed? I certainly can't tell from looking at the co=
de. And if you had used `forward` instead of `move`, the answer would be &q=
uot;no".</div><div><br></div>By contrast, if I had done `eat(std::move=
(value))`, I can reasonably assume `value` has been moved from.<br><div><br=
></div><div><div>This is the very reason why C++ does not allow implicit mo=
ving in a lot of places. The goal is to make it so that, if a value is bein=
g moved from, you can see it in people's code at every level of that co=
de.</div><div><br></div><div><i>Can</i> you write the code you showed? Sure=
.. <i>Should you</i> write such functions? No.</div></div><div><br></div><di=
v>What you <i>should</i> write is this:</div><div><br></div><div style=3D"b=
ackground-color:rgb(250,250,250);border-color:rgb(187,187,187);border-style=
:solid;border-width:1px"><code><div><span style=3D"color:#008">template</sp=
an><span style=3D"color:#660"><</span><span style=3D"color:#008">typenam=
e</span><span style=3D"color:#000"> T</span><span style=3D"color:#660">,</s=
pan><span style=3D"color:#000"><br>=C2=A0 </span><span style=3D"color:#008"=
>class</span><span style=3D"color:#000"> </span><span style=3D"color:#660">=
=3D</span><span style=3D"color:#000"> std</span><span style=3D"color:#660">=
::</span><span style=3D"color:#000">enable_if_t</span><span style=3D"color:=
#660"><!</span><span style=3D"color:#000">std</span><span style=3D"color=
:#660">::</span><span style=3D"color:#000">is_<wbr>lvalue_reference</span><=
span style=3D"color:#660"><</span><span style=3D"color:#000">T</span><sp=
an style=3D"color:#660">>::</span><span style=3D"color:#000">value</span=
><span style=3D"color:#660">>></span><span style=3D"color:#000"><br><=
/span><span style=3D"color:#008">void</span><span style=3D"color:#000"> eat=
</span><span style=3D"color:#660">(</span><span style=3D"color:#000">T </sp=
an><span style=3D"color:#660">&&</span><span style=3D"color:#606">V=
alue</span><span style=3D"color:#660">)</span><span style=3D"color:#000"><b=
r></span><span style=3D"color:#660">{</span><span style=3D"color:#000"><br>=
=C2=A0 </span><span style=3D"color:#606">Vec</span><span style=3D"color:#66=
0">.</span><span style=3D"color:#000">push_back</span><span style=3D"color:=
#660">(</span><span style=3D"color:#000">std</span><span style=3D"color:#66=
0">::</span><span style=3D"color:#000">move</span><span style=3D"color:#660=
">(</span><span style=3D"color:#606">Value</span><span style=3D"color:#660"=
>)<wbr>);</span><span style=3D"color:#000"><br></span><span style=3D"color:=
#660">}</span></div></code></div><div><br></div><div>This forcefully preven=
ts `eat` from being called with lvalues. If you write an interface where th=
e API function will move from the value, then you should <i>prevent</i> use=
rs from passing lvalues, period.<br></div></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a onmousedown=3D"this.href=3D'javascript:';return true;" o=
nclick=3D"this.href=3D'javascript:';return true;" href=3D"javascrip=
t:" target=3D"_blank" rel=3D"nofollow" gdf-obfuscated-mailto=3D"K8GOGLZIBgA=
J">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a onmousedown=3D"this.href=3D'jav=
ascript:';return true;" onclick=3D"this.href=3D'javascript:';re=
turn true;" href=3D"javascript:" target=3D"_blank" rel=3D"nofollow" gdf-obf=
uscated-mailto=3D"K8GOGLZIBgAJ">std-pr...@isocpp.org</a>.<br>
To view this discussion on the web visit <a onmousedown=3D"this.href=3D'=
;https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8e1c6607-a92d=
-496b-aad1-e992e049a748%40isocpp.org?utm_medium\x3demail\x26utm_source\x3df=
ooter';return true;" onclick=3D"this.href=3D'https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/8e1c6607-a92d-496b-aad1-e992e049a748=
%40isocpp.org?utm_medium\x3demail\x26utm_source\x3dfooter';return true;=
" href=3D"https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8e1c=
6607-a92d-496b-aad1-e992e049a748%40isocpp.org?utm_medium=3Demail&utm_so=
urce=3Dfooter" target=3D"_blank" rel=3D"nofollow">https://groups.google.com=
/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/8e1c6607-a92d-496b-<wbr>aad1-=
e992e049a748%40isocpp.org</a><wbr>.<br>
</blockquote></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/2f782c2d-e89c-4d8b-8ef6-372c00e62ab1%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/2f782c2d-e89c-4d8b-8ef6-372c00e62ab1=
%40isocpp.org</a>.<br />
------=_Part_27155_466580422.1527447910286--
------=_Part_27154_841629941.1527447910286--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sun, 27 May 2018 13:39:00 -0700 (PDT)
Raw View
------=_Part_27931_1788211309.1527453540975
Content-Type: multipart/alternative;
boundary="----=_Part_27932_1473139326.1527453540975"
------=_Part_27932_1473139326.1527453540975
Content-Type: text/plain; charset="UTF-8"
On Sunday, May 27, 2018 at 3:05:10 PM UTC-4, mihailn...@gmail.com wrote:
>
> So the question still stands:
>
> Is there a *valid* reason to move a forwarding reference? Is there a
> *need* for this?
>
If there is a need, then move can be preserved and used instead.
> If there is no need, move *could* be deprecated.
>
> Question 2: Should one ever use forward *instead of* move?
>
> Question 3: Will give ever result in ambiguity in code? As in human
> confusion or uncertainty of what is happening?
>
> Question 4. Is it possible to implement?
>
> I believe the answers of these 4 questions make the said proposal a good
> improvement to the language.
>
I believe these questions are backwards. Your questions are about
validating the proposal, not *motivating* it. Basically, you're asking "why
not" rather than "why".
"Why" is the question your proposal needs to answer.
See, here's the thing: `std::move` has a number of important properties:
1. It tells you *exactly* what's going on. There is no ambiguity (as long
as the API you're passing it to plays ball).
2. It's relatively short.
3. Its length is invariant with the expression it applies to.
4. You need it a fair bit of time.
As such, the ability to turn 11 characters (`std::move()`) into one or two
characters just isn't all that important to the day-to-day lives of C++
programmers. It's not going to clamp
By contrast, `std::forward` has a number of important properties:
1. It tells you *exactly* what's going on. There is no ambiguity (as long
as the API you're passing it to plays ball).
2. It's not short.
3. Its length varies based on how it gets used. In a generic lambda, you're
forced to do `std::forward<decltype<arg>>(arg)`, while if you were in a
template function, you could just do `std::forward<Arg>(arg)`.
4. You need it surprisingly often.
5. Heavily template code gets *measurably slower* with frequent use of
`std::forward<>` rather than the equivalent `static_cast<>` syntax. Yes
really; this has been profiled.
Items 2, 3, and 5 say to me that there is a real problem that needs to be
solved. Replacing `std::forward` with syntax solves those problems.
Replacing `std::move` with syntax, whether the same as `std::forward` or
different, does not.
So besides your belief that move and forward are the same thing, what
*practical* benefit is there from unifying them? Remember uniform
initialization? Remember uniform call syntax? We can't even get the
committee to allow member pointers to be called like function pointers, the
lack of which is literally the *only reason* we need `std::invoke`.
Uniformity of distinct operations rarely goes well in C++.
--
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/93ee46a2-1469-48ae-b931-c060946f38d5%40isocpp.org.
------=_Part_27932_1473139326.1527453540975
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Sunday, May 27, 2018 at 3:05:10 PM UTC-4, mihailn...@gm=
ail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-l=
eft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"=
><div>So the question still stands:</div><div><br></div><div>Is there a <i>=
valid</i> reason to move a forwarding reference? Is there a <i>need</i> for=
this?</div></div></blockquote><blockquote class=3D"gmail_quote" style=3D"m=
argin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"=
><div dir=3D"ltr"><div>If there is a need, then move can be preserved and u=
sed instead.</div><div>If there is no need, move <i>could</i> be deprecated=
..</div><div><br></div><div>Question 2: Should one ever use forward <i>inste=
ad of</i> move?</div><div><br></div><div>Question 3: Will <font face=3D"cou=
rier new,monospace">give</font> ever result in ambiguity in code? As in hum=
an confusion or uncertainty of what is happening?</div><div><br></div><div>=
Question 4. Is it possible to implement?<br></div><div><br></div><div>I bel=
ieve the answers of these 4 questions make the said proposal a good improve=
ment to the language.</div></div></blockquote><div><br></div><div>I believe=
these questions are backwards. Your questions are about validating the pro=
posal, not <i>motivating</i> it. Basically, you're asking "why not=
" rather than "why".</div><div><br></div><div>"Why"=
; is the question your proposal needs to answer.<br></div><div><br></div><d=
iv>See, here's the thing: `std::move` has a number of important propert=
ies:</div><div><br></div><div>1. It tells you <i>exactly</i> what's goi=
ng on. There is no ambiguity (as long as the API you're passing it to p=
lays ball).<br></div><div>2. It's relatively short.</div><div>3. Its le=
ngth is invariant with the expression it applies to.</div><div>4. You need =
it a fair bit of time.</div><div><br></div><div>As such, the ability to tur=
n 11 characters (`std::move()`) into one or two characters just isn't a=
ll that important to the day-to-day lives of C++ programmers. It's not =
going to clamp <br></div><div><br></div><div>By contrast, `std::forward` ha=
s a number of important properties:</div><div><br></div><div>1. It tells yo=
u <i>exactly</i> what's going on. There is no ambiguity (as long as the=
API you're passing it to plays ball).</div><div>2. It's not short.=
</div><div>3. Its length varies based on how it gets used. In a generic lam=
bda, you're forced to do `std::forward<decltype<arg>>(arg)`=
, while if you were in a template function, you could just do `std::forward=
<Arg>(arg)`.<br></div><div>4. You need it surprisingly often.<br></di=
v><div>5. Heavily template code gets <i>measurably slower</i> with frequent=
use of `std::forward<>` rather than the equivalent `static_cast<&=
gt;` syntax. Yes really; this has been profiled.<br></div><div><br></div><d=
iv>Items 2, 3, and 5 say to me that there is a real problem that needs to b=
e solved. Replacing `std::forward` with syntax solves those problems. Repla=
cing `std::move` with syntax, whether the same as `std::forward` or differe=
nt, does not.</div><div><br></div><div>So besides your belief that move and=
forward are the same thing, what <i>practical</i> benefit is there from un=
ifying them? Remember uniform initialization? Remember uniform call syntax?=
We can't even get the committee to allow member pointers to be called =
like function pointers, the lack of which is literally the <i>only reason</=
i> we need `std::invoke`.<br></div><div><br></div><div>Uniformity of distin=
ct operations rarely goes well in C++.<br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/93ee46a2-1469-48ae-b931-c060946f38d5%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/93ee46a2-1469-48ae-b931-c060946f38d5=
%40isocpp.org</a>.<br />
------=_Part_27932_1473139326.1527453540975--
------=_Part_27931_1788211309.1527453540975--
.
Author: mihailnajdenov@gmail.com
Date: Mon, 28 May 2018 00:27:55 -0700 (PDT)
Raw View
------=_Part_30789_1111392127.1527492475612
Content-Type: multipart/alternative;
boundary="----=_Part_30790_1818406517.1527492475613"
------=_Part_30790_1818406517.1527492475613
Content-Type: text/plain; charset="UTF-8"
On Sunday, May 27, 2018 at 11:39:01 PM UTC+3, Nicol Bolas wrote:
>
> On Sunday, May 27, 2018 at 3:05:10 PM UTC-4, mihailn...@gmail.com wrote:
>>
>> So the question still stands:
>>
>> Is there a *valid* reason to move a forwarding reference? Is there a
>> *need* for this?
>>
> If there is a need, then move can be preserved and used instead.
>> If there is no need, move *could* be deprecated.
>>
>> Question 2: Should one ever use forward *instead of* move?
>>
>> Question 3: Will give ever result in ambiguity in code? As in human
>> confusion or uncertainty of what is happening?
>>
>> Question 4. Is it possible to implement?
>>
>> I believe the answers of these 4 questions make the said proposal a good
>> improvement to the language.
>>
>
> I believe these questions are backwards. Your questions are about
> validating the proposal, not *motivating* it. Basically, you're asking
> "why not" rather than "why".
>
> "Why" is the question your proposal needs to answer.
>
Let me answer this.
*Motivation to merge forward and move (not in order):*
1. Less of the "C++ is experts only".
Removing the distinction (*on a practical, hands down level)* will make the
language more friendly do beginners.
The distinction is subtle and not initially clear, where if merged, when
the user sees && on a type, he will know, he needs to use the matching
operator.
Always. Always the same!
2. Better code.
Eliminating the possibility to get it wrong - to use one in the place of
the other will make for less bugs, easier maintenance, easier refactor.
3. The compiler should do the job for us.
If there are *no decisions* to be made on the part of the programmer, he is
not really coding logic, not really "programming" - only truckling to the
language.
4. Merger will make it way, way easier to came up with operator.
Both move and forward should be an operator, not just because verbosity,
but because they are integral part of the language, not a library add-on
and a wildly used (may be not even enough).
A language which has an operator to take the address of a variable, but can
not naturally express the notion of passing the said variable along,
definitely shows its age.
(5.) It is actually good design.
Lets consider an orthogonal example.
One has two classes Image and File. Then the image has freeImageData()
method, the file has closeFileHandle() and the user is forced to spell out
each one for each object.
The sooner or later someone will come up with solution which trades the
explicitly of the methods for some base notion of finishing up with the
object.
Someone will invent some release() method.
Here the things are similar - different preconditions, different actions,
but same base notion - passing along.
And one last thing
One way to look at it is - *it is just a form of overloaded operator*, and
overloaded operators are a cornerstone of C++
It has two "overloads"
- for forwarding reference - In that case it will expand to forward (or
static_cast<T&&> or whatever)
- for everything else - In that case it will expand to move (or
static_cast<remove_reference_t<T>&&> or whatever)
Such an operator (or overload) is not possible today, so we need compiler
support.
--
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/609892ba-f717-4458-b9e3-c5975378ad29%40isocpp.org.
------=_Part_30790_1818406517.1527492475613
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Sunday, May 27, 2018 at 11:39:01 PM UTC+3, Nico=
l Bolas wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-l=
eft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"=
>On Sunday, May 27, 2018 at 3:05:10 PM UTC-4, <a>mihailn...@gmail.com</a> w=
rote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>So the q=
uestion still stands:</div><div><br></div><div>Is there a <i>valid</i> reas=
on to move a forwarding reference? Is there a <i>need</i> for this?</div></=
div></blockquote><blockquote class=3D"gmail_quote" style=3D"margin:0;margin=
-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><=
div>If there is a need, then move can be preserved and used instead.</div><=
div>If there is no need, move <i>could</i> be deprecated.</div><div><br></d=
iv><div>Question 2: Should one ever use forward <i>instead of</i> move?</di=
v><div><br></div><div>Question 3: Will <font face=3D"courier new,monospace"=
>give</font> ever result in ambiguity in code? As in human confusion or unc=
ertainty of what is happening?</div><div><br></div><div>Question 4. Is it p=
ossible to implement?<br></div><div><br></div><div>I believe the answers of=
these 4 questions make the said proposal a good improvement to the languag=
e.</div></div></blockquote><div><br></div><div>I believe these questions ar=
e backwards. Your questions are about validating the proposal, not <i>motiv=
ating</i> it. Basically, you're asking "why not" rather than =
"why".</div><div><br></div><div>"Why" is the question y=
our proposal needs to answer.<br></div></div></blockquote><div><br></div><d=
iv><br></div><div>Let me answer this.</div><div><br></div><div><b>Motivatio=
n to merge <font face=3D"courier new,monospace">forward</font> and <font fa=
ce=3D"courier new,monospace">move</font> (not in order):</b></div><div><b><=
/b><b></b><br></div><div>=C2=A01. Less of the "C++ is experts only&quo=
t;.=C2=A0</div><div>Removing the distinction (<i>on a practical, hands down=
level)</i> will make the language more friendly do beginners.=C2=A0</div><=
div>The distinction is subtle and not initially clear, where if merged, whe=
n the user sees <font face=3D"courier new,monospace">&&</font> on a=
type, he will know, he needs to use the matching operator.</div><div>Alway=
s. Always the same!<br></div><div><br></div><div>=C2=A02. Better code.=C2=
=A0</div><div>Eliminating the possibility to get it wrong - to use one in t=
he place of the other will make for less bugs, easier maintenance, easier r=
efactor.</div><div><br></div><div>=C2=A03. The compiler should do the job f=
or us.=C2=A0</div><div>If there are <i>no decisions</i> to be made on the p=
art of the programmer, he is not really coding logic, not really "prog=
ramming" - only truckling to the language.=C2=A0</div><div><br></div><=
div>=C2=A04. Merger will make it way, way easier to came up with operator.<=
/div><div>Both <font face=3D"courier new,monospace">move</font> and <font f=
ace=3D"courier new,monospace">forward</font> should be an operator, not jus=
t because verbosity, but because they are integral part of the language, no=
t a library add-on and a wildly used (may be not even enough).</div><div>A =
language which has an operator to take the address of a variable, but can n=
ot naturally express the notion of passing the said variable along, definit=
ely shows its age.</div><div><br></div><div>(5.) It is actually good design=
..</div><div>Lets consider an orthogonal example.=C2=A0</div><div>One has tw=
o classes Image and File. Then the image has freeImageData() method, the fi=
le has closeFileHandle() and the user is forced to spell out each one for e=
ach object.</div><div>The sooner or later someone will come up with solutio=
n which trades the explicitly of the methods for some base notion of finish=
ing up with the object.=C2=A0</div><div>Someone will invent some release() =
method.</div><div><br></div><div>Here the things are similar - different pr=
econditions, different actions, but same base notion - passing along.</div>=
<div><br></div><div>And one last thing</div><div><br></div><div>One way to =
look at it is - <i>it is just a form of overloaded operator</i>, and overlo=
aded operators are a cornerstone of C++</div><div>It has two "overload=
s"=C2=A0</div><div>=C2=A0- for forwarding reference - In that case it =
will expand to forward (or static_cast<T&&> or whatever)</div=
><div>=C2=A0- for everything else -=C2=A0<span style=3D"display: inline !im=
portant; float: none; background-color: transparent; color: rgb(34, 34, 34)=
; font-family: "Arial","Helvetica",sans-serif; font-siz=
e: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter=
-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text=
-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-s=
pace: normal; word-spacing: 0px;">In that case it will expand to move (or s=
tatic_cast<remove_reference_t<T>&&> or whatever)</span>=
</div><div><br></div><div>Such an operator (or overload) is not possible to=
day, so we need compiler support.=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" 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/609892ba-f717-4458-b9e3-c5975378ad29%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/609892ba-f717-4458-b9e3-c5975378ad29=
%40isocpp.org</a>.<br />
------=_Part_30790_1818406517.1527492475613--
------=_Part_30789_1111392127.1527492475612--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Mon, 28 May 2018 12:56:11 +0100
Raw View
--000000000000096cbd056d42cfbf
Content-Type: text/plain; charset="UTF-8"
And one last thing
> One way to look at it is - *it is just a form of overloaded operator*,
> and overloaded operators are a cornerstone of C++
> It has two "overloads"
> - for forwarding reference - In that case it will expand to forward (or
> static_cast<T&&> or whatever)
> - for everything else - In that case it will expand to move (or
> static_cast<remove_reference_t<T>&&> or whatever)
> Such an operator (or overload) is not possible today, so we need compiler
> support.
It is *not* a form of an overloaded operator - the operator is always
invoked on an lvalue, and whether it's a forwarding reference depends not
on its type, but on *whether the value-category was deduced in the current
context*. We have absolutely no precedent for this. You need a different
abstraction.
I'd love to see a `forward` operator that would let me omit the
<decltype(foo)>(foo). I see your point wrt. move and forward being the
same, because in either case, you can't use the value afterwards (because
you must always program to the more restrictive contract, which in case of
forward means the move part). *give* makes sense, ish. But, please don't
confuse it for an operator. It's a context-sensitive thing of a category we
just haven't ever had.
G
On Mon, May 28, 2018 at 8:27 AM, <mihailnajdenov@gmail.com> wrote:
>
>
> On Sunday, May 27, 2018 at 11:39:01 PM UTC+3, Nicol Bolas wrote:
>>
>> On Sunday, May 27, 2018 at 3:05:10 PM UTC-4, mihailn...@gmail.com wrote:
>>>
>>> So the question still stands:
>>>
>>> Is there a *valid* reason to move a forwarding reference? Is there a
>>> *need* for this?
>>>
>> If there is a need, then move can be preserved and used instead.
>>> If there is no need, move *could* be deprecated.
>>>
>>> Question 2: Should one ever use forward *instead of* move?
>>>
>>> Question 3: Will give ever result in ambiguity in code? As in human
>>> confusion or uncertainty of what is happening?
>>>
>>> Question 4. Is it possible to implement?
>>>
>>> I believe the answers of these 4 questions make the said proposal a good
>>> improvement to the language.
>>>
>>
>> I believe these questions are backwards. Your questions are about
>> validating the proposal, not *motivating* it. Basically, you're asking
>> "why not" rather than "why".
>>
>> "Why" is the question your proposal needs to answer.
>>
>
>
> Let me answer this.
>
> *Motivation to merge forward and move (not in order):*
>
> 1. Less of the "C++ is experts only".
> Removing the distinction (*on a practical, hands down level)* will make
> the language more friendly do beginners.
> The distinction is subtle and not initially clear, where if merged, when
> the user sees && on a type, he will know, he needs to use the matching
> operator.
> Always. Always the same!
>
> 2. Better code.
> Eliminating the possibility to get it wrong - to use one in the place of
> the other will make for less bugs, easier maintenance, easier refactor.
>
> 3. The compiler should do the job for us.
> If there are *no decisions* to be made on the part of the programmer, he
> is not really coding logic, not really "programming" - only truckling to
> the language.
>
> 4. Merger will make it way, way easier to came up with operator.
> Both move and forward should be an operator, not just because verbosity,
> but because they are integral part of the language, not a library add-on
> and a wildly used (may be not even enough).
> A language which has an operator to take the address of a variable, but
> can not naturally express the notion of passing the said variable along,
> definitely shows its age.
>
> (5.) It is actually good design.
> Lets consider an orthogonal example.
> One has two classes Image and File. Then the image has freeImageData()
> method, the file has closeFileHandle() and the user is forced to spell out
> each one for each object.
> The sooner or later someone will come up with solution which trades the
> explicitly of the methods for some base notion of finishing up with the
> object.
> Someone will invent some release() method.
>
> Here the things are similar - different preconditions, different actions,
> but same base notion - passing along.
>
> And one last thing
>
> One way to look at it is - *it is just a form of overloaded operator*,
> and overloaded operators are a cornerstone of C++
> It has two "overloads"
> - for forwarding reference - In that case it will expand to forward (or
> static_cast<T&&> or whatever)
> - for everything else - In that case it will expand to move (or
> static_cast<remove_reference_t<T>&&> or whatever)
>
> Such an operator (or overload) is not possible today, so we need compiler
> support.
>
> --
> 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/609892ba-f717-4458-
> b9e3-c5975378ad29%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/609892ba-f717-4458-b9e3-c5975378ad29%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
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/CAANG%3DkUqV_OU%2BXTZpgMg3LJo_EH1P9CMWVXi%2BZUx4aa-mcH54g%40mail.gmail.com.
--000000000000096cbd056d42cfbf
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><blockquote style=3D"margin:0 0 0 40px;border:none;padding=
:0px"><blockquote style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid r=
gb(204,204,204);padding-left:1ex" class=3D"gmail_quote"></blockquote></bloc=
kquote><blockquote style=3D"margin:0 0 0 40px;border:none;padding:0px"></bl=
ockquote><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);padding-left:1ex">And one last thi=
ng<br>One way to look at it is -=C2=A0<i>it is just a form of overloaded op=
erator</i>, and overloaded operators are a cornerstone of C++<br>It has two=
"overloads"=C2=A0<br>=C2=A0- for forwarding reference - In that =
case it will expand to forward (or static_cast<T&&> or whatev=
er)<br>=C2=A0- for everything else -=C2=A0<span style=3D"background-color:t=
ransparent;font-size:13px;font-variant-numeric:normal;font-variant-east-asi=
an:normal;font-family:Arial,Helvetica,sans-serif">In that case it will expa=
nd to move (or static_cast<remove_reference_<wbr>t<T>&&>=
; or whatever)<br></span>Such an operator (or overload) is not possible tod=
ay, so we need compiler support.=C2=A0</blockquote><div><br></div><div>It i=
s <i>not</i>=C2=A0a form of an overloaded operator - the operator is always=
invoked on an lvalue, and whether it's a forwarding reference depends =
not on its type, but on <b>whether the value-category was deduced in the cu=
rrent context</b>. We have absolutely no precedent for this. You need a dif=
ferent abstraction.</div><div><br></div><div>I'd love to see a `forward=
` operator that would let me omit the <decltype(foo)>(foo). I see you=
r point wrt. move and forward being the same, because in either case, you c=
an't use the value afterwards (because you must always program to the m=
ore restrictive contract, which in case of forward means the move part). <i=
>give</i>=C2=A0makes sense, ish. But, please don't confuse it for an op=
erator. It's a context-sensitive thing of a category we just haven'=
t ever had.<br></div><div><br></div><div>G</div><div><br></div><blockquote =
style=3D"margin:0 0 0 40px;border:none;padding:0px"><blockquote style=3D"ma=
rgin:0px 0.8ex;border-left:1px solid rgb(204,204,204);border-right:1px soli=
d rgb(204,204,204);padding-left:1ex;padding-right:1ex" class=3D"gmail_quote=
"></blockquote></blockquote><blockquote style=3D"margin:0 0 0 40px;border:n=
one;padding:0px"><blockquote style=3D"margin:0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);border-right:1px solid rgb(204,204,204);padding-left:1ex=
;padding-right:1ex" class=3D"gmail_quote"></blockquote></blockquote><blockq=
uote style=3D"margin:0 0 0 40px;border:none;padding:0px"><blockquote style=
=3D"margin:0px 0.8ex;border-left:1px solid rgb(204,204,204);border-right:1p=
x solid rgb(204,204,204);padding-left:1ex;padding-right:1ex" class=3D"gmail=
_quote"></blockquote></blockquote><blockquote style=3D"margin:0 0 0 40px;bo=
rder:none;padding:0px"><blockquote style=3D"margin:0px 0.8ex;border-left:1p=
x solid rgb(204,204,204);border-right:1px solid rgb(204,204,204);padding-le=
ft:1ex;padding-right:1ex" class=3D"gmail_quote"></blockquote></blockquote><=
/div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Mon, May =
28, 2018 at 8:27 AM, <span dir=3D"ltr"><<a href=3D"mailto:mihailnajdeno=
v@gmail.com" target=3D"_blank">mihailnajdenov@gmail.com</a>></span> wrot=
e:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span class=3D""><br>=
<br>On Sunday, May 27, 2018 at 11:39:01 PM UTC+3, Nicol Bolas wrote:<blockq=
uote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:=
1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Sunday, May 27, 2018 a=
t 3:05:10 PM UTC-4, <a>mihailn...@gmail.com</a> wrote:<blockquote class=3D"=
gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div dir=3D"ltr"><div>So the question still stands:</div=
><div><br></div><div>Is there a <i>valid</i> reason to move a forwarding re=
ference? Is there a <i>need</i> for this?</div></div></blockquote><blockquo=
te class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>If there is a need, th=
en move can be preserved and used instead.</div><div>If there is no need, m=
ove <i>could</i> be deprecated.</div><div><br></div><div>Question 2: Should=
one ever use forward <i>instead of</i> move?</div><div><br></div><div>Ques=
tion 3: Will <font face=3D"courier new,monospace">give</font> ever result i=
n ambiguity in code? As in human confusion or uncertainty of what is happen=
ing?</div><div><br></div><div>Question 4. Is it possible to implement?<br><=
/div><div><br></div><div>I believe the answers of these 4 questions make th=
e said proposal a good improvement to the language.</div></div></blockquote=
><div><br></div><div>I believe these questions are backwards. Your question=
s are about validating the proposal, not <i>motivating</i> it. Basically, y=
ou're asking "why not" rather than "why".</div><div=
><br></div><div>"Why" is the question your proposal needs to answ=
er.<br></div></div></blockquote><div><br></div><div><br></div></span><div>L=
et me answer this.</div><div><br></div><div><b>Motivation to merge <font fa=
ce=3D"courier new,monospace">forward</font> and <font face=3D"courier new,m=
onospace">move</font> (not in order):</b></div><div><b></b><b></b><br></div=
><div>=C2=A01. Less of the "C++ is experts only".=C2=A0</div><div=
>Removing the distinction (<i>on a practical, hands down level)</i> will ma=
ke the language more friendly do beginners.=C2=A0</div><div>The distinction=
is subtle and not initially clear, where if merged, when the user sees <fo=
nt face=3D"courier new,monospace">&&</font> on a type, he will know=
, he needs to use the matching operator.</div><div>Always. Always the same!=
<br></div><div><br></div><div>=C2=A02. Better code.=C2=A0</div><div>Elimina=
ting the possibility to get it wrong - to use one in the place of the other=
will make for less bugs, easier maintenance, easier refactor.</div><div><b=
r></div><div>=C2=A03. The compiler should do the job for us.=C2=A0</div><di=
v>If there are <i>no decisions</i> to be made on the part of the programmer=
, he is not really coding logic, not really "programming" - only =
truckling to the language.=C2=A0</div><div><br></div><div>=C2=A04. Merger w=
ill make it way, way easier to came up with operator.</div><div>Both <font =
face=3D"courier new,monospace">move</font> and <font face=3D"courier new,mo=
nospace">forward</font> should be an operator, not just because verbosity, =
but because they are integral part of the language, not a library add-on an=
d a wildly used (may be not even enough).</div><div>A language which has an=
operator to take the address of a variable, but can not naturally express =
the notion of passing the said variable along, definitely shows its age.</d=
iv><div><br></div><div>(5.) It is actually good design.</div><div>Lets cons=
ider an orthogonal example.=C2=A0</div><div>One has two classes Image and F=
ile. Then the image has freeImageData() method, the file has closeFileHandl=
e() and the user is forced to spell out each one for each object.</div><div=
>The sooner or later someone will come up with solution which trades the ex=
plicitly of the methods for some base notion of finishing up with the objec=
t.=C2=A0</div><div>Someone will invent some release() method.</div><div><br=
></div><div>Here the things are similar - different preconditions, differen=
t actions, but same base notion - passing along.</div><div><br></div><div>A=
nd one last thing</div><div><br></div><div>One way to look at it is - <i>it=
is just a form of overloaded operator</i>, and overloaded operators are a =
cornerstone of C++</div><div>It has two "overloads"=C2=A0</div><d=
iv>=C2=A0- for forwarding reference - In that case it will expand to forwar=
d (or static_cast<T&&> or whatever)</div><div>=C2=A0- for eve=
rything else -=C2=A0<span style=3D"display:inline!important;float:none;back=
ground-color:transparent;color:rgb(34,34,34);font-family:"Arial",=
"Helvetica",sans-serif;font-size:13px;font-style:normal;font-vari=
ant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decor=
ation:none;text-indent:0px;text-transform:none;white-space:normal;word-spac=
ing:0px">In that case it will expand to move (or static_cast<remove_refe=
rence_<wbr>t<T>&&> or whatever)</span></div><div><br></div=
><div>Such an operator (or overload) is not possible today, so we need comp=
iler support.=C2=A0</div></div><span class=3D"">
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/609892ba-f717-4458-b9e3-c5975378ad29%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/6098=
92ba-f717-4458-<wbr>b9e3-c5975378ad29%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CAANG%3DkUqV_OU%2BXTZpgMg3LJo_EH1P9CM=
WVXi%2BZUx4aa-mcH54g%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkUq=
V_OU%2BXTZpgMg3LJo_EH1P9CMWVXi%2BZUx4aa-mcH54g%40mail.gmail.com</a>.<br />
--000000000000096cbd056d42cfbf--
.
Author: Richard Hodges <hodges.r@gmail.com>
Date: Mon, 28 May 2018 16:53:56 +0200
Raw View
--0000000000002a1c85056d454aa6
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
> *Motivation to merge forward and move (not in order):*
I think it's clear that the committee is already in agreement with you. The
only objections previously seemed to be that an operator was proposed.
For the record, I also agree with you. A language should allow a programmer
to express intent succinctly. give() would help c++ with that.
On Mon, 28 May 2018 at 13:56, Ga=C5=A1per A=C5=BEman <gasper.azman@gmail.co=
m> wrote:
> And one last thing
>> One way to look at it is - *it is just a form of overloaded operator*,
>> and overloaded operators are a cornerstone of C++
>> It has two "overloads"
>> - for forwarding reference - In that case it will expand to forward (or
>> static_cast<T&&> or whatever)
>> - for everything else - In that case it will expand to move (or
>> static_cast<remove_reference_t<T>&&> or whatever)
>> Such an operator (or overload) is not possible today, so we need compile=
r
>> support.
>
>
> It is *not* a form of an overloaded operator - the operator is always
> invoked on an lvalue, and whether it's a forwarding reference depends not
> on its type, but on *whether the value-category was deduced in the
> current context*. We have absolutely no precedent for this. You need a
> different abstraction.
>
> I'd love to see a `forward` operator that would let me omit the
> <decltype(foo)>(foo). I see your point wrt. move and forward being the
> same, because in either case, you can't use the value afterwards (because
> you must always program to the more restrictive contract, which in case o=
f
> forward means the move part). *give* makes sense, ish. But, please don't
> confuse it for an operator. It's a context-sensitive thing of a category =
we
> just haven't ever had.
>
> G
>
>
> On Mon, May 28, 2018 at 8:27 AM, <mihailnajdenov@gmail.com> wrote:
>
>>
>>
>> On Sunday, May 27, 2018 at 11:39:01 PM UTC+3, Nicol Bolas wrote:
>>>
>>> On Sunday, May 27, 2018 at 3:05:10 PM UTC-4, mihailn...@gmail.com wrote=
:
>>>>
>>>> So the question still stands:
>>>>
>>>> Is there a *valid* reason to move a forwarding reference? Is there a
>>>> *need* for this?
>>>>
>>> If there is a need, then move can be preserved and used instead.
>>>> If there is no need, move *could* be deprecated.
>>>>
>>>> Question 2: Should one ever use forward *instead of* move?
>>>>
>>>> Question 3: Will give ever result in ambiguity in code? As in human
>>>> confusion or uncertainty of what is happening?
>>>>
>>>> Question 4. Is it possible to implement?
>>>>
>>>> I believe the answers of these 4 questions make the said proposal a
>>>> good improvement to the language.
>>>>
>>>
>>> I believe these questions are backwards. Your questions are about
>>> validating the proposal, not *motivating* it. Basically, you're asking
>>> "why not" rather than "why".
>>>
>>> "Why" is the question your proposal needs to answer.
>>>
>>
>>
>> Let me answer this.
>>
>> *Motivation to merge forward and move (not in order):*
>>
>> 1. Less of the "C++ is experts only".
>> Removing the distinction (*on a practical, hands down level)* will make
>> the language more friendly do beginners.
>> The distinction is subtle and not initially clear, where if merged, when
>> the user sees && on a type, he will know, he needs to use the matching
>> operator.
>> Always. Always the same!
>>
>> 2. Better code.
>> Eliminating the possibility to get it wrong - to use one in the place of
>> the other will make for less bugs, easier maintenance, easier refactor.
>>
>> 3. The compiler should do the job for us.
>> If there are *no decisions* to be made on the part of the programmer, he
>> is not really coding logic, not really "programming" - only truckling to
>> the language.
>>
>> 4. Merger will make it way, way easier to came up with operator.
>> Both move and forward should be an operator, not just because verbosity,
>> but because they are integral part of the language, not a library add-on
>> and a wildly used (may be not even enough).
>> A language which has an operator to take the address of a variable, but
>> can not naturally express the notion of passing the said variable along,
>> definitely shows its age.
>>
>> (5.) It is actually good design.
>> Lets consider an orthogonal example.
>> One has two classes Image and File. Then the image has freeImageData()
>> method, the file has closeFileHandle() and the user is forced to spell o=
ut
>> each one for each object.
>> The sooner or later someone will come up with solution which trades the
>> explicitly of the methods for some base notion of finishing up with the
>> object.
>> Someone will invent some release() method.
>>
>> Here the things are similar - different preconditions, different actions=
,
>> but same base notion - passing along.
>>
>> And one last thing
>>
>> One way to look at it is - *it is just a form of overloaded operator*,
>> and overloaded operators are a cornerstone of C++
>> It has two "overloads"
>> - for forwarding reference - In that case it will expand to forward (or
>> static_cast<T&&> or whatever)
>> - for everything else - In that case it will expand to move (or
>> static_cast<remove_reference_t<T>&&> or whatever)
>>
>> Such an operator (or overload) is not possible today, so we need compile=
r
>> support.
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> 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/609892ba-f7=
17-4458-b9e3-c5975378ad29%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/609892ba-f=
717-4458-b9e3-c5975378ad29%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>
> --
> 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/CAANG%3DkUqV=
_OU%2BXTZpgMg3LJo_EH1P9CMWVXi%2BZUx4aa-mcH54g%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkUq=
V_OU%2BXTZpgMg3LJo_EH1P9CMWVXi%2BZUx4aa-mcH54g%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
> .
>
--=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/CALvx3haxYiRPejcW3TqvCWcD9RRm%2BqZcz2F6vcVMVBx3P=
DJF2w%40mail.gmail.com.
--0000000000002a1c85056d454aa6
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">>=C2=A0<b>Motivation to merge=C2=A0<font face=3D"courie=
r new,monospace">forward</font>=C2=A0and=C2=A0<font face=3D"courier new,mon=
ospace">move</font>=C2=A0(not in order):</b><br><br class=3D"gmail-Apple-in=
terchange-newline"><div>I think it's clear that the committee is alread=
y in agreement with you. The only objections previously seemed to be that a=
n operator was proposed.</div><div><br></div><div>For the record, I also ag=
ree with you. A language should allow a programmer to express intent succin=
ctly. <font face=3D"monospace, monospace">give()</font> would help c++ with=
that.</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Mon, 2=
8 May 2018 at 13:56, Ga=C5=A1per A=C5=BEman <<a href=3D"mailto:gasper.az=
man@gmail.com">gasper.azman@gmail.com</a>> wrote:<br></div><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><blockquote style=3D"margin:0 0 0 40px;b=
order:none;padding:0px"><blockquote style=3D"margin:0px 0px 0px 0.8ex;borde=
r-left:1px solid rgb(204,204,204);padding-left:1ex" class=3D"gmail_quote"><=
/blockquote></blockquote><blockquote style=3D"margin:0 0 0 40px;border:none=
;padding:0px"></blockquote><blockquote class=3D"gmail_quote" style=3D"margi=
n:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex=
">And one last thing<br>One way to look at it is -=C2=A0<i>it is just a for=
m of overloaded operator</i>, and overloaded operators are a cornerstone of=
C++<br>It has two "overloads"=C2=A0<br>=C2=A0- for forwarding re=
ference - In that case it will expand to forward (or static_cast<T&&=
amp;> or whatever)<br>=C2=A0- for everything else -=C2=A0<span style=3D"=
background-color:transparent;font-size:13px;font-variant-numeric:normal;fon=
t-variant-east-asian:normal;font-family:Arial,Helvetica,sans-serif">In that=
case it will expand to move (or static_cast<remove_reference_t<T>=
&&> or whatever)<br></span>Such an operator (or overload) is not=
possible today, so we need compiler support.=C2=A0</blockquote><div><br></=
div><div>It is <i>not</i>=C2=A0a form of an overloaded operator - the opera=
tor is always invoked on an lvalue, and whether it's a forwarding refer=
ence depends not on its type, but on <b>whether the value-category was dedu=
ced in the current context</b>. We have absolutely no precedent for this. Y=
ou need a different abstraction.</div><div><br></div><div>I'd love to s=
ee a `forward` operator that would let me omit the <decltype(foo)>(fo=
o). I see your point wrt. move and forward being the same, because in eithe=
r case, you can't use the value afterwards (because you must always pro=
gram to the more restrictive contract, which in case of forward means the m=
ove part). <i>give</i>=C2=A0makes sense, ish. But, please don't confuse=
it for an operator. It's a context-sensitive thing of a category we ju=
st haven't ever had.<br></div><div><br></div><div>G</div><div><br></div=
><blockquote style=3D"margin:0 0 0 40px;border:none;padding:0px"><blockquot=
e style=3D"margin:0px 0.8ex;border-left:1px solid rgb(204,204,204);border-r=
ight:1px solid rgb(204,204,204);padding-left:1ex;padding-right:1ex" class=
=3D"gmail_quote"></blockquote></blockquote><blockquote style=3D"margin:0 0 =
0 40px;border:none;padding:0px"><blockquote style=3D"margin:0px 0.8ex;borde=
r-left:1px solid rgb(204,204,204);border-right:1px solid rgb(204,204,204);p=
adding-left:1ex;padding-right:1ex" class=3D"gmail_quote"></blockquote></blo=
ckquote><blockquote style=3D"margin:0 0 0 40px;border:none;padding:0px"><bl=
ockquote style=3D"margin:0px 0.8ex;border-left:1px solid rgb(204,204,204);b=
order-right:1px solid rgb(204,204,204);padding-left:1ex;padding-right:1ex" =
class=3D"gmail_quote"></blockquote></blockquote><blockquote style=3D"margin=
:0 0 0 40px;border:none;padding:0px"><blockquote style=3D"margin:0px 0.8ex;=
border-left:1px solid rgb(204,204,204);border-right:1px solid rgb(204,204,2=
04);padding-left:1ex;padding-right:1ex" class=3D"gmail_quote"></blockquote>=
</blockquote></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote=
">On Mon, May 28, 2018 at 8:27 AM, <span dir=3D"ltr"><<a href=3D"mailto=
:mihailnajdenov@gmail.com" target=3D"_blank">mihailnajdenov@gmail.com</a>&g=
t;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0=
.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span><=
br><br>On Sunday, May 27, 2018 at 11:39:01 PM UTC+3, Nicol Bolas wrote:<blo=
ckquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Sunday, May 27, 201=
8 at 3:05:10 PM UTC-4, <a>mihailn...@gmail.com</a> wrote:<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>So the question still stands:<=
/div><div><br></div><div>Is there a <i>valid</i> reason to move a forwardin=
g reference? Is there a <i>need</i> for this?</div></div></blockquote><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>If there is a need=
, then move can be preserved and used instead.</div><div>If there is no nee=
d, move <i>could</i> be deprecated.</div><div><br></div><div>Question 2: Sh=
ould one ever use forward <i>instead of</i> move?</div><div><br></div><div>=
Question 3: Will <font face=3D"courier new,monospace">give</font> ever resu=
lt in ambiguity in code? As in human confusion or uncertainty of what is ha=
ppening?</div><div><br></div><div>Question 4. Is it possible to implement?<=
br></div><div><br></div><div>I believe the answers of these 4 questions mak=
e the said proposal a good improvement to the language.</div></div></blockq=
uote><div><br></div><div>I believe these questions are backwards. Your ques=
tions are about validating the proposal, not <i>motivating</i> it. Basicall=
y, you're asking "why not" rather than "why".</div>=
<div><br></div><div>"Why" is the question your proposal needs to =
answer.<br></div></div></blockquote><div><br></div><div><br></div></span><d=
iv>Let me answer this.</div><div><br></div><div><b>Motivation to merge <fon=
t face=3D"courier new,monospace">forward</font> and <font face=3D"courier n=
ew,monospace">move</font> (not in order):</b></div><div><b></b><b></b><br><=
/div><div>=C2=A01. Less of the "C++ is experts only".=C2=A0</div>=
<div>Removing the distinction (<i>on a practical, hands down level)</i> wil=
l make the language more friendly do beginners.=C2=A0</div><div>The distinc=
tion is subtle and not initially clear, where if merged, when the user sees=
<font face=3D"courier new,monospace">&&</font> on a type, he will =
know, he needs to use the matching operator.</div><div>Always. Always the s=
ame!<br></div><div><br></div><div>=C2=A02. Better code.=C2=A0</div><div>Eli=
minating the possibility to get it wrong - to use one in the place of the o=
ther will make for less bugs, easier maintenance, easier refactor.</div><di=
v><br></div><div>=C2=A03. The compiler should do the job for us.=C2=A0</div=
><div>If there are <i>no decisions</i> to be made on the part of the progra=
mmer, he is not really coding logic, not really "programming" - o=
nly truckling to the language.=C2=A0</div><div><br></div><div>=C2=A04. Merg=
er will make it way, way easier to came up with operator.</div><div>Both <f=
ont face=3D"courier new,monospace">move</font> and <font face=3D"courier ne=
w,monospace">forward</font> should be an operator, not just because verbosi=
ty, but because they are integral part of the language, not a library add-o=
n and a wildly used (may be not even enough).</div><div>A language which ha=
s an operator to take the address of a variable, but can not naturally expr=
ess the notion of passing the said variable along, definitely shows its age=
..</div><div><br></div><div>(5.) It is actually good design.</div><div>Lets =
consider an orthogonal example.=C2=A0</div><div>One has two classes Image a=
nd File. Then the image has freeImageData() method, the file has closeFileH=
andle() and the user is forced to spell out each one for each object.</div>=
<div>The sooner or later someone will come up with solution which trades th=
e explicitly of the methods for some base notion of finishing up with the o=
bject.=C2=A0</div><div>Someone will invent some release() method.</div><div=
><br></div><div>Here the things are similar - different preconditions, diff=
erent actions, but same base notion - passing along.</div><div><br></div><d=
iv>And one last thing</div><div><br></div><div>One way to look at it is - <=
i>it is just a form of overloaded operator</i>, and overloaded operators ar=
e a cornerstone of C++</div><div>It has two "overloads"=C2=A0</di=
v><div>=C2=A0- for forwarding reference - In that case it will expand to fo=
rward (or static_cast<T&&> or whatever)</div><div>=C2=A0- for=
everything else -=C2=A0<span style=3D"display:inline!important;float:none;=
background-color:transparent;color:rgb(34,34,34);font-family:"Arial&qu=
ot;,"Helvetica",sans-serif;font-size:13px;font-style:normal;font-=
variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-d=
ecoration:none;text-indent:0px;text-transform:none;white-space:normal;word-=
spacing:0px">In that case it will expand to move (or static_cast<remove_=
reference_t<T>&&> or whatever)</span></div><div><br></div>=
<div>Such an operator (or overload) is not possible today, so we need compi=
ler support.=C2=A0</div></div><span>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/609892ba-f717-4458-b9e3-c5975378ad29%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/609892ba-f717-=
4458-b9e3-c5975378ad29%40isocpp.org</a>.<br>
</blockquote></div><br></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">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/CAANG%3DkUqV_OU%2BXTZpgMg3LJo_EH1P9CM=
WVXi%2BZUx4aa-mcH54g%40mail.gmail.com?utm_medium=3Demail&utm_source=3Df=
ooter" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std=
-proposals/CAANG%3DkUqV_OU%2BXTZpgMg3LJo_EH1P9CMWVXi%2BZUx4aa-mcH54g%40mail=
..gmail.com</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CALvx3haxYiRPejcW3TqvCWcD9RRm%2BqZcz2=
F6vcVMVBx3PDJF2w%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALvx3haxYiRPej=
cW3TqvCWcD9RRm%2BqZcz2F6vcVMVBx3PDJF2w%40mail.gmail.com</a>.<br />
--0000000000002a1c85056d454aa6--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 28 May 2018 08:00:49 -0700 (PDT)
Raw View
------=_Part_32778_958993608.1527519649796
Content-Type: multipart/alternative;
boundary="----=_Part_32779_11432515.1527519649796"
------=_Part_32779_11432515.1527519649796
Content-Type: text/plain; charset="UTF-8"
On Monday, May 28, 2018 at 10:54:10 AM UTC-4, Richard Hodges wrote:
>
> > *Motivation to merge forward and move (not in order):*
>
> I think it's clear that the committee is already in agreement with you.
>
.... are they? I don't recall seeing a proposal in this merging domain. The
closest we've seen proposed was the `forward` operator, which did nothing
to *merge* forward with move.
The only objections previously seemed to be that an operator was proposed.
>
Again, that was about an operator just for `forward`; no merging was
involved in that proposal.
For the record, I also agree with you. A language should allow a programmer
> to express intent succinctly. give() would help c++ with that.
>
--
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/e302a398-c7ac-433f-9a7a-a9509c4a72b3%40isocpp.org.
------=_Part_32779_11432515.1527519649796
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Monday, May 28, 2018 at 10:54:10 AM UTC-4, Richard Hodg=
es wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: =
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">>=
=C2=A0<b>Motivation to merge=C2=A0<font face=3D"courier new,monospace">forw=
ard</font>=C2=A0and=C2=A0<font face=3D"courier new,monospace">move</font>=
=C2=A0(not in order):</b><br><br><div>I think it's clear that the commi=
ttee is already in agreement with you.</div></div></blockquote><div><br></d=
iv><div>... are they? I don't recall seeing a proposal in this merging =
domain. The closest we've seen proposed was the `forward` operator, whi=
ch did nothing to <i>merge</i> forward with move.</div><div><br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-l=
eft: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div>The only obje=
ctions previously seemed to be that an operator was proposed.</div></div></=
blockquote><div><br></div><div>Again, that was about an operator just for `=
forward`; no merging was involved in that proposal.</div><div><br></div><bl=
ockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border=
-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div></div><div>=
For the record, I also agree with you. A language should allow a programmer=
to express intent succinctly. <font face=3D"monospace, monospace">give()</=
font> would help c++ with that.</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" 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/e302a398-c7ac-433f-9a7a-a9509c4a72b3%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/e302a398-c7ac-433f-9a7a-a9509c4a72b3=
%40isocpp.org</a>.<br />
------=_Part_32779_11432515.1527519649796--
------=_Part_32778_958993608.1527519649796--
.
Author: Richard Hodges <hodges.r@gmail.com>
Date: Mon, 28 May 2018 17:12:33 +0200
Raw View
--000000000000ba5b7c056d458c4e
Content-Type: text/plain; charset="UTF-8"
On Mon, 28 May 2018 at 17:00, Nicol Bolas <jmckesson@gmail.com> wrote:
> On Monday, May 28, 2018 at 10:54:10 AM UTC-4, Richard Hodges wrote:
>>
>> > *Motivation to merge forward and move (not in order):*
>>
>> I think it's clear that the committee is already in agreement with you.
>>
>
> ... are they? I don't recall seeing a proposal in this merging domain. The
> closest we've seen proposed was the `forward` operator, which did nothing
> to *merge* forward with move.
>
OK, so let's get a proposal in and see? I loathe having to write
std::forward<decltype(x)>(x) everywhere. It's ridiculous and indefensible.
>
> The only objections previously seemed to be that an operator was proposed.
>>
>
> Again, that was about an operator just for `forward`; no merging was
> involved in that proposal.
>
> For the record, I also agree with you. A language should allow a
>> programmer to express intent succinctly. give() would help c++ with that.
>>
> --
> 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/e302a398-c7ac-433f-9a7a-a9509c4a72b3%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/e302a398-c7ac-433f-9a7a-a9509c4a72b3%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
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/CALvx3hZ-woSKpyX1NqYOOfryvAd-ksyrgFxDuNGH6m2ADxBsLA%40mail.gmail.com.
--000000000000ba5b7c056d458c4e
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 Mon=
, 28 May 2018 at 17:00, Nicol Bolas <<a href=3D"mailto:jmckesson@gmail.c=
om">jmckesson@gmail.com</a>> 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">On Monday, May 28, 2018 at 10:54:10 AM UTC-4, Richard =
Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-lef=
t:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">>=
=C2=A0<b>Motivation to merge=C2=A0<font face=3D"courier new,monospace">forw=
ard</font>=C2=A0and=C2=A0<font face=3D"courier new,monospace">move</font>=
=C2=A0(not in order):</b><br><br><div>I think it's clear that the commi=
ttee is already in agreement with you.</div></div></blockquote><div><br></d=
iv><div>... are they? I don't recall seeing a proposal in this merging =
domain. The closest we've seen proposed was the `forward` operator, whi=
ch did nothing to <i>merge</i> forward with move.</div></div></blockquote><=
div><br></div><div>OK, so let's get a proposal in and see? I loathe hav=
ing to write <font face=3D"monospace, monospace">std::forward<decltype(x=
)>(x)</font> everywhere. It's ridiculous and indefensible.</div><div=
>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div=
><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>The only obj=
ections previously seemed to be that an operator was proposed.</div></div><=
/blockquote><div><br></div><div>Again, that was about an operator just for =
`forward`; no merging was involved in that proposal.</div><div><br></div><b=
lockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-=
left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div></div><div>For =
the record, I also agree with you. A language should allow a programmer to =
express intent succinctly. <font face=3D"monospace, monospace">give()</font=
> would help c++ with that.</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" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">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/e302a398-c7ac-433f-9a7a-a9509c4a72b3%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/e302a398-c7ac-=
433f-9a7a-a9509c4a72b3%40isocpp.org</a>.<br>
</blockquote></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CALvx3hZ-woSKpyX1NqYOOfryvAd-ksyrgFxD=
uNGH6m2ADxBsLA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALvx3hZ-woSKpyX1=
NqYOOfryvAd-ksyrgFxDuNGH6m2ADxBsLA%40mail.gmail.com</a>.<br />
--000000000000ba5b7c056d458c4e--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 28 May 2018 08:33:39 -0700 (PDT)
Raw View
------=_Part_32766_2042404052.1527521619187
Content-Type: multipart/alternative;
boundary="----=_Part_32767_1134883231.1527521619187"
------=_Part_32767_1134883231.1527521619187
Content-Type: text/plain; charset="UTF-8"
On Monday, May 28, 2018 at 11:12:46 AM UTC-4, Richard Hodges wrote:
>
>
>
> On Mon, 28 May 2018 at 17:00, Nicol Bolas <jmck...@gmail.com <javascript:>>
> wrote:
>
>> On Monday, May 28, 2018 at 10:54:10 AM UTC-4, Richard Hodges wrote:
>>>
>>> > *Motivation to merge forward and move (not in order):*
>>>
>>> I think it's clear that the committee is already in agreement with you.
>>>
>>
>> ... are they? I don't recall seeing a proposal in this merging domain.
>> The closest we've seen proposed was the `forward` operator, which did
>> nothing to *merge* forward with move.
>>
>
> OK, so let's get a proposal in and see? I loathe having to write
> std::forward<decltype(x)>(x) everywhere. It's ridiculous and indefensible.
>
P0644 solves that problem as its primary purpose. The idea under discussion
here, merging `forward` and `move` into a single construct, only solves
that problem as a secondary goal of merging `forward` and `move`.
I'm all for turning `std::forward` into some kind of syntax, and there are
many important benefits of doing exactly that. I don't like the idea of
folding `move` into that syntax too. It's not necessary and I don't see how
it makes code that much easier to write.
The reception of P0644 seems to indicate that the committee likes the idea
of fixing `forward`, but for whatever reason rejected the idea of using an
operator. They suggested a keyword instead but didn't come up with a good
one.
--
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/66244f4a-be67-4627-9e5f-3449421c844b%40isocpp.org.
------=_Part_32767_1134883231.1527521619187
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 11:12:46 AM UTC-4, Rich=
ard Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr"><br><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Mon, 28 May 2018=
at 17:00, Nicol Bolas <<a href=3D"javascript:" target=3D"_blank" gdf-ob=
fuscated-mailto=3D"Aj4T3N2QBgAJ" rel=3D"nofollow" onmousedown=3D"this.href=
=3D'javascript:';return true;" onclick=3D"this.href=3D'javascri=
pt:';return true;">jmck...@gmail.com</a>> wrote:<br></div><blockquot=
e class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc sol=
id;padding-left:1ex"><div dir=3D"ltr">On Monday, May 28, 2018 at 10:54:10 A=
M UTC-4, Richard Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
dir=3D"ltr">>=C2=A0<b>Motivation to merge=C2=A0<font face=3D"courier new=
,monospace">forward</font>=C2=A0and=C2=A0<font face=3D"courier new,monospac=
e">move</font>=C2=A0(not in order):</b><br><br><div>I think it's clear =
that the committee is already in agreement with you.</div></div></blockquot=
e><div><br></div><div>... are they? I don't recall seeing a proposal in=
this merging domain. The closest we've seen proposed was the `forward`=
operator, which did nothing to <i>merge</i> forward with move.</div></div>=
</blockquote><div><br></div><div>OK, so let's get a proposal in and see=
? I loathe having to write <font face=3D"monospace, monospace">std::forward=
<decltype(x)>(x)</font> everywhere. It's ridiculous and indefensi=
ble.</div></div></div></blockquote><div><br></div><div>P0644 solves that pr=
oblem as its primary purpose. The idea under discussion here, merging `forw=
ard` and `move` into a single construct, only solves that problem as a seco=
ndary goal of merging `forward` and `move`.</div><div><br></div><div>I'=
m all for turning `std::forward` into some kind of syntax, and there are ma=
ny important benefits of doing exactly that. I don't like the idea of f=
olding `move` into that syntax too. It's not necessary and I don't =
see how it makes code that much easier to write.</div><div><br></div><div>T=
he reception of P0644 seems to indicate that the committee likes the idea o=
f fixing `forward`, but for whatever reason rejected the idea of using an o=
perator. They suggested a keyword instead but didn't come up with a goo=
d one.</div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/66244f4a-be67-4627-9e5f-3449421c844b%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/66244f4a-be67-4627-9e5f-3449421c844b=
%40isocpp.org</a>.<br />
------=_Part_32767_1134883231.1527521619187--
------=_Part_32766_2042404052.1527521619187--
.
Author: mihailnajdenov@gmail.com
Date: Mon, 28 May 2018 09:24:24 -0700 (PDT)
Raw View
------=_Part_18419_326690785.1527524664389
Content-Type: multipart/alternative;
boundary="----=_Part_18420_813384787.1527524664389"
------=_Part_18420_813384787.1527524664389
Content-Type: text/plain; charset="UTF-8"
On Monday, May 28, 2018 at 5:54:10 PM UTC+3, Richard Hodges wrote:
>
> > *Motivation to merge forward and move (not in order):*
>
> I think it's clear that the committee is already in agreement with you.
> The only objections previously seemed to be that an operator was proposed.
>
>
I personally think using an operator is essential.
I even list it as one of the reasons to merge the two, so the resulting
"higher" operation will be of higher status of any forward and move by its
own, resulting in higher use and higher recognition.
Forward is mainly for library - be it small user-code ones (wrappers etc)
or big separate projects. It is quite possible a programmer can program
without *ever* using it himself.
That's not the case with move, it is wieldy more used. I can't imagine *any*
program without.
(Yes it depends on the project, and "wildly" is an exaggeration, on my
project I have 90 forward and 220 move. move still wins by a lot)
In that sense if we fix forward move feels neglected, considering how
essential to the modern C++ is and how much, much more exposure it has in
user day-to-day code.
There is also one extra twist in that for forward a keyword could be used,
where for move it will not work - it will not be good completion for
std::move.
It is another story that "all keywords are taken already", so give as a
keywords is no go for sure
An operator is great solution for both.
We just need to find the right one and that task, as said, is leaps and
bounds easer to do for one "higher" function then for two specialized,
if for no other reason except the fact we are no longer obligated to have
an op which resembles the operation, because there is no need to
differentiate b/w the two.
As for the old proposal. As I said, am sure some of the problems stem from
the fact the operator was prefix.
The other part of the problem I believe is the fact it is reusing a visual
expression with already established meaning - the shifting/streaming
operator.
Not only that but the operator is pointing* into* the object, not away from
it >>x. This undoubtedly creates confusing.
I don't think these are fatal, unsolvable problems, severe enough to drop
the idea.
--
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/4d68237c-077a-4408-abf1-5f9670311f71%40isocpp.org.
------=_Part_18420_813384787.1527524664389
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 5:54:10 PM UTC+3, Richa=
rd Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"lt=
r">>=C2=A0<b>Motivation to merge=C2=A0<font face=3D"courier new,monospac=
e">forward</font>=C2=A0and=C2=A0<font face=3D"courier new,monospace">move</=
font>=C2=A0(not in order):</b><br><br><div>I think it's clear that the =
committee is already in agreement with you. The only objections previously =
seemed to be that an operator was proposed.</div><div><br></div></div></blo=
ckquote><div><br></div><div>I personally think using an operator is essenti=
al.=C2=A0</div><div><br></div><div>I even list it as one of the reasons to =
merge the two, so the resulting "higher" operation will be of hig=
her status of any forward and move by its own, resulting in higher use and =
higher recognition.</div><div><br></div><div>Forward is mainly for library =
- be it small user-code ones (wrappers etc) or big separate projects. It is=
quite possible a programmer can program without <i>ever</i> using it himse=
lf.=C2=A0</div><div>That's not the case with move, it is wieldy more us=
ed. I can't imagine <i>any</i> program without.=C2=A0</div><div>(Yes it=
depends on the project, and "wildly" is an exaggeration, on my p=
roject I have 90 forward and 220 move. move still wins by a lot)</div><div>=
<br></div><div>In that sense if we fix forward move feels neglected, consid=
ering how essential to the modern C++ is and how much, much more exposure i=
t has in user day-to-day code.=C2=A0</div><div><br></div><div>There is also=
one extra twist in that for forward a keyword could be used, where for mov=
e it will not work - it will not be good completion for std::move.=C2=A0<br=
></div><div>It is another story that "all keywords are taken already&q=
uot;, so <font face=3D"courier new,monospace">give</font> as a keywords is =
no go for sure</div><div><br></div><div>An operator is great solution for b=
oth.=C2=A0</div><div>We just need to find the right one and that task, as s=
aid, is leaps and bounds easer to do for one "higher" function th=
en for two specialized,=C2=A0</div><div>if for no other reason except the f=
act we are no longer obligated to have an op which resembles the operation,=
because there is no need to differentiate b/w the two.=C2=A0</div><div><br=
></div><div>As for the old proposal. As I said, am sure some of the problem=
s stem from the fact the operator was prefix.=C2=A0</div><div>The other par=
t of the problem I believe is the fact it is reusing a visual expression wi=
th already established meaning - the shifting/streaming operator.</div><div=
>Not only that but the operator is pointing<i> into</i> the object, not awa=
y from it <font face=3D"courier new,monospace">>>x. <font face=3D"ari=
al,sans-serif">This undoubtedly creates confusing</font></font><font face=
=3D"courier new,monospace">.</font></div><div><font face=3D"courier new,mon=
ospace"><br></font></div><div><font face=3D"arial,sans-serif">I don't t=
hink these are fatal, unsolvable problems, severe enough to drop the idea.<=
/font></div><div><font face=3D"courier new,monospace"></font><font face=3D"=
courier new,monospace"></font><font face=3D"arial,sans-serif"></font><br></=
div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/4d68237c-077a-4408-abf1-5f9670311f71%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/4d68237c-077a-4408-abf1-5f9670311f71=
%40isocpp.org</a>.<br />
------=_Part_18420_813384787.1527524664389--
------=_Part_18419_326690785.1527524664389--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Mon, 28 May 2018 17:28:50 +0100
Raw View
--0000000000000fa832056d469e7f
Content-Type: text/plain; charset="UTF-8"
What about => as the forward operator? Was that considered?
On Mon, May 28, 2018 at 5:24 PM, <mihailnajdenov@gmail.com> wrote:
>
>
> On Monday, May 28, 2018 at 5:54:10 PM UTC+3, Richard Hodges wrote:
>>
>> > *Motivation to merge forward and move (not in order):*
>>
>> I think it's clear that the committee is already in agreement with you.
>> The only objections previously seemed to be that an operator was proposed.
>>
>>
> I personally think using an operator is essential.
>
> I even list it as one of the reasons to merge the two, so the resulting
> "higher" operation will be of higher status of any forward and move by its
> own, resulting in higher use and higher recognition.
>
> Forward is mainly for library - be it small user-code ones (wrappers etc)
> or big separate projects. It is quite possible a programmer can program
> without *ever* using it himself.
> That's not the case with move, it is wieldy more used. I can't imagine
> *any* program without.
> (Yes it depends on the project, and "wildly" is an exaggeration, on my
> project I have 90 forward and 220 move. move still wins by a lot)
>
> In that sense if we fix forward move feels neglected, considering how
> essential to the modern C++ is and how much, much more exposure it has in
> user day-to-day code.
>
> There is also one extra twist in that for forward a keyword could be used,
> where for move it will not work - it will not be good completion for
> std::move.
> It is another story that "all keywords are taken already", so give as a
> keywords is no go for sure
>
> An operator is great solution for both.
> We just need to find the right one and that task, as said, is leaps and
> bounds easer to do for one "higher" function then for two specialized,
> if for no other reason except the fact we are no longer obligated to have
> an op which resembles the operation, because there is no need to
> differentiate b/w the two.
>
> As for the old proposal. As I said, am sure some of the problems stem from
> the fact the operator was prefix.
> The other part of the problem I believe is the fact it is reusing a visual
> expression with already established meaning - the shifting/streaming
> operator.
> Not only that but the operator is pointing* into* the object, not away
> from it >>x. This undoubtedly creates confusing.
>
> I don't think these are fatal, unsolvable problems, severe enough to drop
> the idea.
>
> --
> 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/4d68237c-077a-4408-
> abf1-5f9670311f71%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/4d68237c-077a-4408-abf1-5f9670311f71%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
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/CAANG%3DkVSgNmGAyjSv3TzijXPUdd1qy%3Dd6NLqkkeYbxz3HVqXfg%40mail.gmail.com.
--0000000000000fa832056d469e7f
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">What about =3D> as the forward operator? Was that consi=
dered?</div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Mo=
n, May 28, 2018 at 5:24 PM, <span dir=3D"ltr"><<a href=3D"mailto:mihail=
najdenov@gmail.com" target=3D"_blank">mihailnajdenov@gmail.com</a>></spa=
n> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span class=3D=
""><br><br>On Monday, May 28, 2018 at 5:54:10 PM UTC+3, Richard Hodges wrot=
e:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">>=C2=A0<b>Mot=
ivation to merge=C2=A0<font face=3D"courier new,monospace">forward</font>=
=C2=A0and=C2=A0<font face=3D"courier new,monospace">move</font>=C2=A0(not i=
n order):</b><br><br><div>I think it's clear that the committee is alre=
ady in agreement with you. The only objections previously seemed to be that=
an operator was proposed.</div><div><br></div></div></blockquote><div><br>=
</div></span><div>I personally think using an operator is essential.=C2=A0<=
/div><div><br></div><div>I even list it as one of the reasons to merge the =
two, so the resulting "higher" operation will be of higher status=
of any forward and move by its own, resulting in higher use and higher rec=
ognition.</div><div><br></div><div>Forward is mainly for library - be it sm=
all user-code ones (wrappers etc) or big separate projects. It is quite pos=
sible a programmer can program without <i>ever</i> using it himself.=C2=A0<=
/div><div>That's not the case with move, it is wieldy more used. I can&=
#39;t imagine <i>any</i> program without.=C2=A0</div><div>(Yes it depends o=
n the project, and "wildly" is an exaggeration, on my project I h=
ave 90 forward and 220 move. move still wins by a lot)</div><div><br></div>=
<div>In that sense if we fix forward move feels neglected, considering how =
essential to the modern C++ is and how much, much more exposure it has in u=
ser day-to-day code.=C2=A0</div><div><br></div><div>There is also one extra=
twist in that for forward a keyword could be used, where for move it will =
not work - it will not be good completion for std::move.=C2=A0<br></div><di=
v>It is another story that "all keywords are taken already", so <=
font face=3D"courier new,monospace">give</font> as a keywords is no go for =
sure</div><div><br></div><div>An operator is great solution for both.=C2=A0=
</div><div>We just need to find the right one and that task, as said, is le=
aps and bounds easer to do for one "higher" function then for two=
specialized,=C2=A0</div><div>if for no other reason except the fact we are=
no longer obligated to have an op which resembles the operation, because t=
here is no need to differentiate b/w the two.=C2=A0</div><div><br></div><di=
v>As for the old proposal. As I said, am sure some of the problems stem fro=
m the fact the operator was prefix.=C2=A0</div><div>The other part of the p=
roblem I believe is the fact it is reusing a visual expression with already=
established meaning - the shifting/streaming operator.</div><div>Not only =
that but the operator is pointing<i> into</i> the object, not away from it =
<font face=3D"courier new,monospace">>>x. <font face=3D"arial,sans-se=
rif">This undoubtedly creates confusing</font></font><font face=3D"courier =
new,monospace">.</font></div><div><font face=3D"courier new,monospace"><br>=
</font></div><div><font face=3D"arial,sans-serif">I don't think these a=
re fatal, unsolvable problems, severe enough to drop the idea.</font></div>=
<div><font face=3D"courier new,monospace"></font><font face=3D"courier new,=
monospace"></font><font face=3D"arial,sans-serif"></font><br></div></div><s=
pan class=3D"">
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/4d68237c-077a-4408-abf1-5f9670311f71%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/4d68=
237c-077a-4408-<wbr>abf1-5f9670311f71%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CAANG%3DkVSgNmGAyjSv3TzijXPUdd1qy%3Dd=
6NLqkkeYbxz3HVqXfg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkVSgN=
mGAyjSv3TzijXPUdd1qy%3Dd6NLqkkeYbxz3HVqXfg%40mail.gmail.com</a>.<br />
--0000000000000fa832056d469e7f--
.
Author: mihailnajdenov@gmail.com
Date: Mon, 28 May 2018 10:07:16 -0700 (PDT)
Raw View
------=_Part_33120_1818343574.1527527236979
Content-Type: multipart/alternative;
boundary="----=_Part_33121_2001727964.1527527236980"
------=_Part_33121_2001727964.1527527236980
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Monday, May 28, 2018 at 7:29:12 PM UTC+3, Ga=C5=A1per A=C5=BEman wrote:
>
> What about =3D> as the forward operator? Was that considered?
>
>>
>>
I have no idea, I might write the author. I also have no idea if any=20
postfix was considered at all.
In any case, all things considered, a postfix && is *very* good candidate=
=20
in my book:
auto f(QImage img)
{
return process(img&&.mirrored()); *//< QImage&& QImage::mirrored() &&=20
overload, D'OH*
}
Class::Class(string&& s, function&& f)
: _s(s&&) *//< natural, language level syntax!*
, _f(f&&) //
{}
auto cally =3D [](auto&&... args)=20
{
return func(arg&&...);=20
};
template <class F, class... Args>
auto delay_invoke(F&& f, Args&&... args)
{
return [f=3Df&&, args =3D args&&...]() -> decltype(auto)=20
{=20
return std::invoke(f, args...);
};=20
}
&& preserves the common established mental image for BOTH rval refs and frw=
=20
refs.
Making it posfix works *absolutely beautiful *with variadic expansion.
It is the killer candidate.=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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/aa3b6d3b-78c9-447b-8052-143f6dc5b32c%40isocpp.or=
g.
------=_Part_33121_2001727964.1527527236980
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 7:29:12 PM UTC+3, Ga=C5=
=A1per A=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr">What about =3D> as the forward operator? Was that considered?=
</div><div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br></=
blockquote></div></div></blockquote><div><br></div><div>I have no idea, I m=
ight write the author. I also have no idea if any postfix was considered at=
all.</div><div><br></div><div><br></div><div>In any case, all things consi=
dered, a postfix && is <i>very</i> good candidate in my book:</div>=
<div><br></div><div><div style=3D"background-color: transparent; border-bot=
tom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width:=
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sl=
ice: 100%; border-image-source: none; border-image-width: 1; border-left-co=
lor: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bord=
er-right-color: rgb(34, 34, 34); border-right-style: none; border-right-wid=
th: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-=
top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&qu=
ot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: =
normal; font-variant: normal; font-weight: 400; letter-spacing: normal; mar=
gin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orph=
ans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding=
-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-=
transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-=
spacing: 0px;"><font face=3D"courier new,monospace" style=3D"border-bottom-=
color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px=
; border-image-outset: 0; border-image-repeat: stretch; border-image-slice:=
100%; border-image-source: none; border-image-width: 1; border-left-color:=
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-r=
ight-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: 0px; padding-right: 0px; padd=
ing-top: 0px;">auto f(QImage img)</font></div><div style=3D"background-colo=
r: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: =
none; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat=
: stretch; border-image-slice: 100%; border-image-source: none; border-imag=
e-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bo=
rder-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-sty=
le: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); borde=
r-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-fami=
ly: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; fon=
t-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; l=
etter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: =
0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; p=
adding-right: 0px; padding-top: 0px; text-align: left; text-decoration: non=
e; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; =
white-space: normal; word-spacing: 0px;"><font face=3D"courier new,monospac=
e" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none=
; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: st=
retch; border-image-slice: 100%; border-image-source: none; border-image-wi=
dth: 1; 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-to=
p-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;">{</font></div><div style=3D"backgr=
ound-color: transparent; border-bottom-color: rgb(34, 34, 34); border-botto=
m-style: none; border-bottom-width: 0px; border-image-outset: 0; border-ima=
ge-repeat: stretch; border-image-slice: 100%; border-image-source: none; bo=
rder-image-width: 1; 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, 3=
4); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); =
font-family: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-s=
erif; font-size: 13px; font-style: normal; font-variant: normal; font-weigh=
t: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margi=
n-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-lef=
t: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decora=
tion: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-wid=
th: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"courier new=
,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-st=
yle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-r=
epeat: stretch; border-image-slice: 100%; border-image-source: none; border=
-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: non=
e; 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-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;">=C2=A0 return process(img=
&&.mirrored()); <i>//< QImage&& QImage::<span style=3D"m=
argin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; =
text-align: left; color: rgb(34, 34, 34); text-transform: none; text-indent=
: 0px; letter-spacing: normal; font-family: courier new,monospace; font-siz=
e: 13px; font-variant: normal; font-weight: 400; text-decoration: none; wor=
d-spacing: 0px; display: inline; white-space: normal; float: none; backgrou=
nd-color: transparent;">mirrored</span>() && overload, <b>D'OH<=
/b></i></font></div><div style=3D"background-color: transparent; border-bot=
tom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width:=
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sl=
ice: 100%; border-image-source: none; border-image-width: 1; border-left-co=
lor: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bord=
er-right-color: rgb(34, 34, 34); border-right-style: none; border-right-wid=
th: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-=
top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&qu=
ot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: =
normal; font-variant: normal; font-weight: 400; letter-spacing: normal; mar=
gin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orph=
ans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding=
-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-=
transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-=
spacing: 0px;"><font face=3D"courier new,monospace" style=3D"border-bottom-=
color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px=
; border-image-outset: 0; border-image-repeat: stretch; border-image-slice:=
100%; border-image-source: none; border-image-width: 1; border-left-color:=
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-r=
ight-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: 0px; padding-right: 0px; padd=
ing-top: 0px;">}</font></div><div style=3D"background-color: transparent; b=
order-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bott=
om-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border=
-image-slice: 100%; border-image-source: none; border-image-width: 1; borde=
r-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; color: rgb(34, 34, 34); font-family: &quot;Ari=
al&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; fon=
t-style: normal; font-variant: normal; font-weight: 400; letter-spacing: no=
rmal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: =
0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px=
; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0=
px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: norm=
al; word-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; 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-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: =
0px; padding-top: 0px;"><br></font></div><div style=3D"background-color: tr=
ansparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none;=
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: str=
etch; border-image-slice: 100%; border-image-source: none; border-image-wid=
th: 1; 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: n=
one; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top=
-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &=
amp;quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-siz=
e: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter=
-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; =
margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; paddin=
g-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; te=
xt-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white=
-space: normal; word-spacing: 0px;"><font face=3D"courier new,monospace" st=
yle=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; bor=
der-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch=
; border-image-slice: 100%; border-image-source: none; border-image-width: =
1; 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-sty=
le: none; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; marg=
in-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; pad=
ding-right: 0px; padding-top: 0px;">Class::Class(string&& s, functi=
on&& f)</font></div><div style=3D"background-color: transparent; bo=
rder-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-botto=
m-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-=
image-slice: 100%; border-image-source: none; border-image-width: 1; border=
-left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0=
px; border-right-color: rgb(34, 34, 34); border-right-style: none; border-r=
ight-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none;=
border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Aria=
l&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font=
-style: normal; font-variant: normal; font-weight: 400; letter-spacing: nor=
mal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0=
px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px;=
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0p=
x; text-transform: none; -webkit-text-stroke-width: 0px; white-space: norma=
l; word-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"border=
-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wi=
dth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-imag=
e-slice: 100%; border-image-source: none; border-image-width: 1; border-lef=
t-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; bor=
der-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px=
; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0=
px; padding-top: 0px;">=C2=A0: _s(s&&) <i>//< natural, <b>langua=
ge</b> <b>level</b> syntax!</i></font></div><div style=3D"background-color:=
transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-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; color: rgb(34, 34, 34); font-family=
: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-=
size: 13px; font-style: normal; font-variant: normal; font-weight: 400; let=
ter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; pad=
ding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none;=
text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; wh=
ite-space: normal; word-spacing: 0px;"><font face=3D"courier new,monospace"=
style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; =
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stre=
tch; border-image-slice: 100%; border-image-source: none; border-image-widt=
h: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-l=
eft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: no=
ne; 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; m=
argin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; =
padding-right: 0px; padding-top: 0px;">=C2=A0, _f(f&&) //</font></d=
iv><div style=3D"background-color: transparent; border-bottom-color: rgb(34=
, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-imag=
e-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border=
-image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, =
34); border-left-style: none; border-left-width: 0px; border-right-color: r=
gb(34, 34, 34); border-right-style: none; border-right-width: 0px; border-t=
op-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; c=
olor: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Hel=
vetica&quot;,sans-serif; font-size: 13px; font-style: normal; font-vari=
ant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; =
margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-b=
ottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-a=
lign: left; text-decoration: none; text-indent: 0px; text-transform: none; =
-webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><f=
ont face=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34, 34=
, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-ou=
tset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-ima=
ge-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34);=
border-left-style: none; border-left-width: 0px; border-right-color: rgb(3=
4, 34, 34); border-right-style: none; border-right-width: 0px; border-top-c=
olor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; margi=
n-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; paddin=
g-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">{}=
</font></div><div style=3D"background-color: transparent; border-bottom-col=
or: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; b=
order-image-outset: 0; border-image-repeat: stretch; border-image-slice: 10=
0%; border-image-source: none; border-image-width: 1; border-left-color: rg=
b(34, 34, 34); border-left-style: none; border-left-width: 0px; border-righ=
t-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-wid=
th: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&am=
p;quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: normal;=
font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bot=
tom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2;=
padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0=
px; text-align: left; text-decoration: none; text-indent: 0px; text-transfo=
rm: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing=
: 0px;"><font face=3D"courier new,monospace"></font><br></div><div style=3D=
"margin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none=
; text-align: left; color: rgb(34, 34, 34); text-transform: none; text-inde=
nt: 0px; letter-spacing: normal; font-size: 13px; font-variant: normal; wor=
d-spacing: 0px; white-space: normal; orphans: 2; -webkit-text-stroke-width:=
0px; background-color: transparent;"><font face=3D"courier new,monospace" =
style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; b=
order-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stret=
ch; border-image-slice: 100%; border-image-source: none; border-image-width=
: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-le=
ft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: non=
e; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-s=
tyle: none; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; ma=
rgin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; p=
adding-right: 0px; padding-top: 0px;"><div style=3D"background-color: trans=
parent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; bo=
rder-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretc=
h; border-image-slice: 100%; border-image-source: none; border-image-width:=
1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-lef=
t-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-st=
yle: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &=
;quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-size: =
13px; font-style: normal; font-variant: normal; font-weight: 400; letter-sp=
acing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; mar=
gin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-r=
ight: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-=
indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-sp=
ace: normal; word-spacing: 0px;"><font face=3D"courier new,monospace" style=
=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-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: 0px; paddin=
g-right: 0px; padding-top: 0px;">auto cally =3D [](auto&&... args)=
=C2=A0</font></div><div style=3D"background-color: transparent; border-bott=
om-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: =
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sli=
ce: 100%; border-image-source: none; border-image-width: 1; border-left-col=
or: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; borde=
r-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-t=
op-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quo=
t;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: n=
ormal; font-variant: normal; font-weight: 400; letter-spacing: normal; marg=
in-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orpha=
ns: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-=
top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-t=
ransform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-s=
pacing: 0px;"><font face=3D"courier new,monospace" style=3D"border-bottom-c=
olor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px;=
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: =
100%; border-image-source: none; border-image-width: 1; border-left-color: =
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-ri=
ght-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0=
px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-w=
idth: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-=
top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px;">{<br style=3D"border-bottom-color: rgb(34, 34, 34); border-bo=
ttom-style: none; border-bottom-width: 0px; border-image-outset: 0; border-=
image-repeat: stretch; border-image-slice: 100%; border-image-source: none;=
border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-sty=
le: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bord=
er-right-style: none; border-right-width: 0px; border-top-color: rgb(34, 34=
, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34=
); line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right:=
0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-righ=
t: 0px; padding-top: 0px;"></font></div><font face=3D"courier new,monospace=
" style=3D"background-color: transparent; border-bottom-color: rgb(34, 34, =
34); border-bottom-style: none; border-bottom-width: 0px; border-image-outs=
et: 0; border-image-repeat: stretch; border-image-slice: 100%; border-image=
-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); b=
order-left-style: none; border-left-width: 0px; border-right-color: rgb(34,=
34, 34); border-right-style: none; border-right-width: 0px; border-top-col=
or: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color: =
rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-=
style: normal; font-variant: normal; font-weight: 400; letter-spacing: norm=
al; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0p=
x; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; =
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px=
; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal=
; word-spacing: 0px;">=C2=A0 return func(arg&&...);=C2=A0<br style=
=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style:=
none; border-top-width: 0px; color: rgb(34, 34, 34); line-height: normal; =
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; p=
adding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px=
;"></font><div><font face=3D"courier new,monospace" style=3D"background-col=
or: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style:=
none; border-bottom-width: 0px; border-image-outset: 0; border-image-repea=
t: stretch; border-image-slice: 100%; border-image-source: none; border-ima=
ge-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; b=
order-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-st=
yle: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); bord=
er-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-fam=
ily: courier new,monospace; font-size: 13px; font-style: normal; font-varia=
nt: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; m=
argin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bo=
ttom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-al=
ign: left; text-decoration: none; text-indent: 0px; text-transform: none; -=
webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">};<=
/font></div></font><br><br><font face=3D"courier new,monospace">template &l=
t;class F, class... Args><br>auto delay_invoke(F&& f, Args&&=
amp;... args)</font></div><div style=3D"margin: 0px; padding: 0px; border: =
0px rgb(34, 34, 34); border-image: none; text-align: left; color: rgb(34, 3=
4, 34); text-transform: none; text-indent: 0px; letter-spacing: normal; fon=
t-size: 13px; font-variant: normal; word-spacing: 0px; white-space: normal;=
orphans: 2; -webkit-text-stroke-width: 0px; background-color: transparent;=
"><font face=3D"courier new,monospace">{<br><div>=C2=A0 return [f=3Df&&=
amp;, args =3D args&&...]() -> decltype(auto)=C2=A0</div><div>=
=C2=A0 {=C2=A0<br></div>=C2=A0 =C2=A0 return std::invoke(f, args...);<br>=
=C2=A0 }; <br>}</font><font style=3D"border-bottom-color: rgb(34, 34=
, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-ou=
tset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-ima=
ge-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34);=
border-left-style: none; border-left-width: 0px; border-right-color: rgb(3=
4, 34, 34); border-right-style: none; border-right-width: 0px; border-top-c=
olor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; margi=
n-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; paddin=
g-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><d=
iv><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><font face=
=3D"courier new,monospace"></font><br></div><div><br></div><div>&& =
preserves the common established mental image for BOTH rval refs and frw re=
fs.</div><div><br></div><div>Making it posfix works <i>absolutely beautiful=
</i>with variadic expansion.</div><div><br></div><div>It is the killer can=
didate.=C2=A0</div></font></div></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/aa3b6d3b-78c9-447b-8052-143f6dc5b32c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/aa3b6d3b-78c9-447b-8052-143f6dc5b32c=
%40isocpp.org</a>.<br />
------=_Part_33121_2001727964.1527527236980--
------=_Part_33120_1818343574.1527527236979--
.
Author: Arthur Tchaikovsky <atch.cpp@gmail.com>
Date: Mon, 28 May 2018 19:09:47 +0200
Raw View
--000000000000593a3b056d472f32
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
I really hope it '&&' will make it!
On Mon, May 28, 2018 at 7:07 PM, <mihailnajdenov@gmail.com> wrote:
>
>
> On Monday, May 28, 2018 at 7:29:12 PM UTC+3, Ga=C5=A1per A=C5=BEman wrote=
:
>>
>> What about =3D> as the forward operator? Was that considered?
>>
>>>
>>>
> I have no idea, I might write the author. I also have no idea if any
> postfix was considered at all.
>
>
> In any case, all things considered, a postfix && is *very* good candidate
> in my book:
>
> auto f(QImage img)
> {
> return process(img&&.mirrored()); *//< QImage&& QImage::mirrored() &&
> overload, D'OH*
> }
>
> Class::Class(string&& s, function&& f)
> : _s(s&&) *//< natural, language level syntax!*
> , _f(f&&) //
> {}
>
> auto cally =3D [](auto&&... args)
> {
> return func(arg&&...);
> };
>
>
> template <class F, class... Args>
> auto delay_invoke(F&& f, Args&&... args)
> {
> return [f=3Df&&, args =3D args&&...]() -> decltype(auto)
> {
> return std::invoke(f, args...);
> };
> }
>
>
> && preserves the common established mental image for BOTH rval refs and
> frw refs.
>
> Making it posfix works *absolutely beautiful *with variadic expansion.
>
> It is the killer candidate.
>
> --
> 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/aa3b6d3b-78c9-447b-
> 8052-143f6dc5b32c%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/aa3b6d3b-78=
c9-447b-8052-143f6dc5b32c%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
--=20
Yours sincerely
Artur Czajkowski
--=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/CANPOWsdk%2BX4Ydb4acYW9b9iy1nUOKxNLqhZBk%2BJeCnJ=
yeetB5w%40mail.gmail.com.
--000000000000593a3b056d472f32
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I really hope it '&&' will make it!</div><=
div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Mon, May 28, 20=
18 at 7:07 PM, <span dir=3D"ltr"><<a href=3D"mailto:mihailnajdenov@gmai=
l.com" target=3D"_blank">mihailnajdenov@gmail.com</a>></span> wrote:<br>=
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span><br><br>On Monday, Ma=
y 28, 2018 at 7:29:12 PM UTC+3, Ga=C5=A1per A=C5=BEman wrote:<blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #cc=
c solid;padding-left:1ex"><div dir=3D"ltr">What about =3D> as the forwar=
d operator? Was that considered?</div><div><div class=3D"gmail_quote"><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #cc=
c solid;padding-left:1ex"><br></blockquote></div></div></blockquote><div><b=
r></div></span><div>I have no idea, I might write the author. I also have n=
o idea if any postfix was considered at all.</div><div><br></div><div><br><=
/div><div>In any case, all things considered, a postfix && is <i>ve=
ry</i> good candidate in my book:</div><div><br></div><div><div><font face=
=3D"courier new,monospace" 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">auto f(QImage img)</font></div><div><f=
ont face=3D"courier new,monospace" style=3D"border-bottom-color:rgb(34,34,3=
4);border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(3=
4,34,34);border-left-style:none;border-left-width:0px;border-right-color:rg=
b(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:0px;padding-right:0px;padding-top:0px">{</font></div><div><font face=
=3D"courier new,monospace" 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">=C2=A0 return process(img&&.mi=
rrored()); <i>//< QImage&& QImage::<span style=3D"margin:0px;pad=
ding:0px;border:0px rgb(34,34,34);text-align:left;color:rgb(34,34,34);text-=
transform:none;text-indent:0px;letter-spacing:normal;font-family:courier ne=
w,monospace;font-size:13px;font-variant:normal;font-weight:400;text-decorat=
ion:none;word-spacing:0px;display:inline;white-space:normal;float:none;back=
ground-color:transparent">mirrored</span>() && overload, <b>D'O=
H</b></i></font></div><div><font face=3D"courier new,monospace" style=3D"bo=
rder-bottom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-widt=
h:0px;border-left-color:rgb(34,34,34);border-left-style:none;border-left-wi=
dth:0px;border-right-color:rgb(34,34,34);border-right-style:none;border-rig=
ht-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-to=
p-width:0px;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0=
px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px">}=
</font></div><div><font face=3D"courier new,monospace" style=3D"border-bott=
om-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;bor=
der-left-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;b=
order-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:0=
px;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;paddin=
g-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px"><br></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">Class::Class(str=
ing&& s, function&& f)</font></div><div><font face=3D"couri=
er new,monospace" 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">=C2=A0: _s(s&&) <i>//< natural, <b>l=
anguage</b> <b>level</b> syntax!</i></font></div><div><font face=3D"courier=
new,monospace" style=3D"border-bottom-color:rgb(34,34,34);border-bottom-st=
yle:none;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-lef=
t-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);bord=
er-top-style:none;border-top-width:0px;margin-bottom:0px;margin-left:0px;ma=
rgin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-r=
ight:0px;padding-top:0px">=C2=A0, _f(f&&) //</font></div><div><font=
face=3D"courier new,monospace" style=3D"border-bottom-color:rgb(34,34,34);=
border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,3=
4,34);border-left-style:none;border-left-width:0px;border-right-color:rgb(3=
4,34,34);border-right-style:none;border-right-width:0px;border-top-color:rg=
b(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0px;ma=
rgin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-le=
ft:0px;padding-right:0px;padding-top:0px">{}</font></div><div><font face=3D=
"courier new,monospace"></font><br></div><div style=3D"margin:0px;padding:0=
px;border:0px rgb(34,34,34);text-align:left;color:rgb(34,34,34);text-transf=
orm:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-variant:=
normal;word-spacing:0px;white-space:normal;background-color:transparent"><f=
ont face=3D"courier new,monospace" style=3D"border-bottom-color:rgb(34,34,3=
4);border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(3=
4,34,34);border-left-style:none;border-left-width:0px;border-right-color:rg=
b(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:0px;padding-right:0px;padding-top:0px"><div><font face=3D"courier new=
,monospace" 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">auto cally =3D [](auto&&... args)=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 style=3D"bo=
rder-bottom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-widt=
h:0px;border-left-color:rgb(34,34,34);border-left-style:none;border-left-wi=
dth:0px;border-right-color:rgb(34,34,34);border-right-style:none;border-rig=
ht-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-to=
p-width:0px;color:rgb(34,34,34);line-height:normal;margin-bottom:0px;margin=
-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0=
px;padding-right:0px;padding-top:0px"></font></div><font face=3D"courier ne=
w,monospace" style=3D"background-color:transparent;border-bottom-color:rgb(=
34,34,34);border-bottom-style:none;border-bottom-width:0px;border-left-colo=
r:rgb(34,34,34);border-left-style:none;border-left-width:0px;border-right-c=
olor:rgb(34,34,34);border-right-style:none;border-right-width:0px;border-to=
p-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;color:rgb(=
34,34,34);font-family:courier new,monospace;font-size:13px;font-style:norma=
l;font-variant:normal;font-weight:400;letter-spacing:normal;margin-bottom:0=
px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;paddi=
ng-left:0px;padding-right:0px;padding-top:0px;text-align:left;text-decorati=
on:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing=
:0px">=C2=A0 return func(arg&&...);=C2=A0<br style=3D"border-bottom=
-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;borde=
r-left-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;bor=
der-right-color:rgb(34,34,34);border-right-style:none;border-right-width:0p=
x;border-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px=
;color:rgb(34,34,34);line-height:normal;margin-bottom:0px;margin-left:0px;m=
argin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-=
right:0px;padding-top:0px"></font><div><font face=3D"courier new,monospace"=
style=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);bo=
rder-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;color:rgb(34,34,34);fo=
nt-family:courier new,monospace;font-size:13px;font-style:normal;font-varia=
nt:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-le=
ft:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;=
padding-right:0px;padding-top:0px;text-align:left;text-decoration:none;text=
-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">};</fo=
nt></div></font><br><br><font face=3D"courier new,monospace">template <c=
lass F, class... Args><br>auto delay_invoke(F&& f, Args&&=
;... args)</font></div><div style=3D"margin:0px;padding:0px;border:0px rgb(=
34,34,34);text-align:left;color:rgb(34,34,34);text-transform:none;text-inde=
nt:0px;letter-spacing:normal;font-size:13px;font-variant:normal;word-spacin=
g:0px;white-space:normal;background-color:transparent"><font face=3D"courie=
r new,monospace">{<br><div>=C2=A0 return [f=3Df&&, args =3D args&am=
p;&...]() -> decltype(auto)=C2=A0</div><div>=C2=A0 {=C2=A0<br></div>=
=C2=A0 =C2=A0 return std::invoke(f, args...);<br>=C2=A0 }; <br>}</fo=
nt><font style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:non=
e;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-s=
tyle: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-ri=
ght:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0p=
x;padding-top:0px"><div><b></b><i></i><u></u><sub></sub><sup></sup><strike>=
</strike><font face=3D"courier new,monospace"></font><br></div><div><br></d=
iv><div>&& preserves the common established mental image for BOTH r=
val refs and frw refs.</div><div><br></div><div>Making it posfix works <i>a=
bsolutely beautiful </i>with variadic expansion.</div><div><br></div><div>I=
t is the killer candidate.=C2=A0</div></font></div></div></div><span>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/aa3b6d3b-78c9-447b-8052-143f6dc5b32c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/aa3b=
6d3b-78c9-447b-<wbr>8052-143f6dc5b32c%40isocpp.org</a><wbr>.<br>
</blockquote></div><br><br clear=3D"all"><br>-- <br><div class=3D"gmail_sig=
nature" data-smartmail=3D"gmail_signature">Yours sincerely<br>Artur Czajkow=
ski</div>
</div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CANPOWsdk%2BX4Ydb4acYW9b9iy1nUOKxNLqh=
ZBk%2BJeCnJyeetB5w%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CANPOWsdk%2BX=
4Ydb4acYW9b9iy1nUOKxNLqhZBk%2BJeCnJyeetB5w%40mail.gmail.com</a>.<br />
--000000000000593a3b056d472f32--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Mon, 28 May 2018 18:11:20 +0100
Raw View
--0000000000000e9952056d473641
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
I forsee a fight to distinguish the unary && from the binary && in fold
expressions, but otherwise... I mean it *looks* good, but is it too cute?
I have to sleep on this.
G
On Mon, May 28, 2018 at 6:09 PM, Arthur Tchaikovsky <atch.cpp@gmail.com>
wrote:
> I really hope it '&&' will make it!
>
> On Mon, May 28, 2018 at 7:07 PM, <mihailnajdenov@gmail.com> wrote:
>
>>
>>
>> On Monday, May 28, 2018 at 7:29:12 PM UTC+3, Ga=C5=A1per A=C5=BEman wrot=
e:
>>>
>>> What about =3D> as the forward operator? Was that considered?
>>>
>>>>
>>>>
>> I have no idea, I might write the author. I also have no idea if any
>> postfix was considered at all.
>>
>>
>> In any case, all things considered, a postfix && is *very* good
>> candidate in my book:
>>
>> auto f(QImage img)
>> {
>> return process(img&&.mirrored()); *//< QImage&& QImage::mirrored() &&
>> overload, D'OH*
>> }
>>
>> Class::Class(string&& s, function&& f)
>> : _s(s&&) *//< natural, language level syntax!*
>> , _f(f&&) //
>> {}
>>
>> auto cally =3D [](auto&&... args)
>> {
>> return func(arg&&...);
>> };
>>
>>
>> template <class F, class... Args>
>> auto delay_invoke(F&& f, Args&&... args)
>> {
>> return [f=3Df&&, args =3D args&&...]() -> decltype(auto)
>> {
>> return std::invoke(f, args...);
>> };
>> }
>>
>>
>> && preserves the common established mental image for BOTH rval refs and
>> frw refs.
>>
>> Making it posfix works *absolutely beautiful *with variadic expansion.
>>
>> It is the killer candidate.
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> 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/is
>> ocpp.org/d/msgid/std-proposals/aa3b6d3b-78c9-447b-8052-
>> 143f6dc5b32c%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/aa3b6d3b-7=
8c9-447b-8052-143f6dc5b32c%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>
>
>
> --
> Yours sincerely
> Artur Czajkowski
>
> --
> 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/CANPOWsdk%2BX4Ydb4acYW9b9iy1nUOKxNLqhZBk
> %2BJeCnJyeetB5w%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CANPOWsdk%2=
BX4Ydb4acYW9b9iy1nUOKxNLqhZBk%2BJeCnJyeetB5w%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
--=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/CAANG%3DkXffB7HuGUMsLAfrKHbavJwxdOrmz9%3DtWC2Ev4=
S0pFQuw%40mail.gmail.com.
--0000000000000e9952056d473641
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I forsee a fight to distinguish the unary && from =
the binary && in fold expressions, but otherwise... I mean it *look=
s* good, but is it too cute?<div><br></div><div>I have to sleep on this.</d=
iv><div><br></div><div>G</div></div><div class=3D"gmail_extra"><br><div cla=
ss=3D"gmail_quote">On Mon, May 28, 2018 at 6:09 PM, Arthur Tchaikovsky <spa=
n dir=3D"ltr"><<a href=3D"mailto:atch.cpp@gmail.com" target=3D"_blank">a=
tch.cpp@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote=
" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><=
div dir=3D"ltr">I really hope it '&&' will make it!</div><d=
iv class=3D"gmail_extra"><div><div class=3D"h5"><br><div class=3D"gmail_quo=
te">On Mon, May 28, 2018 at 7:07 PM, <span dir=3D"ltr"><<a href=3D"mail=
to:mihailnajdenov@gmail.com" target=3D"_blank">mihailnajdenov@gmail.com</a>=
></span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0=
0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span=
><br><br>On Monday, May 28, 2018 at 7:29:12 PM UTC+3, Ga=C5=A1per A=C5=BEma=
n wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">What about=
=3D> as the forward operator? Was that considered?</div><div><div class=
=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><br></blockquote></div></di=
v></blockquote><div><br></div></span><div>I have no idea, I might write the=
author. I also have no idea if any postfix was considered at all.</div><di=
v><br></div><div><br></div><div>In any case, all things considered, a postf=
ix && is <i>very</i> good candidate in my book:</div><div><br></div=
><div><div><font face=3D"courier new,monospace" style=3D"border-bottom-colo=
r:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;border-lef=
t-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;border-r=
ight-color:rgb(34,34,34);border-right-style:none;border-right-width:0px;bor=
der-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px">auto f(QImage img=
)</font></div><div><font face=3D"courier new,monospace" style=3D"border-bot=
tom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;bo=
rder-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;paddi=
ng-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px">{</font><=
/div><div><font face=3D"courier new,monospace" 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-ri=
ght-color:rgb(34,34,34);border-right-style:none;border-right-width:0px;bord=
er-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;margi=
n-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom=
:0px;padding-left:0px;padding-right:0px;padding-top:0px">=C2=A0 return proc=
ess(img&&.mirrored()); <i>//< QImage&& QImage::<span sty=
le=3D"margin:0px;padding:0px;border:0px rgb(34,34,34);text-align:left;color=
:rgb(34,34,34);text-transform:none;text-indent:0px;letter-spacing:normal;fo=
nt-family:courier new,monospace;font-size:13px;font-variant:normal;font-wei=
ght:400;text-decoration:none;word-spacing:0px;display:inline;white-space:no=
rmal;float:none;background-color:transparent">mirrored</span>() && =
overload, <b>D'OH</b></i></font></div><div><font face=3D"courier new,mo=
nospace" style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:non=
e;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-s=
tyle: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-ri=
ght:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0p=
x;padding-top:0px">}</font></div><div><font face=3D"courier new,monospace" =
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;bor=
der-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:non=
e;border-top-width:0px;margin-bottom:0px;margin-left:0px;margin-right:0px;m=
argin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding=
-top:0px"><br></font></div><div><font face=3D"courier new,monospace" style=
=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:none;border-botto=
m-width:0px;border-left-color:rgb(34,34,34);border-left-style:none;border-l=
eft-width:0px;border-right-color:rgb(34,34,34);border-right-style:none;bord=
er-right-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;bor=
der-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">Class::Class(string&& s, function&& f)</font></div><di=
v><font face=3D"courier new,monospace" style=3D"border-bottom-color:rgb(34,=
34,34);border-bottom-style:none;border-bottom-width:0px;border-left-color:r=
gb(34,34,34);border-left-style:none;border-left-width:0px;border-right-colo=
r:rgb(34,34,34);border-right-style:none;border-right-width:0px;border-top-c=
olor: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;pad=
ding-left:0px;padding-right:0px;padding-top:0px">=C2=A0: _s(s&&) <i=
>//< natural, <b>language</b> <b>level</b> syntax!</i></font></div><div>=
<font face=3D"courier new,monospace" 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,34);border-right-style:none;border-right-width:0px;border-top-col=
or:rgb(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0=
px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;paddi=
ng-left:0px;padding-right:0px;padding-top:0px">=C2=A0, _f(f&&) //</=
font></div><div><font face=3D"courier new,monospace" style=3D"border-bottom=
-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;borde=
r-left-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;bor=
der-right-color:rgb(34,34,34);border-right-style:none;border-right-width:0p=
x;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:0px;padding-right:0px;padding-top:0px">{}</font></d=
iv><div><font face=3D"courier new,monospace"></font><br></div><div style=3D=
"margin:0px;padding:0px;border:0px rgb(34,34,34);text-align:left;color:rgb(=
34,34,34);text-transform:none;text-indent:0px;letter-spacing:normal;font-si=
ze:13px;font-variant:normal;word-spacing:0px;white-space:normal;background-=
color:transparent"><font face=3D"courier new,monospace" style=3D"border-bot=
tom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;bo=
rder-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;paddi=
ng-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px"><div><fon=
t face=3D"courier new,monospace" 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,34);border-right-style:none;border-right-width:0px;border-top-color:r=
gb(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0px;m=
argin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-l=
eft:0px;padding-right:0px;padding-top:0px">auto cally =3D [](auto&&=
.... args)=C2=A0</font></div><div><font face=3D"courier new,monospace" style=
=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:none;border-botto=
m-width:0px;border-left-color:rgb(34,34,34);border-left-style:none;border-l=
eft-width:0px;border-right-color:rgb(34,34,34);border-right-style:none;bord=
er-right-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;bor=
der-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">{<br style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:no=
ne;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-styl=
e: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;color:rgb(34,34,34);line-height:normal;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"></font></div><fo=
nt face=3D"courier new,monospace" style=3D"background-color:transparent;bor=
der-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-wid=
th:0px;border-right-color:rgb(34,34,34);border-right-style:none;border-righ=
t-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-top=
-width:0px;color:rgb(34,34,34);font-family:courier new,monospace;font-size:=
13px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:n=
ormal;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;pad=
ding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-ali=
gn:left;text-decoration:none;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px">=C2=A0 return func(arg&&...);=C2=A0<br s=
tyle=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:none;border-b=
ottom-width:0px;border-left-color:rgb(34,34,34);border-left-style:none;bord=
er-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;color:rgb(34,34,34);line-height:normal;margin-bottom:=
0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padd=
ing-left:0px;padding-right:0px;padding-top:0px"></font><div><font face=3D"c=
ourier new,monospace" style=3D"background-color:transparent;border-bottom-c=
olor: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;borde=
r-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;c=
olor:rgb(34,34,34);font-family:courier new,monospace;font-size:13px;font-st=
yle:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin=
-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:=
0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;text=
-decoration:none;text-indent:0px;text-transform:none;white-space:normal;wor=
d-spacing:0px">};</font></div></font><br><br><font face=3D"courier new,mono=
space">template <class F, class... Args><br>auto delay_invoke(F&&=
amp; f, Args&&... args)</font></div><div style=3D"margin:0px;paddin=
g:0px;border:0px rgb(34,34,34);text-align:left;color:rgb(34,34,34);text-tra=
nsform:none;text-indent:0px;letter-spacing:normal;font-size:13px;font-varia=
nt:normal;word-spacing:0px;white-space:normal;background-color:transparent"=
><font face=3D"courier new,monospace">{<br><div>=C2=A0 return [f=3Df&&a=
mp;, args =3D args&&...]() -> decltype(auto)=C2=A0</div><div>=C2=
=A0 {=C2=A0<br></div>=C2=A0 =C2=A0 return std::invoke(f, args...);<br>=C2=
=A0 }; <br>}</font><font style=3D"border-bottom-color:rgb(34,34,34);=
border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,3=
4,34);border-left-style:none;border-left-width:0px;border-right-color:rgb(3=
4,34,34);border-right-style:none;border-right-width:0px;border-top-color:rg=
b(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0px;ma=
rgin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-le=
ft:0px;padding-right:0px;padding-top:0px"><div><b></b><i></i><u></u><sub></=
sub><sup></sup><strike></strike><font face=3D"courier new,monospace"></font=
><br></div><div><br></div><div>&& preserves the common established =
mental image for BOTH rval refs and frw refs.</div><div><br></div><div>Maki=
ng it posfix works <i>absolutely beautiful </i>with variadic expansion.</di=
v><div><br></div><div>It is the killer candidate.=C2=A0</div></font></div><=
/div></div><span>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isoc<wbr>pp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/aa3b6d3b-78c9-447b-8052-143f6dc5b32c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/aa3b=
6d3b-78c9-447b-8052-<wbr>143f6dc5b32c%40isocpp.org</a>.<br>
</blockquote></div><br><br clear=3D"all"><br></div></div><span class=3D"">-=
- <br><div class=3D"m_7823099407648864469gmail_signature" data-smartmail=3D=
"gmail_signature">Yours sincerely<br>Artur Czajkowski</div>
</span></div>
<p></p>
-- <br><span class=3D"">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CANPOWsdk%2BX4Ydb4acYW9b9iy1nUOKxNLqh=
ZBk%2BJeCnJyeetB5w%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoo=
ter" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/=
std-<wbr>proposals/CANPOWsdk%<wbr>2BX4Ydb4acYW9b9iy1nUOKxNLqhZBk<wbr>%2BJeC=
nJyeetB5w%40mail.gmail.<wbr>com</a>.<br>
</blockquote></div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CAANG%3DkXffB7HuGUMsLAfrKHbavJwxdOrmz=
9%3DtWC2Ev4S0pFQuw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkXffB=
7HuGUMsLAfrKHbavJwxdOrmz9%3DtWC2Ev4S0pFQuw%40mail.gmail.com</a>.<br />
--0000000000000e9952056d473641--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 28 May 2018 10:39:49 -0700 (PDT)
Raw View
------=_Part_33440_1140459146.1527529189803
Content-Type: multipart/alternative;
boundary="----=_Part_33441_1789329592.1527529189803"
------=_Part_33441_1789329592.1527529189803
Content-Type: text/plain; charset="UTF-8"
On Monday, May 28, 2018 at 12:24:24 PM UTC-4, mihailn...@gmail.com wrote:
>
> On Monday, May 28, 2018 at 5:54:10 PM UTC+3, Richard Hodges wrote:
>>
>> > *Motivation to merge forward and move (not in order):*
>>
>> I think it's clear that the committee is already in agreement with you.
>> The only objections previously seemed to be that an operator was proposed.
>>
>>
> I personally think using an operator is essential.
>
> I even list it as one of the reasons to merge the two, so the resulting
> "higher" operation will be of higher status of any forward and move by its
> own, resulting in higher use and higher recognition.
>
Neither `forward` nor `move` needs "higher use", or "higher recognition".
People already use them where they need to be used, and people are already
taught about using them. We shouldn't add things to the language just to
satisfy some notion of how much "status" something has; we should do it
because it makes the language objectively better.
`move` doesn't have any objective problems with it. It cleanly spells out
what it's doing, and it's relatively short. `forward` has objective
problems; it *needs* less verbosity in ways that `move` does not.
Forward is mainly for library - be it small user-code ones (wrappers etc)
> or big separate projects. It is quite possible a programmer can program
> without *ever* using it himself.
>
The following is a basic tool for many programmers:
[](auto... &&args) -> decltype(auto) {return some_func(std::forward<decltype
(args)>(args)...);}
This forwards a call to an overloaded function, returning what that
function returns. This crops up pretty often in programs that need to pass
functions around.
That's not the case with move, it is wieldy more used. I can't imagine *any*
> program without.
> (Yes it depends on the project, and "wildly" is an exaggeration, on my
> project I have 90 forward and 220 move. move still wins by a lot)
>
> In that sense if we fix forward move feels neglected, considering how
> essential to the modern C++ is and how much, much more exposure it has in
> user day-to-day code.
>
Why does it matter if "move feels neglected"? We shouldn't care about how
some feature is perceived; we should care about solving actual problems.
The verbosity of `forward` is an undeniable problem; `move` has no such
problem.
And from a subjective point of view, `move` is the one that's more likely
to be used dangerously. So having it spelled out clearly is a good thing.
There is also one extra twist in that for forward a keyword could be used,
> where for move it will not work - it will not be good completion for
> std::move.
> It is another story that "all keywords are taken already", so give as a
> keywords is no go for sure
>
> An operator is great solution for both.
> We just need to find the right one and that task, as said, is leaps and
> bounds easer to do for one "higher" function then for two specialized,
> if for no other reason except the fact we are no longer obligated to have
> an op which resembles the operation, because there is no need to
> differentiate b/w the two.
>
> As for the old proposal. As I said, am sure some of the problems stem from
> the fact the operator was prefix.
> The other part of the problem I believe is the fact it is reusing a visual
> expression with already established meaning - the shifting/streaming
> operator.
> Not only that but the operator is pointing* into* the object, not away
> from it >>x. This undoubtedly creates confusing.
>
> I don't think these are fatal, unsolvable problems, severe enough to drop
> the idea.
>
>
--
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/0db9112a-4b07-42f0-a5c3-44694f7a9906%40isocpp.org.
------=_Part_33441_1789329592.1527529189803
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Monday, May 28, 2018 at 12:24:24 PM UTC-4, mihailn...@g=
mail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr=
">On Monday, May 28, 2018 at 5:54:10 PM UTC+3, Richard Hodges wrote:<blockq=
uote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:=
1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">>=C2=A0<b>Motivation t=
o merge=C2=A0<font face=3D"courier new,monospace">forward</font>=C2=A0and=
=C2=A0<font face=3D"courier new,monospace">move</font>=C2=A0(not in order):=
</b><br><br><div>I think it's clear that the committee is already in ag=
reement with you. The only objections previously seemed to be that an opera=
tor was proposed.</div><div><br></div></div></blockquote><div><br></div><di=
v>I personally think using an operator is essential.=C2=A0</div><div><br></=
div><div>I even list it as one of the reasons to merge the two, so the resu=
lting "higher" operation will be of higher status of any forward =
and move by its own, resulting in higher use and higher recognition.</div><=
/div></blockquote><div><br></div><div>Neither `forward` nor `move` needs &q=
uot;higher use", or "higher recognition". People already use=
them where they need to be used, and people are already taught about using=
them. We shouldn't add things to the language just to satisfy some not=
ion of how much "status" something has; we should do it because i=
t makes the language objectively better.</div><div><br></div><div>`move` do=
esn't have any objective problems with it. It cleanly spells out what i=
t's doing, and it's relatively short. `forward` has objective probl=
ems; it <i>needs</i> less verbosity in ways that `move` does not.<br></div>=
<div><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr=
"><div></div><div>Forward is mainly for library - be it small user-code one=
s (wrappers etc) or big separate projects. It is quite possible a programme=
r can program without <i>ever</i> using it himself.</div></div></blockquote=
><div><br></div><div>The following is a basic tool for many programmers:</d=
iv><div><br></div><div><div style=3D"background-color: rgb(250, 250, 250); =
border-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; o=
verflow-wrap: break-word;" class=3D"prettyprint"><code class=3D"prettyprint=
"><div class=3D"subprettyprint"><span style=3D"color: #660;" class=3D"style=
d-by-prettify">[](</span><span style=3D"color: #008;" class=3D"styled-by-pr=
ettify">auto</span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">...</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">&&</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify">args</span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">-></span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">decltype</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(</span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">auto</span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">)</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: #008;" class=3D"styled-by-prettify">return</span><span=
style=3D"color: #000;" class=3D"styled-by-prettify"> some_func</span><span=
style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify">std</span><span style=3D"color:=
#660;" class=3D"styled-by-prettify">::</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify">forward</span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify"><</span><span style=3D"color: #008;" class=3D"=
styled-by-prettify">decltype</span><span style=3D"color: #660;" class=3D"st=
yled-by-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify">args</span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">)>(</span><span style=3D"color: #000;" class=3D"styled-by-prettify">a=
rgs</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)...);}=
</span></div></code></div><br></div><div></div><div>This forwards a call to=
an overloaded function, returning what that function returns. This crops u=
p pretty often in programs that need to pass functions around.</div><div><b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0=
..8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div>=
That's not the case with move, it is wieldy more used. I can't imag=
ine <i>any</i> program without.=C2=A0</div><div>(Yes it depends on the proj=
ect, and "wildly" is an exaggeration, on my project I have 90 for=
ward and 220 move. move still wins by a lot)</div><div><br></div><div>In th=
at sense if we fix forward move feels neglected, considering how essential =
to the modern C++ is and how much, much more exposure it has in user day-to=
-day code.=C2=A0</div></div></blockquote><div><br></div><div>Why does it ma=
tter if "move feels neglected"? We shouldn't care about how s=
ome feature is perceived; we should care about solving actual problems. The=
verbosity of `forward` is an undeniable problem; `move` has no such proble=
m.</div><div><br></div><div>And from a subjective point of view, `move` is =
the one that's more likely to be used dangerously. So having it spelled=
out clearly is a good thing.</div><div><br></div><blockquote class=3D"gmai=
l_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;=
padding-left: 1ex;"><div dir=3D"ltr"><div></div><div>There is also one extr=
a twist in that for forward a keyword could be used, where for move it will=
not work - it will not be good completion for std::move.=C2=A0<br></div><d=
iv>It is another story that "all keywords are taken already", so =
<font face=3D"courier new,monospace">give</font> as a keywords is no go for=
sure</div><div><br></div><div>An operator is great solution for both.=C2=
=A0</div><div>We just need to find the right one and that task, as said, is=
leaps and bounds easer to do for one "higher" function then for =
two specialized,=C2=A0</div><div>if for no other reason except the fact we =
are no longer obligated to have an op which resembles the operation, becaus=
e there is no need to differentiate b/w the two.=C2=A0</div><div><br></div>=
<div>As for the old proposal. As I said, am sure some of the problems stem =
from the fact the operator was prefix.=C2=A0</div><div>The other part of th=
e problem I believe is the fact it is reusing a visual expression with alre=
ady established meaning - the shifting/streaming operator.</div><div>Not on=
ly that but the operator is pointing<i> into</i> the object, not away from =
it <font face=3D"courier new,monospace">>>x. <font face=3D"arial,sans=
-serif">This undoubtedly creates confusing</font></font><font face=3D"couri=
er new,monospace">.</font></div><div><font face=3D"courier new,monospace"><=
br></font></div><div><font face=3D"arial,sans-serif">I don't think thes=
e are fatal, unsolvable problems, severe enough to drop the idea.</font></d=
iv><div><font face=3D"courier new,monospace"></font><font face=3D"courier n=
ew,monospace"></font><font face=3D"arial,sans-serif"></font><br></div></div=
></blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/0db9112a-4b07-42f0-a5c3-44694f7a9906%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/0db9112a-4b07-42f0-a5c3-44694f7a9906=
%40isocpp.org</a>.<br />
------=_Part_33441_1789329592.1527529189803--
------=_Part_33440_1140459146.1527529189803--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 28 May 2018 10:40:54 -0700 (PDT)
Raw View
------=_Part_33676_2010573760.1527529254353
Content-Type: multipart/alternative;
boundary="----=_Part_33677_1670107374.1527529254353"
------=_Part_33677_1670107374.1527529254353
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per A=C5=BEman wrote:
>
> I forsee a fight to distinguish the unary && from the binary && in fold=
=20
> expressions, but otherwise...
>
I don't think there *is* an "otherwise" at that point. If &&... already has=
=20
a meaning, that's the end of the conversation. Backwards incompatible=20
changes for this are probably a non-starter.
Indeed, the problem of fold expressions with post-fix operators like this=
=20
is going to crop up with a lot of possible operators.
--=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/70fe7dc7-b8a6-4498-9aa6-f88e6af06506%40isocpp.or=
g.
------=_Part_33677_1670107374.1527529254353
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per A=
=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"lt=
r">I forsee a fight to distinguish the unary && from the binary &am=
p;& in fold expressions, but otherwise...</div></blockquote><div><br></=
div><div>I don't think there <i>is</i> an "otherwise" at that=
point. If &&... already has a meaning, that's the end of the c=
onversation. Backwards incompatible changes for this are probably a non-sta=
rter.</div><div><br></div><div>Indeed, the problem of fold expressions with=
post-fix operators like this is going to crop up with a lot of possible op=
erators.</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/70fe7dc7-b8a6-4498-9aa6-f88e6af06506%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8a6-4498-9aa6-f88e6af06506=
%40isocpp.org</a>.<br />
------=_Part_33677_1670107374.1527529254353--
------=_Part_33676_2010573760.1527529254353--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Mon, 28 May 2018 18:50:19 +0100
Raw View
--000000000000800f38056d47c175
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Nicol,
I forsee a fight to distinguish the unary && from the binary && in fold
>> expressions, but otherwise...
>>
> I don't think there *is* an "otherwise" at that point. If &&... already
> has a meaning, that's the end of the conversation. Backwards incompatible
> changes for this are probably a non-starter.
>
The "otherwise" was not meant as "I see a possibility of changing the
meaning of existing syntax" :). I meant that (args&&)... might actually
still be possible. I do think it's iffy.
Everyone:
I do think "forward" needs more love, and the intersection with move might
or might not make sense, I'm not decided at this point. Both sides of the
debate are valid, imo, and it really depends on the final syntax for *forwa=
rd
*if extending it to move makes sense.
In fact, if the '&&' unary postifx worked, then std::move would *not* be
covered by it, as &&-collapsing rules would have to be obeyed, and an
lvalue with a &&-specifier decays into a reference. (& && -> &)
.... if this nips postfix && in the bud, I'm fine with that :).
Also, I meant =3D> as prefix. Postfix unary operators are *weird*.
G
On Mon, May 28, 2018 at 6:40 PM, Nicol Bolas <jmckesson@gmail.com> wrote:
> On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per A=C5=BEman wrote=
:
>>
>> I forsee a fight to distinguish the unary && from the binary && in fold
>> expressions, but otherwise...
>>
>
> I don't think there *is* an "otherwise" at that point. If &&... already
> has a meaning, that's the end of the conversation. Backwards incompatible
> changes for this are probably a non-starter.
>
> Indeed, the problem of fold expressions with post-fix operators like this
> is going to crop up with a lot of possible operators.
>
> --
> 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/70fe7dc7-b8a6-4498-
> 9aa6-f88e6af06506%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8=
a6-4498-9aa6-f88e6af06506%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
--=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/CAANG%3DkWd9m51WwwAQV22pGDo8%3D85kCiveM60mMo2%2B=
pp_J7K8Og%40mail.gmail.com.
--000000000000800f38056d47c175
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Nicol,<div><br></div><div><span class=3D"gmail-im" style=
=3D"color:rgb(80,0,80);font-family:arial,sans-serif;font-size:12.8px;font-s=
tyle:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-wei=
ght:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transfo=
rm:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,25=
5);text-decoration-style:initial;text-decoration-color:initial"><blockquote=
class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px so=
lid rgb(204,204,204);padding-left:1ex"><blockquote style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class=3D=
"gmail_quote">I forsee a fight to distinguish the unary && from the=
binary && in fold expressions, but otherwise...<br></blockquote><s=
pan style=3D"font-size:12.8px">I don't think there</span><span style=3D=
"font-size:12.8px">=C2=A0</span><i style=3D"font-size:12.8px">is</i><span s=
tyle=3D"font-size:12.8px">=C2=A0</span><span style=3D"font-size:12.8px">an =
"otherwise" at that point. If &&... already has a meaning=
, that's the end of the conversation. Backwards incompatible changes fo=
r this are probably a non-starter.</span><br></blockquote></span><br></div>=
<div>The "otherwise" was not meant as "I see a possibility o=
f changing the meaning of existing syntax" :). I meant that (args&=
&)... might actually still be possible. I do think it's iffy.</div>=
<div><br></div><div>Everyone:</div><div><br></div><div>I do think "for=
ward" needs more love, and the intersection with move might or might n=
ot make sense, I'm not decided at this point. Both sides of the debate =
are valid, imo, and it really depends on the final syntax for <i>forward </=
i>if extending it to move makes sense.</div><div><br></div><div>In fact, if=
the '&&' unary postifx worked, then std::move would *not* =
be covered by it, as &&-collapsing rules would have to be obeyed, a=
nd an lvalue with a &&-specifier decays into a reference. (& &a=
mp;& -> &)</div><div><br></div><div>... if this nips postfix &am=
p;& in the bud, I'm fine with that :).</div><div><br></div><div>Als=
o, I meant =3D> as prefix. Postfix unary operators are *weird*.</div><di=
v><br></div><div>G</div><div><br></div><div><br></div></div><div class=3D"g=
mail_extra"><br><div class=3D"gmail_quote">On Mon, May 28, 2018 at 6:40 PM,=
Nicol Bolas <span dir=3D"ltr"><<a href=3D"mailto:jmckesson@gmail.com" t=
arget=3D"_blank">jmckesson@gmail.com</a>></span> wrote:<br><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><span class=3D"">On Monday, May 28, 2018=
at 1:11:42 PM UTC-4, Ga=C5=A1per A=C5=BEman wrote:<blockquote class=3D"gma=
il_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;pa=
dding-left:1ex"><div dir=3D"ltr">I forsee a fight to distinguish the unary =
&& from the binary && in fold expressions, but otherwise...=
</div></blockquote><div><br></div></span><div>I don't think there <i>is=
</i> an "otherwise" at that point. If &&... already has a=
meaning, that's the end of the conversation. Backwards incompatible ch=
anges for this are probably a non-starter.</div><div><br></div><div>Indeed,=
the problem of fold expressions with post-fix operators like this is going=
to crop up with a lot of possible operators.</div></div><span class=3D"">
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8a6-4498-9aa6-f88e6af06506%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/70fe=
7dc7-b8a6-4498-<wbr>9aa6-f88e6af06506%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CAANG%3DkWd9m51WwwAQV22pGDo8%3D85kCiv=
eM60mMo2%2Bpp_J7K8Og%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkWd=
9m51WwwAQV22pGDo8%3D85kCiveM60mMo2%2Bpp_J7K8Og%40mail.gmail.com</a>.<br />
--000000000000800f38056d47c175--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 28 May 2018 12:06:08 -0700 (PDT)
Raw View
------=_Part_22019_1239524599.1527534368794
Content-Type: multipart/alternative;
boundary="----=_Part_22020_1433131758.1527534368794"
------=_Part_22020_1433131758.1527534368794
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Monday, May 28, 2018 at 1:50:41 PM UTC-4, Ga=C5=A1per A=C5=BEman wrote:
>
> Also, I meant =3D> as prefix. Postfix unary operators are *weird*.
>
One of the problems with the prefix `>>` that was proposed in the older=20
proposal was that this was weird: `[name=3D>>arg]`. The `=3D>` prefix would=
=20
have the same oddity.
What I wonder about is the design space for contextual keywords. C++ has=20
only used them in two places, but right now, I don't believe `<identifier>=
=20
<identifier>` has a syntactic meaning in an expression. As such, it is at=
=20
least theoretically possible to apply a contextual keyword `fwd` to an=20
identifier. But it would *only* work when followed by an identifier, not=20
when followed by arbitrary expressions or even `(`.
Things like this are why the committee should have adopted the P0056: Soft=
=20
Keywords proposal. There are just too many places in the language where a=
=20
keyword is a natural solution, but selecting the "right" keyword is hard=20
and/or the problem isn't worth the cost of a true keyword.
--=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/f98f4f3a-18e3-464f-a299-be18b9c20439%40isocpp.or=
g.
------=_Part_22020_1433131758.1527534368794
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Monday, May 28, 2018 at 1:50:41 PM UTC-4, Ga=C5=A1per A=
=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"lt=
r"><div></div><div>Also, I meant =3D> as prefix. Postfix unary operators=
are *weird*.</div></div></blockquote><div><br></div><div>One of the proble=
ms with the prefix `>>` that was proposed in the older proposal was t=
hat this was weird: `[name=3D>>arg]`. The `=3D>` prefix would have=
the same oddity.</div><div><br></div><div>What I wonder about is the desig=
n space for contextual keywords. C++ has only used them in two places, but =
right now, I don't believe `<identifier> <identifier>` has =
a syntactic meaning in an expression. As such, it is at least theoretically=
possible to apply a contextual keyword `fwd` to an identifier. But it woul=
d <i>only</i> work when followed by an identifier, not when followed by arb=
itrary expressions or even `(`.</div><div><br></div><div>Things like this a=
re why the committee should have adopted the P0056: Soft Keywords proposal.=
There are just too many places in the language where a keyword is a natura=
l solution, but selecting the "right" keyword is hard and/or the =
problem isn't worth the cost of a true keyword.<br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/f98f4f3a-18e3-464f-a299-be18b9c20439%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/f98f4f3a-18e3-464f-a299-be18b9c20439=
%40isocpp.org</a>.<br />
------=_Part_22020_1433131758.1527534368794--
------=_Part_22019_1239524599.1527534368794--
.
Author: mihailnajdenov@gmail.com
Date: Mon, 28 May 2018 13:20:27 -0700 (PDT)
Raw View
------=_Part_2979_1624388691.1527538827983
Content-Type: multipart/alternative;
boundary="----=_Part_2980_1828175221.1527538827984"
------=_Part_2980_1828175221.1527538827984
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=A1per A=C5=BEman wrote:
>
> Nicol,
>
> I forsee a fight to distinguish the unary && from the binary && in fold=
=20
>>> expressions, but otherwise...
>>>
>> I don't think there *is* an "otherwise" at that point. If &&... already=
=20
>> has a meaning, that's the end of the conversation. Backwards incompatibl=
e=20
>> changes for this are probably a non-starter.
>>
>
> The "otherwise" was not meant as "I see a possibility of changing the=20
> meaning of existing syntax" :). I meant that (args&&)... might actually=
=20
> still be possible. I do think it's iffy.
>
What the problem might be?
auto c =3D a&& && b;
template<class... T>
auto sum(T&&... args) {
return (args&& && ... && T{});=20
}
=20
These will do what it's expected. They look a bit funny, but not *that*=20
funny.=20
> Everyone:
>
> I do think "forward" needs more love, and the intersection with move migh=
t=20
> or might not make sense, I'm not decided at this point. Both sides of the=
=20
> debate are valid, imo, and it really depends on the final syntax for *for=
ward=20
> *if extending it to move makes sense.
>
I am yet to hear any objections to merger outside the dropping of "exactly"=
=20
in "know *exactly *what going on".=20
That is tiny price to pay for the 4+1 pretty solid pros I have given,=20
especially considering - *you have no decisions to make, based on that=20
information*.
And don't forget, you are an expert, you are using thins for 10 years, you=
=20
feel at home and only annoyances stick up for you (with forward).
But for a new user it is a different story. Essentially one less lesson to=
=20
learn.=20
=20
>
> In fact, if the '&&' unary postifx worked, then std::move would *not* be=
=20
> covered by it, as &&-collapsing rules would have to be obeyed, and an=20
> lvalue with a &&-specifier decays into a reference. (& && -> &)
>
I do not understand your point. What reference collapsing has to do with an=
=20
operator?
=20
>
> ... if this nips postfix && in the bud, I'm fine with that :).
>
> Also, I meant =3D> as prefix. Postfix unary operators are *weird*.
>
The problem will be as in [x=3D=3D>y] it will visually represent, well, exa=
ctly=20
the opposite :)
As for the postfix - they are the solution to the problem, for 4 reasons.
1. The highest possible precedence which is AWAYS what you want here.=20
2. Keep the clean the lhs clean to not visually confuse on assignment and=
=20
keep the rhs "dirty" as img&&.flipped() or func&&(args&&=E2=80=A6)To nicely=
=20
indicate "just before you make this call" notion
3. The are not common, so they do tend to draw attention.
4. The fact that the op is *after *the variable reinforces the reminder=20
"this is end of line", "the variable was before me". I am ending it, do not=
=20
use after me.
As you can see all 4 apply to both move and forward equally. That is=20
because, the fact that it is and-of-line is more important then what was in=
=20
the train.=20
It really is.
=20
>
> G
>
>
>
> On Mon, May 28, 2018 at 6:40 PM, Nicol Bolas <jmck...@gmail.com=20
> <javascript:>> wrote:
>
>> On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per A=C5=BEman wrot=
e:
>>>
>>> I forsee a fight to distinguish the unary && from the binary && in fold=
=20
>>> expressions, but otherwise...
>>>
>>
>> I don't think there *is* an "otherwise" at that point. If &&... already=
=20
>> has a meaning, that's the end of the conversation. Backwards incompatibl=
e=20
>> changes for this are probably a non-starter.
>>
>> Indeed, the problem of fold expressions with post-fix operators like thi=
s=20
>> is going to crop up with a lot of possible operators.
>>
>> --=20
>> You received this message because you are subscribed to the Google Group=
s=20
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n=20
>> email to std-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit=20
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8=
a6-4498-9aa6-f88e6af06506%40isocpp.org=20
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b=
8a6-4498-9aa6-f88e6af06506%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>
>
--=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/0c4f8aa4-6b4f-4fe3-a02a-ef33eae990a8%40isocpp.or=
g.
------=_Part_2980_1828175221.1527538827984
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=
=A1per A=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr">Nicol,<div><br></div><div><span style=3D"color:rgb(80,0,80);font=
-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-weight:400=
;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none=
;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex"><blockquote class=3D"gmail_q=
uote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2=
04);padding-left:1ex">I forsee a fight to distinguish the unary && =
from the binary && in fold expressions, but otherwise...<br></block=
quote><span style=3D"font-size:12.8px">I don't think there</span><span =
style=3D"font-size:12.8px">=C2=A0</span><i style=3D"font-size:12.8px">is</i=
><span style=3D"font-size:12.8px">=C2=A0</span><span style=3D"font-size:12.=
8px">an "otherwise" at that point. If &&... already has a=
meaning, that's the end of the conversation. Backwards incompatible ch=
anges for this are probably a non-starter.</span><br></blockquote></span><b=
r></div><div>The "otherwise" was not meant as "I see a possi=
bility of changing the meaning of existing syntax" :). I meant that (a=
rgs&&)... might actually still be possible. I do think it's iff=
y.</div></div></blockquote><div><br></div><div>What the problem might be?</=
div><div><font face=3D"courier new,monospace"></font><br></div><div><font f=
ace=3D"courier new,monospace">auto c =3D a&& && b;</font></=
div><div><font face=3D"courier new,monospace"></font><br></div><font face=
=3D"courier new,monospace">template<class... T><br>auto sum(T&&am=
p;... args) {<br>=C2=A0return (args&& && ... && T{}=
);=C2=A0<br>}</font><div>=C2=A0</div><div>These will do what it's expec=
ted. They look a bit funny, but not <i>that</i> funny.=C2=A0</div><div><br>=
</div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8=
ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><b=
r></div><div>Everyone:</div><div><br></div><div>I do think "forward&qu=
ot; needs more love, and the intersection with move might or might not make=
sense, I'm not decided at this point. Both sides of the debate are val=
id, imo, and it really depends on the final syntax for <i>forward </i>if ex=
tending it to move makes sense.</div></div></blockquote><div><br></div><div=
>I am yet to hear any objections to merger outside the dropping of "ex=
actly" in "know <i>exactly </i>what going on".=C2=A0</div><d=
iv>That is tiny price to pay for the 4+1 pretty solid pros I have given, es=
pecially considering - <i>you have no decisions to make, based on that info=
rmation</i>.</div><div><br></div><div>And don't forget, you are an expe=
rt, you are using thins for 10 years, you feel at home and only annoyances =
stick up for you (with forward).</div><div>But for a new user it is a diffe=
rent story. Essentially one less lesson to learn.=C2=A0<br></div><div><br><=
/div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><div><br></div><div>In fact, if the '&&' unary pos=
tifx worked, then std::move would *not* be covered by it, as &&-col=
lapsing rules would have to be obeyed, and an lvalue with a &&-spec=
ifier decays into a reference. (& && -> &)</div></div></=
blockquote><div><br></div><div>I do not understand your point. What referen=
ce collapsing has to do with an operator?</div><div>=C2=A0</div><blockquote=
class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1=
px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br></div><div>... =
if this nips postfix && in the bud, I'm fine with that :).</div=
><div><br></div><div>Also, I meant =3D> as prefix. Postfix unary operato=
rs are *weird*.</div></div></blockquote><div><br></div><div>The problem wil=
l be as in [x=3D=3D>y] it will visually represent, well, exactly the opp=
osite :)</div><div><br></div><div>As for the postfix - they are the solutio=
n to the problem, for 4 reasons.</div><div><br></div><div>1. The highest po=
ssible precedence which is AWAYS what you want here.=C2=A0</div><div>2. Kee=
p the clean the lhs clean to not visually confuse on assignment and keep th=
e rhs "dirty" as<font face=3D"courier new,monospace"> img&&am=
p;.flipped()</font> or <font face=3D"courier new,monospace">func&&(=
args&&=E2=80=A6)</font>To nicely indicate "just before you mak=
e this call" notion</div><div>3. The are not common, so they do tend t=
o draw attention.</div><div>4. The fact that the op is <i>after </i>the var=
iable reinforces the reminder "this is end of line", "the va=
riable was before me". I am ending it, do not use after me.</div><div>=
<br></div><div>As you can see all 4 apply to both move and forward equally.=
That is because, the fact that it is and-of-line is more important then wh=
at was in the train.=C2=A0</div><div>It really is.</div><div>=C2=A0</div><b=
lockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;borde=
r-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br></div>=
<div>G</div><div><br></div><div><br></div></div><div><br><div class=3D"gmai=
l_quote">On Mon, May 28, 2018 at 6:40 PM, Nicol Bolas <span dir=3D"ltr"><=
;<a onmousedown=3D"this.href=3D'javascript:';return true;" onclick=
=3D"this.href=3D'javascript:';return true;" href=3D"javascript:" ta=
rget=3D"_blank" rel=3D"nofollow" gdf-obfuscated-mailto=3D"pKO-CnyZBgAJ">jmc=
k...@gmail.com</a>></span> wrote:<br><blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
dir=3D"ltr"><span>On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per=
A=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margi=
n-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">=
I forsee a fight to distinguish the unary && from the binary &&=
amp; in fold expressions, but otherwise...</div></blockquote><div><br></div=
></span><div>I don't think there <i>is</i> an "otherwise" at =
that point. If &&... already has a meaning, that's the end of t=
he conversation. Backwards incompatible changes for this are probably a non=
-starter.</div><div><br></div><div>Indeed, the problem of fold expressions =
with post-fix operators like this is going to crop up with a lot of possibl=
e operators.</div></div><span>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a onmousedown=3D"this.href=3D'javascript:';return true;" o=
nclick=3D"this.href=3D'javascript:';return true;" href=3D"javascrip=
t:" target=3D"_blank" rel=3D"nofollow" gdf-obfuscated-mailto=3D"pKO-CnyZBgA=
J">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a onmousedown=3D"this.href=3D'jav=
ascript:';return true;" onclick=3D"this.href=3D'javascript:';re=
turn true;" href=3D"javascript:" target=3D"_blank" rel=3D"nofollow" gdf-obf=
uscated-mailto=3D"pKO-CnyZBgAJ">std-pr...@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a onmousedown=3D"this.href=3D'=
;https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8a6=
-4498-9aa6-f88e6af06506%40isocpp.org?utm_medium\x3demail\x26utm_source\x3df=
ooter';return true;" onclick=3D"this.href=3D'https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8a6-4498-9aa6-f88e6af06506=
%40isocpp.org?utm_medium\x3demail\x26utm_source\x3dfooter';return true;=
" href=3D"https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe=
7dc7-b8a6-4498-9aa6-f88e6af06506%40isocpp.org?utm_medium=3Demail&utm_so=
urce=3Dfooter" target=3D"_blank" rel=3D"nofollow">https://groups.google.com=
/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/70fe7dc7-b8a6-4498-<wbr>9aa6-=
f88e6af06506%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/0c4f8aa4-6b4f-4fe3-a02a-ef33eae990a8%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/0c4f8aa4-6b4f-4fe3-a02a-ef33eae990a8=
%40isocpp.org</a>.<br />
------=_Part_2980_1828175221.1527538827984--
------=_Part_2979_1624388691.1527538827983--
.
Author: Nicolas Lesser <blitzrakete@gmail.com>
Date: Mon, 28 May 2018 22:25:03 +0200
Raw View
--00000000000083b393056d49ee1e
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
That postfix && is problematic:
auto Value =3D Arg && (Foo =3D=3D 10 || Foo =3D=3D 11);
Today this would evaluate Arg and iff true see if Foo is 10 or 11 and store
that value in Value.
What would this code mean with your operator? Would it instead be
interpreted as a forwarded Arg called whether Foo is 10 or 11?
Would it be ambiguous? How do you want to disambiguate between the two
meanings?
On Mon, May 28, 2018 at 10:20 PM <mihailnajdenov@gmail.com> wrote:
>
>
> On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=A1per A=C5=BEman wrote=
:
>>
>> Nicol,
>>
>> I forsee a fight to distinguish the unary && from the binary && in fold
>>>> expressions, but otherwise...
>>>>
>>> I don't think there *is* an "otherwise" at that point. If &&... already
>>> has a meaning, that's the end of the conversation. Backwards incompatib=
le
>>> changes for this are probably a non-starter.
>>>
>>
>> The "otherwise" was not meant as "I see a possibility of changing the
>> meaning of existing syntax" :). I meant that (args&&)... might actually
>> still be possible. I do think it's iffy.
>>
>
> What the problem might be?
>
> auto c =3D a&& && b;
>
> template<class... T>
> auto sum(T&&... args) {
> return (args&& && ... && T{});
> }
>
> These will do what it's expected. They look a bit funny, but not *that*
> funny.
>
>
>> Everyone:
>>
>> I do think "forward" needs more love, and the intersection with move
>> might or might not make sense, I'm not decided at this point. Both sides=
of
>> the debate are valid, imo, and it really depends on the final syntax for=
*forward
>> *if extending it to move makes sense.
>>
>
> I am yet to hear any objections to merger outside the dropping of
> "exactly" in "know *exactly *what going on".
> That is tiny price to pay for the 4+1 pretty solid pros I have given,
> especially considering - *you have no decisions to make, based on that
> information*.
>
> And don't forget, you are an expert, you are using thins for 10 years, yo=
u
> feel at home and only annoyances stick up for you (with forward).
> But for a new user it is a different story. Essentially one less lesson t=
o
> learn.
>
>
>
>>
>> In fact, if the '&&' unary postifx worked, then std::move would *not* be
>> covered by it, as &&-collapsing rules would have to be obeyed, and an
>> lvalue with a &&-specifier decays into a reference. (& && -> &)
>>
>
> I do not understand your point. What reference collapsing has to do with
> an operator?
>
>
>>
>> ... if this nips postfix && in the bud, I'm fine with that :).
>>
>> Also, I meant =3D> as prefix. Postfix unary operators are *weird*.
>>
>
> The problem will be as in [x=3D=3D>y] it will visually represent, well,
> exactly the opposite :)
>
> As for the postfix - they are the solution to the problem, for 4 reasons.
>
> 1. The highest possible precedence which is AWAYS what you want here.
> 2. Keep the clean the lhs clean to not visually confuse on assignment and
> keep the rhs "dirty" as img&&.flipped() or func&&(args&&=E2=80=A6)To nice=
ly
> indicate "just before you make this call" notion
> 3. The are not common, so they do tend to draw attention.
> 4. The fact that the op is *after *the variable reinforces the reminder
> "this is end of line", "the variable was before me". I am ending it, do n=
ot
> use after me.
>
> As you can see all 4 apply to both move and forward equally. That is
> because, the fact that it is and-of-line is more important then what was =
in
> the train.
> It really is.
>
>
>>
>> G
>>
>>
>>
>> On Mon, May 28, 2018 at 6:40 PM, Nicol Bolas <jmck...@gmail.com> wrote:
>>
>>> On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per A=C5=BEman wro=
te:
>>>>
>>>> I forsee a fight to distinguish the unary && from the binary && in fol=
d
>>>> expressions, but otherwise...
>>>>
>>>
>>> I don't think there *is* an "otherwise" at that point. If &&... already
>>> has a meaning, that's the end of the conversation. Backwards incompatib=
le
>>> changes for this are probably a non-starter.
>>>
>>> Indeed, the problem of fold expressions with post-fix operators like
>>> this is going to crop up with a lot of possible operators.
>>>
>>> --
>>> 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-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit
>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b=
8a6-4498-9aa6-f88e6af06506%40isocpp.org
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-=
b8a6-4498-9aa6-f88e6af06506%40isocpp.org?utm_medium=3Demail&utm_source=3Dfo=
oter>
>>> .
>>>
>>
>> --
> 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/0c4f8aa4-6b4=
f-4fe3-a02a-ef33eae990a8%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/0c4f8aa4-6b=
4f-4fe3-a02a-ef33eae990a8%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
--=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/CALmDwq0FzcxOdmG2GtZRDO70X%3D1j9qEUnL-gqB66606vS=
U%3D_eQ%40mail.gmail.com.
--00000000000083b393056d49ee1e
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">That postfix && is problematic:<div><br></div><div=
>auto Value =3D Arg && (Foo =3D=3D 10 || Foo =3D=3D 11);</div><div>=
<br></div><div>Today this would evaluate Arg and iff true see if Foo is 10 =
or 11 and store that value in Value.</div><div><br></div><div>What would th=
is code mean with your operator? Would it instead be interpreted as a forwa=
rded Arg called whether Foo is 10 or 11?</div><div>Would it be ambiguous? H=
ow do you want to disambiguate between the two meanings?</div></div><br><di=
v class=3D"gmail_quote"><div dir=3D"ltr">On Mon, May 28, 2018 at 10:20 PM &=
lt;<a href=3D"mailto:mihailnajdenov@gmail.com">mihailnajdenov@gmail.com</a>=
> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 =
0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><b=
r>On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=A1per A=C5=BEman wrote=
:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Nicol,<div><br></=
div><div><span style=3D"color:rgb(80,0,80);font-family:arial,sans-serif;fon=
t-size:12.8px;font-style:normal;font-weight:400;letter-spacing:normal;text-=
align:start;text-indent:0px;text-transform:none;white-space:normal;word-spa=
cing:0px;background-color:rgb(255,255,255)"><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I fors=
ee a fight to distinguish the unary && from the binary && i=
n fold expressions, but otherwise...<br></blockquote><span style=3D"font-si=
ze:12.8px">I don't think there</span><span style=3D"font-size:12.8px">=
=C2=A0</span><i style=3D"font-size:12.8px">is</i><span style=3D"font-size:1=
2.8px">=C2=A0</span><span style=3D"font-size:12.8px">an "otherwise&quo=
t; at that point. If &&... already has a meaning, that's the en=
d of the conversation. Backwards incompatible changes for this are probably=
a non-starter.</span><br></blockquote></span><br></div><div>The "othe=
rwise" was not meant as "I see a possibility of changing the mean=
ing of existing syntax" :). I meant that (args&&)... might act=
ually still be possible. I do think it's iffy.</div></div></blockquote>=
<div><br></div><div>What the problem might be?</div><div><font face=3D"cour=
ier new,monospace"></font><br></div><div><font face=3D"courier new,monospac=
e">auto c =3D a&& && b;</font></div><div><font face=3D"cour=
ier new,monospace"></font><br></div><font face=3D"courier new,monospace">te=
mplate<class... T><br>auto sum(T&&... args) {<br>=C2=A0return=
(args&& && ... && T{});=C2=A0<br>}</font><div>=C2=
=A0</div><div>These will do what it's expected. They look a bit funny, =
but not <i>that</i> funny.=C2=A0</div><div><br></div><blockquote class=3D"g=
mail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>Everyone:</div><div>=
<br></div><div>I do think "forward" needs more love, and the inte=
rsection with move might or might not make sense, I'm not decided at th=
is point. Both sides of the debate are valid, imo, and it really depends on=
the final syntax for <i>forward </i>if extending it to move makes sense.</=
div></div></blockquote><div><br></div><div>I am yet to hear any objections =
to merger outside the dropping of "exactly" in "know <i>exac=
tly </i>what going on".=C2=A0</div><div>That is tiny price to pay for =
the 4+1 pretty solid pros I have given, especially considering - <i>you hav=
e no decisions to make, based on that information</i>.</div><div><br></div>=
<div>And don't forget, you are an expert, you are using thins for 10 ye=
ars, you feel at home and only annoyances stick up for you (with forward).<=
/div><div>But for a new user it is a different story. Essentially one less =
lesson to learn.=C2=A0<br></div><div><br></div><div>=C2=A0</div><blockquote=
class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px =
#ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>In fact, =
if the '&&' unary postifx worked, then std::move would *not=
* be covered by it, as &&-collapsing rules would have to be obeyed,=
and an lvalue with a &&-specifier decays into a reference. (& =
&& -> &)</div></div></blockquote><div><br></div><div>I do no=
t understand your point. What reference collapsing has to do with an operat=
or?</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin=
:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=
=3D"ltr"><div><br></div><div>... if this nips postfix && in the bud=
, I'm fine with that :).</div><div><br></div><div>Also, I meant =3D>=
as prefix. Postfix unary operators are *weird*.</div></div></blockquote><d=
iv><br></div><div>The problem will be as in [x=3D=3D>y] it will visually=
represent, well, exactly the opposite :)</div><div><br></div><div>As for t=
he postfix - they are the solution to the problem, for 4 reasons.</div><div=
><br></div><div>1. The highest possible precedence which is AWAYS what you =
want here.=C2=A0</div><div>2. Keep the clean the lhs clean to not visually =
confuse on assignment and keep the rhs "dirty" as<font face=3D"co=
urier new,monospace"> img&&.flipped()</font> or <font face=3D"couri=
er new,monospace">func&&(args&&=E2=80=A6)</font>To nicely i=
ndicate "just before you make this call" notion</div><div>3. The =
are not common, so they do tend to draw attention.</div><div>4. The fact th=
at the op is <i>after </i>the variable reinforces the reminder "this i=
s end of line", "the variable was before me". I am ending it=
, do not use after me.</div><div><br></div><div>As you can see all 4 apply =
to both move and forward equally. That is because, the fact that it is and-=
of-line is more important then what was in the train.=C2=A0</div><div>It re=
ally is.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"m=
argin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
dir=3D"ltr"><div><br></div><div>G</div><div><br></div><div><br></div></div=
><div><br><div class=3D"gmail_quote">On Mon, May 28, 2018 at 6:40 PM, Nicol=
Bolas <span dir=3D"ltr"><<a rel=3D"nofollow">jmck...@gmail.com</a>><=
/span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span>On M=
onday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per A=C5=BEman wrote:<bloc=
kquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I forsee a fight to dis=
tinguish the unary && from the binary && in fold expression=
s, but otherwise...</div></blockquote><div><br></div></span><div>I don'=
t think there <i>is</i> an "otherwise" at that point. If &&am=
p;... already has a meaning, that's the end of the conversation. Backwa=
rds incompatible changes for this are probably a non-starter.</div><div><br=
></div><div>Indeed, the problem of fold expressions with post-fix operators=
like this is going to crop up with a lot of possible operators.</div></div=
><span>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8a6-4498-9aa6-f88e6af06506%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" rel=3D"nofollow" t=
arget=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-proposa=
ls/70fe7dc7-b8a6-4498-9aa6-f88e6af06506%40isocpp.org</a>.<br>
</blockquote></div><br></div>
</blockquote></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">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/0c4f8aa4-6b4f-4fe3-a02a-ef33eae990a8%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/0c4f8aa4-6b4f-=
4fe3-a02a-ef33eae990a8%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CALmDwq0FzcxOdmG2GtZRDO70X%3D1j9qEUnL=
-gqB66606vSU%3D_eQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALmDwq0FzcxO=
dmG2GtZRDO70X%3D1j9qEUnL-gqB66606vSU%3D_eQ%40mail.gmail.com</a>.<br />
--00000000000083b393056d49ee1e--
.
Author: Richard Hodges <hodges.r@gmail.com>
Date: Tue, 29 May 2018 00:22:53 +0200
Raw View
--000000000000c08aac056d4b8fd3
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Anyone proposing adding another operator to c++ has clearly not recently
had to teach the language or maintain code.
forward (or give, or similar) should be a keyword. I know the committee
fears adding keywords, but this fear is unfounded. The constant
hoop-jumping merely to avoid the inevitable simply creates technical debt
which will impede design choices in the future.
On Mon, 28 May 2018 at 22:26, Nicolas Lesser <blitzrakete@gmail.com> wrote:
> That postfix && is problematic:
>
> auto Value =3D Arg && (Foo =3D=3D 10 || Foo =3D=3D 11);
>
> Today this would evaluate Arg and iff true see if Foo is 10 or 11 and
> store that value in Value.
>
> What would this code mean with your operator? Would it instead be
> interpreted as a forwarded Arg called whether Foo is 10 or 11?
> Would it be ambiguous? How do you want to disambiguate between the two
> meanings?
>
> On Mon, May 28, 2018 at 10:20 PM <mihailnajdenov@gmail.com> wrote:
>
>>
>>
>> On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=A1per A=C5=BEman wrot=
e:
>>>
>>> Nicol,
>>>
>>> I forsee a fight to distinguish the unary && from the binary && in fold
>>>>> expressions, but otherwise...
>>>>>
>>>> I don't think there *is* an "otherwise" at that point. If &&...
>>>> already has a meaning, that's the end of the conversation. Backwards
>>>> incompatible changes for this are probably a non-starter.
>>>>
>>>
>>> The "otherwise" was not meant as "I see a possibility of changing the
>>> meaning of existing syntax" :). I meant that (args&&)... might actually
>>> still be possible. I do think it's iffy.
>>>
>>
>> What the problem might be?
>>
>> auto c =3D a&& && b;
>>
>> template<class... T>
>> auto sum(T&&... args) {
>> return (args&& && ... && T{});
>> }
>>
>> These will do what it's expected. They look a bit funny, but not *that*
>> funny.
>>
>>
>>> Everyone:
>>>
>>> I do think "forward" needs more love, and the intersection with move
>>> might or might not make sense, I'm not decided at this point. Both side=
s of
>>> the debate are valid, imo, and it really depends on the final syntax fo=
r *forward
>>> *if extending it to move makes sense.
>>>
>>
>> I am yet to hear any objections to merger outside the dropping of
>> "exactly" in "know *exactly *what going on".
>> That is tiny price to pay for the 4+1 pretty solid pros I have given,
>> especially considering - *you have no decisions to make, based on that
>> information*.
>>
>> And don't forget, you are an expert, you are using thins for 10 years,
>> you feel at home and only annoyances stick up for you (with forward).
>> But for a new user it is a different story. Essentially one less lesson
>> to learn.
>>
>>
>>
>>>
>>> In fact, if the '&&' unary postifx worked, then std::move would *not* b=
e
>>> covered by it, as &&-collapsing rules would have to be obeyed, and an
>>> lvalue with a &&-specifier decays into a reference. (& && -> &)
>>>
>>
>> I do not understand your point. What reference collapsing has to do with
>> an operator?
>>
>>
>>>
>>> ... if this nips postfix && in the bud, I'm fine with that :).
>>>
>>> Also, I meant =3D> as prefix. Postfix unary operators are *weird*.
>>>
>>
>> The problem will be as in [x=3D=3D>y] it will visually represent, well,
>> exactly the opposite :)
>>
>> As for the postfix - they are the solution to the problem, for 4 reasons=
..
>>
>> 1. The highest possible precedence which is AWAYS what you want here.
>> 2. Keep the clean the lhs clean to not visually confuse on assignment an=
d
>> keep the rhs "dirty" as img&&.flipped() or func&&(args&&=E2=80=A6)To nic=
ely
>> indicate "just before you make this call" notion
>> 3. The are not common, so they do tend to draw attention.
>> 4. The fact that the op is *after *the variable reinforces the reminder
>> "this is end of line", "the variable was before me". I am ending it, do =
not
>> use after me.
>>
>> As you can see all 4 apply to both move and forward equally. That is
>> because, the fact that it is and-of-line is more important then what was=
in
>> the train.
>> It really is.
>>
>>
>>>
>>> G
>>>
>>>
>>>
>>> On Mon, May 28, 2018 at 6:40 PM, Nicol Bolas <jmck...@gmail.com> wrote:
>>>
>>>> On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per A=C5=BEman wr=
ote:
>>>>>
>>>>> I forsee a fight to distinguish the unary && from the binary && in
>>>>> fold expressions, but otherwise...
>>>>>
>>>>
>>>> I don't think there *is* an "otherwise" at that point. If &&...
>>>> already has a meaning, that's the end of the conversation. Backwards
>>>> incompatible changes for this are probably a non-starter.
>>>>
>>>> Indeed, the problem of fold expressions with post-fix operators like
>>>> this is going to crop up with a lot of possible operators.
>>>>
>>>> --
>>>> 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-proposal...@isocpp.org.
>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-=
b8a6-4498-9aa6-f88e6af06506%40isocpp.org
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/70fe7dc7=
-b8a6-4498-9aa6-f88e6af06506%40isocpp.org?utm_medium=3Demail&utm_source=3Df=
ooter>
>>>> .
>>>>
>>>
>>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> 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/0c4f8aa4-6b=
4f-4fe3-a02a-ef33eae990a8%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/0c4f8aa4-6=
b4f-4fe3-a02a-ef33eae990a8%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
> --
> 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/CALmDwq0Fzcx=
OdmG2GtZRDO70X%3D1j9qEUnL-gqB66606vSU%3D_eQ%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALmDwq0Fzc=
xOdmG2GtZRDO70X%3D1j9qEUnL-gqB66606vSU%3D_eQ%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
--=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/CALvx3hYcWKh-_1t298oPx7xThDaHab5Dy354vzCwTdswBnM=
JoA%40mail.gmail.com.
--000000000000c08aac056d4b8fd3
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Anyone proposing adding another operator to c++ has clearl=
y not recently had to teach the language or maintain code.<div><br></div><d=
iv><font face=3D"monospace, monospace">forward</font> (or <font face=3D"mon=
ospace, monospace">give</font>, or similar) should be a keyword. I know the=
committee fears adding keywords, but this fear is unfounded. The constant =
hoop-jumping merely to avoid the inevitable simply creates technical debt w=
hich will impede design choices in the future.</div><div><br></div><div><br=
></div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Mon, 28 May=
2018 at 22:26, Nicolas Lesser <<a href=3D"mailto:blitzrakete@gmail.com"=
>blitzrakete@gmail.com</a>> wrote:<br></div><blockquote class=3D"gmail_q=
uote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1e=
x"><div dir=3D"ltr">That postfix && is problematic:<div><br></div><=
div>auto Value =3D Arg && (Foo =3D=3D 10 || Foo =3D=3D 11);</div><d=
iv><br></div><div>Today this would evaluate Arg and iff true see if Foo is =
10 or 11 and store that value in Value.</div><div><br></div><div>What would=
this code mean with your operator? Would it instead be interpreted as a fo=
rwarded Arg called whether Foo is 10 or 11?</div><div>Would it be ambiguous=
? How do you want to disambiguate between the two meanings?</div></div><br>=
<div class=3D"gmail_quote"><div dir=3D"ltr">On Mon, May 28, 2018 at 10:20 P=
M <<a href=3D"mailto:mihailnajdenov@gmail.com" target=3D"_blank">mihailn=
ajdenov@gmail.com</a>> wrote:<br></div><blockquote class=3D"gmail_quote"=
style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><d=
iv dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=
=A1per A=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0=
;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr">Nicol,<div><br></div><div><span style=3D"color:rgb(80,0,80);font-fami=
ly:arial,sans-serif;font-size:12.8px;font-style:normal;font-weight:400;lett=
er-spacing:normal;text-align:start;text-indent:0px;text-transform:none;whit=
e-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><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"><blockquote class=3D"gmail_quote"=
style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex">I forsee a fight to distinguish the unary && from =
the binary && in fold expressions, but otherwise...<br></blockquote=
><span style=3D"font-size:12.8px">I don't think there</span><span style=
=3D"font-size:12.8px">=C2=A0</span><i style=3D"font-size:12.8px">is</i><spa=
n style=3D"font-size:12.8px">=C2=A0</span><span style=3D"font-size:12.8px">=
an "otherwise" at that point. If &&... already has a mean=
ing, that's the end of the conversation. Backwards incompatible changes=
for this are probably a non-starter.</span><br></blockquote></span><br></d=
iv><div>The "otherwise" was not meant as "I see a possibilit=
y of changing the meaning of existing syntax" :). I meant that (args&a=
mp;&)... might actually still be possible. I do think it's iffy.</d=
iv></div></blockquote><div><br></div><div>What the problem might be?</div><=
div><font face=3D"courier new,monospace"></font><br></div><div><font face=
=3D"courier new,monospace">auto c =3D a&& && b;</font></div=
><div><font face=3D"courier new,monospace"></font><br></div><font face=3D"c=
ourier new,monospace">template<class... T><br>auto sum(T&&...=
args) {<br>=C2=A0return (args&& && ... && T{});=C2=
=A0<br>}</font><div>=C2=A0</div><div>These will do what it's expected. =
They look a bit funny, but not <i>that</i> funny.=C2=A0</div><div><br></div=
><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><d=
iv>Everyone:</div><div><br></div><div>I do think "forward" needs =
more love, and the intersection with move might or might not make sense, I&=
#39;m not decided at this point. Both sides of the debate are valid, imo, a=
nd it really depends on the final syntax for <i>forward </i>if extending it=
to move makes sense.</div></div></blockquote><div><br></div><div>I am yet =
to hear any objections to merger outside the dropping of "exactly"=
; in "know <i>exactly </i>what going on".=C2=A0</div><div>That is=
tiny price to pay for the 4+1 pretty solid pros I have given, especially c=
onsidering - <i>you have no decisions to make, based on that information</i=
>.</div><div><br></div><div>And don't forget, you are an expert, you ar=
e using thins for 10 years, you feel at home and only annoyances stick up f=
or you (with forward).</div><div>But for a new user it is a different story=
.. Essentially one less lesson to learn.=C2=A0<br></div><div><br></div><div>=
=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left=
:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><=
br></div><div>In fact, if the '&&' unary postifx worked, th=
en std::move would *not* be covered by it, as &&-collapsing rules w=
ould have to be obeyed, and an lvalue with a &&-specifier decays in=
to a reference. (& && -> &)</div></div></blockquote><div=
><br></div><div>I do not understand your point. What reference collapsing h=
as to do with an operator?</div><div>=C2=A0</div><blockquote class=3D"gmail=
_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><div dir=3D"ltr"><div><br></div><div>... if this nips postfix=
&& in the bud, I'm fine with that :).</div><div><br></div><div=
>Also, I meant =3D> as prefix. Postfix unary operators are *weird*.</div=
></div></blockquote><div><br></div><div>The problem will be as in [x=3D=3D&=
gt;y] it will visually represent, well, exactly the opposite :)</div><div><=
br></div><div>As for the postfix - they are the solution to the problem, fo=
r 4 reasons.</div><div><br></div><div>1. The highest possible precedence wh=
ich is AWAYS what you want here.=C2=A0</div><div>2. Keep the clean the lhs =
clean to not visually confuse on assignment and keep the rhs "dirty&qu=
ot; as<font face=3D"courier new,monospace"> img&&.flipped()</font> =
or <font face=3D"courier new,monospace">func&&(args&&=E2=80=
=A6)</font>To nicely indicate "just before you make this call" no=
tion</div><div>3. The are not common, so they do tend to draw attention.</d=
iv><div>4. The fact that the op is <i>after </i>the variable reinforces the=
reminder "this is end of line", "the variable was before me=
". I am ending it, do not use after me.</div><div><br></div><div>As yo=
u can see all 4 apply to both move and forward equally. That is because, th=
e fact that it is and-of-line is more important then what was in the train.=
=C2=A0</div><div>It really is.</div><div>=C2=A0</div><blockquote class=3D"g=
mail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>G</div><div><br></di=
v><div><br></div></div><div><br><div class=3D"gmail_quote">On Mon, May 28, =
2018 at 6:40 PM, Nicol Bolas <span dir=3D"ltr"><<a rel=3D"nofollow">jmck=
....@gmail.com</a>></span> wrote:<br><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"><span>On Monday, May 28, 2018 at 1:11:42 PM UTC-4, Ga=C5=A1per =
A=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin=
-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I=
forsee a fight to distinguish the unary && from the binary &&a=
mp; in fold expressions, but otherwise...</div></blockquote><div><br></div>=
</span><div>I don't think there <i>is</i> an "otherwise" at t=
hat point. If &&... already has a meaning, that's the end of th=
e conversation. Backwards incompatible changes for this are probably a non-=
starter.</div><div><br></div><div>Indeed, the problem of fold expressions w=
ith post-fix operators like this is going to crop up with a lot of possible=
operators.</div></div><span>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/70fe7dc7-b8a6-4498-9aa6-f88e6af06506%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" rel=3D"nofollow" t=
arget=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-proposa=
ls/70fe7dc7-b8a6-4498-9aa6-f88e6af06506%40isocpp.org</a>.<br>
</blockquote></div><br></div>
</blockquote></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">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/0c4f8aa4-6b4f-4fe3-a02a-ef33eae990a8%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/0c4f8aa4-6b4f-=
4fe3-a02a-ef33eae990a8%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">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/CALmDwq0FzcxOdmG2GtZRDO70X%3D1j9qEUnL=
-gqB66606vSU%3D_eQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoo=
ter" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-p=
roposals/CALmDwq0FzcxOdmG2GtZRDO70X%3D1j9qEUnL-gqB66606vSU%3D_eQ%40mail.gma=
il.com</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CALvx3hYcWKh-_1t298oPx7xThDaHab5Dy354=
vzCwTdswBnMJoA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALvx3hYcWKh-_1t2=
98oPx7xThDaHab5Dy354vzCwTdswBnMJoA%40mail.gmail.com</a>.<br />
--000000000000c08aac056d4b8fd3--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 28 May 2018 17:32:10 -0700 (PDT)
Raw View
------=_Part_34971_1555050251.1527553930346
Content-Type: multipart/alternative;
boundary="----=_Part_34972_1762859925.1527553930347"
------=_Part_34972_1762859925.1527553930347
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Monday, May 28, 2018 at 4:20:28 PM UTC-4, mihailn...@gmail.com wrote:
>
>
>
> On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=A1per A=C5=BEman wrote=
:
>>
>> Nicol,
>>
>> I forsee a fight to distinguish the unary && from the binary && in fold=
=20
>>>> expressions, but otherwise...
>>>>
>>> I don't think there *is* an "otherwise" at that point. If &&... already=
=20
>>> has a meaning, that's the end of the conversation. Backwards incompatib=
le=20
>>> changes for this are probably a non-starter.
>>>
>>
>> The "otherwise" was not meant as "I see a possibility of changing the=20
>> meaning of existing syntax" :). I meant that (args&&)... might actually=
=20
>> still be possible. I do think it's iffy.
>>
>
> What the problem might be?
>
> auto c =3D a&& && b;
>
> template<class... T>
> auto sum(T&&... args) {
> return (args&& && ... && T{});=20
> }
> =20
> These will do what it's expected.
>
Backwards compatibility is *not* about the ability to write correct code=20
now. It's the ability for previously correct code to *remain correct*.
`args && ...` is a fold expression. What you want will no longer make it so=
..
That's bad.
Also, it is impossible for you to write the equivalent of that fold=20
expression under your syntax. You can write the equivalent of=20
`std::forward<decltype(args)>(args) && ...`. But you can't actually do the=
=20
fold without forwarding. And that may not be what you want.
That's worse.
Post-fix operators that can be currently used in fold expressions are a=20
non-starter. Prefix operators that can currently be used in fold=20
expressions are a non-starter.
--=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/285d0120-bf49-4b98-9ebd-8ec71c3f275a%40isocpp.or=
g.
------=_Part_34972_1762859925.1527553930347
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 4:20:28 PM UTC-4, mihai=
ln...@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><br><br>On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=A1per A=
=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-=
left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Ni=
col,<div><br></div><div><span style=3D"color:rgb(80,0,80);font-family:arial=
,sans-serif;font-size:12.8px;font-style:normal;font-weight:400;letter-spaci=
ng:normal;text-align:start;text-indent:0px;text-transform:none;white-space:=
normal;word-spacing:0px;background-color:rgb(255,255,255)"><blockquote clas=
s=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid r=
gb(204,204,204);padding-left:1ex"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">I forsee a fight to distinguish the unary && from the bi=
nary && in fold expressions, but otherwise...<br></blockquote><span=
style=3D"font-size:12.8px">I don't think there</span><span style=3D"fo=
nt-size:12.8px">=C2=A0</span><i style=3D"font-size:12.8px">is</i><span styl=
e=3D"font-size:12.8px">=C2=A0</span><span style=3D"font-size:12.8px">an &qu=
ot;otherwise" at that point. If &&... already has a meaning, t=
hat's the end of the conversation. Backwards incompatible changes for t=
his are probably a non-starter.</span><br></blockquote></span><br></div><di=
v>The "otherwise" was not meant as "I see a possibility of c=
hanging the meaning of existing syntax" :). I meant that (args&&am=
p;)... might actually still be possible. I do think it's iffy.</div></d=
iv></blockquote><div><br></div><div>What the problem might be?</div><div><f=
ont face=3D"courier new,monospace"></font><br></div><div><font face=3D"cour=
ier new,monospace">auto c =3D a&& && b;</font></div><div><f=
ont face=3D"courier new,monospace"></font><br></div><font face=3D"courier n=
ew,monospace">template<class... T><br>auto sum(T&&... args) {=
<br>=C2=A0return (args&& && ... && T{});=C2=A0<br>}=
</font><div>=C2=A0</div><div>These will do what it's expected.</div></d=
iv></blockquote><div><br></div><div>Backwards compatibility is <i>not</i> a=
bout the ability to write correct code now. It's the ability for previo=
usly correct code to <i>remain correct</i>.</div><div><br></div><div>`args =
&& ...` is a fold expression. What you want will no longer make it =
so.</div><br><div>That's bad.</div><div><br></div><div>Also, it is impo=
ssible for you to write the equivalent of that fold expression under your s=
yntax. You can write the equivalent of `std::forward<decltype(args)>(=
args) && ...`. But you can't actually do the fold without forwa=
rding. And that may not be what you want.</div><div><br></div><div>That'=
;s worse.</div><div><br></div><div>Post-fix operators that can be currently=
used in fold expressions are a non-starter. Prefix operators that can curr=
ently be used in fold expressions are a non-starter.</div><br></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/285d0120-bf49-4b98-9ebd-8ec71c3f275a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/285d0120-bf49-4b98-9ebd-8ec71c3f275a=
%40isocpp.org</a>.<br />
------=_Part_34972_1762859925.1527553930347--
------=_Part_34971_1555050251.1527553930346--
.
Author: mihailnajdenov@gmail.com
Date: Mon, 28 May 2018 23:06:21 -0700 (PDT)
Raw View
------=_Part_36272_1107401589.1527573981928
Content-Type: multipart/alternative;
boundary="----=_Part_36273_776154330.1527573981929"
------=_Part_36273_776154330.1527573981929
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
@Richard=20
A keyword will not be a good solution for move, not better enough then the=
=20
current one. I care for move as much as forward.
I also feel keywords are dead-end in C++ simply by looking to many if not=
=20
all newly introduced - decltype, nullptr, co_await, constexpr, reflectexpr?=
=20
I know the reasons behind all these, but that do not change the fact I=20
don't like them. =20
@Nicolas and Nicol=20
You are right, I have been a bit too optimistic, but that's normal I guess.
Thanks for pointing this *obvious* issue. Guess it was too good to be=20
true/possible.
In any case - there are plenty of other options. That was just the best in=
=20
general. I will throw at you a bunch more by the end of the day.
Thanks again!
On Tuesday, May 29, 2018 at 3:32:10 AM UTC+3, Nicol Bolas wrote:
>
>
>
> On Monday, May 28, 2018 at 4:20:28 PM UTC-4, mihailn...@gmail.com wrote:
>>
>>
>>
>> On Monday, May 28, 2018 at 8:50:41 PM UTC+3, Ga=C5=A1per A=C5=BEman wrot=
e:
>>>
>>> Nicol,
>>>
>>> I forsee a fight to distinguish the unary && from the binary && in fold=
=20
>>>>> expressions, but otherwise...
>>>>>
>>>> I don't think there *is* an "otherwise" at that point. If &&...=20
>>>> already has a meaning, that's the end of the conversation. Backwards=
=20
>>>> incompatible changes for this are probably a non-starter.
>>>>
>>>
>>> The "otherwise" was not meant as "I see a possibility of changing the=
=20
>>> meaning of existing syntax" :). I meant that (args&&)... might actually=
=20
>>> still be possible. I do think it's iffy.
>>>
>>
>> What the problem might be?
>>
>> auto c =3D a&& && b;
>>
>> template<class... T>
>> auto sum(T&&... args) {
>> return (args&& && ... && T{});=20
>> }
>> =20
>> These will do what it's expected.
>>
>
> Backwards compatibility is *not* about the ability to write correct code=
=20
> now. It's the ability for previously correct code to *remain correct*.
>
> `args && ...` is a fold expression. What you want will no longer make it=
=20
> so.
>
> That's bad.
>
> Also, it is impossible for you to write the equivalent of that fold=20
> expression under your syntax. You can write the equivalent of=20
> `std::forward<decltype(args)>(args) && ...`. But you can't actually do th=
e=20
> fold without forwarding. And that may not be what you want.
>
> That's worse.
>
> Post-fix operators that can be currently used in fold expressions are a=
=20
> non-starter. Prefix operators that can currently be used in fold=20
> expressions are a non-starter.
>
>
--=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/4eb665e1-97fa-4e1a-93e5-e446b5145866%40isocpp.or=
g.
------=_Part_36273_776154330.1527573981929
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>@Richard=C2=A0</div><div><br></div><div>A keyword wil=
l not be a good solution for move, not better enough then the current one. =
I care for move as much as forward.</div><div><br></div><div>I also feel ke=
ywords are dead-end in C++ simply by looking to many if not all newly intro=
duced - decltype, nullptr, co_await, constexpr, reflectexpr?=C2=A0<br></div=
><div>I know the reasons behind all these, but that do not change the fact =
I don't like them. =C2=A0<br></div><div><br></div><div>@Nicolas and Nic=
ol=C2=A0</div><div><br></div><div>You are right, I have been a bit too opti=
mistic, but that's normal I guess.</div><div>Thanks for pointing this <=
i>obvious</i> issue. Guess it was too good to be true/possible.</div><div><=
br></div><div>In any case - there are plenty of other options. That was jus=
t the best in general. I will throw at you a bunch more by the end of the d=
ay.</div><div><br></div><div>Thanks again!</div><br>On Tuesday, May 29, 201=
8 at 3:32:10 AM UTC+3, Nicol Bolas wrote:<blockquote class=3D"gmail_quote" =
style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-l=
eft: 1ex;"><div dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 4:20:28 PM U=
TC-4, <a>mihailn...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:=
1ex"><div dir=3D"ltr"><br><br>On Monday, May 28, 2018 at 8:50:41 PM UTC+3, =
Ga=C5=A1per A=C5=BEman wrote:<blockquote class=3D"gmail_quote" style=3D"mar=
gin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">Nicol,<div><br></div><div><span style=3D"color:rgb(80,0,80);font=
-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-weight:400=
;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none=
;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex"><blockquote class=3D"gmail_q=
uote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2=
04);padding-left:1ex">I forsee a fight to distinguish the unary && =
from the binary && in fold expressions, but otherwise...<br></block=
quote><span style=3D"font-size:12.8px">I don't think there</span><span =
style=3D"font-size:12.8px">=C2=A0</span><i style=3D"font-size:12.8px">is</i=
><span style=3D"font-size:12.8px">=C2=A0</span><span style=3D"font-size:12.=
8px">an "otherwise" at that point. If &&... already has a=
meaning, that's the end of the conversation. Backwards incompatible ch=
anges for this are probably a non-starter.</span><br></blockquote></span><b=
r></div><div>The "otherwise" was not meant as "I see a possi=
bility of changing the meaning of existing syntax" :). I meant that (a=
rgs&&)... might actually still be possible. I do think it's iff=
y.</div></div></blockquote><div><br></div><div>What the problem might be?</=
div><div><font face=3D"courier new,monospace"></font><br></div><div><font f=
ace=3D"courier new,monospace">auto c =3D a&& && b;</font></=
div><div><font face=3D"courier new,monospace"></font><br></div><font face=
=3D"courier new,monospace">template<class... T><br>auto sum(T&&am=
p;... args) {<br>=C2=A0return (args&& && ... && T{}=
);=C2=A0<br>}</font><div>=C2=A0</div><div>These will do what it's expec=
ted.</div></div></blockquote><div><br></div><div>Backwards compatibility is=
<i>not</i> about the ability to write correct code now. It's the abili=
ty for previously correct code to <i>remain correct</i>.</div><div><br></di=
v><div>`args && ...` is a fold expression. What you want will no lo=
nger make it so.</div><br><div>That's bad.</div><div><br></div><div>Als=
o, it is impossible for you to write the equivalent of that fold expression=
under your syntax. You can write the equivalent of `std::forward<declty=
pe(args)>(<wbr>args) && ...`. But you can't actually do the =
fold without forwarding. And that may not be what you want.</div><div><br><=
/div><div>That's worse.</div><div><br></div><div>Post-fix operators tha=
t can be currently used in fold expressions are a non-starter. Prefix opera=
tors that can currently be used in fold expressions are a non-starter.</div=
><br></div></blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/4eb665e1-97fa-4e1a-93e5-e446b5145866%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/4eb665e1-97fa-4e1a-93e5-e446b5145866=
%40isocpp.org</a>.<br />
------=_Part_36273_776154330.1527573981929--
------=_Part_36272_1107401589.1527573981928--
.
Author: mihailnajdenov@gmail.com
Date: Tue, 29 May 2018 11:42:25 -0700 (PDT)
Raw View
------=_Part_39833_623197363.1527619345679
Content-Type: multipart/alternative;
boundary="----=_Part_39834_173156941.1527619345680"
------=_Part_39834_173156941.1527619345680
Content-Type: text/plain; charset="UTF-8"
On Tuesday, May 29, 2018 at 9:06:22 AM UTC+3, mihailn...@gmail.com wrote:
>
> @Richard
>
> A keyword will not be a good solution for move, not better enough then the
> current one. I care for move as much as forward.
>
> I also feel keywords are dead-end in C++ simply by looking to many if not
> all newly introduced - decltype, nullptr, co_await, constexpr, reflectexpr?
> I know the reasons behind all these, but that do not change the fact I
> don't like them.
>
> @Nicolas and Nicol
>
> You are right, I have been a bit too optimistic, but that's normal I guess.
> Thanks for pointing this *obvious* issue. Guess it was too good to be
> true/possible.
>
> In any case - there are plenty of other options. That was just the best in
> general. I will throw at you a bunch more by the end of the day.
>
> Thanks again!
>
Ok, here's the thing.
*Variant A*
My original idea was to combine the && which already represents *both* rval
refs and frw refs with,
well the most logical, an arrow to represent *both* the move and forward
part.
template <class F, class... Args>
auto delay_invoke(F&& f, Args&&... args)
{
return [f=f&&>, args = args&&>...]() -> decltype(auto)
{
return std::invoke(f, args...);
};
}
auto cally = [img = img&&>](auto&& func, auto&&... args)
{
img&&>.flipped();
return func&&>(args&&>...);
};
And because that's a bit heavy I tried to optimize it visually, falling
into a trap.
*Pro:*
- Quite clear and explicit of what it does on what - forward/move the
type&& variable, whatever 'type' is, deduced or not.
*Cons:*
- A tad heavy.
- The &&> *mental image* is already used in code as in static_cast<type&&>
for instance
Variant A1
We can use lighter &> variant, but the loss of the && relation is not a
good tradeoff.
Also, the second downside still stands.
Variant B
Well, the => is still on table, but as postscript.
auto cally = [img = img=>](auto&& func, auto&&... args)
{
img=>.flipped();
return func=>(args=>...);
};
Not bad.
Visual confusion might arise as in
if(img=>.flipped())
vs
if(img>=flipped())
vs
if(img<=flipped())
img=(a | b);
vs
img=>(a | b);
Not sure if that would be much of a problem
*Pros*
- Clear move/forward visual notation. Quite distinct visually.
*Cons*
- Both assignment and compare use some or all the symbols in different
locations.
-! Too "pretty" and too general, we might want to use it in a different
context, it might have better uses!
Variant C
That might come to a surprise but a postscript tide ~ is reasonable option
as well.
If we remember, the object must not be used after the call, well the tide
resembles a dtor call - it will trigger a mental warning
auto cally = [img = img~](auto&& func, auto&&... args)
{
img~.flipped();
return func~(args~...);
};
Because the dtor is rarely called explicitly the scenario image~.image();
vs image.~image(); will not come often.
An alternative is to use double ~~.
auto cally = [img = img~~](auto&& func, auto&&... args)
{
img~~.flipped();
return func~~(args~~...);
};
*Pros:*
- Quite distinct
- Triggers a mental warning, reminding us, the object is gone - a visual
relation to end-of-line.
*Cons:*
- A bit arbitrary on first glance, no visual relation to either
move/forward or a && type. (Except the repletion of symbols in the double
variant)
-! There is tide prefix tide operator which has a different meaning. This
creates odd asymmetry, probably only the double tide is a good option!
Variant D
We can ~&& combining A and C in away. Sadly &&~ cannot be used as it is
well defined in a && ~b
auto cally = [img = img~&&](auto&& func, auto&&... args)
{
img~&&.flipped();
return func~&&(args~&&...);
};
*Pros*
- Strong notion for both && type and end-of-line.
*Cons*
- Heavy and odd, one might argue noisy as well.
*Other options*
val~>
Problem is, it is way to similar to ->.
val:>
Odd and arbitrary
That's it. Comments (and alternatives) are welcome.
--
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/3246d246-296a-4019-a336-90a9f4a18474%40isocpp.org.
------=_Part_39834_173156941.1527619345680
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Tuesday, May 29, 2018 at 9:06:22 AM UTC+3, miha=
iln...@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0=
;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div di=
r=3D"ltr"><div>@Richard=C2=A0</div><div><br></div><div>A keyword will not b=
e a good solution for move, not better enough then the current one. I care =
for move as much as forward.</div><div><br></div><div>I also feel keywords =
are dead-end in C++ simply by looking to many if not all newly introduced -=
decltype, nullptr, co_await, constexpr, reflectexpr?=C2=A0<br></div><div>I=
know the reasons behind all these, but that do not change the fact I don&#=
39;t like them. =C2=A0<br></div><div><br></div><div>@Nicolas and Nicol=C2=
=A0</div><div><br></div><div>You are right, I have been a bit too optimisti=
c, but that's normal I guess.</div><div>Thanks for pointing this <i>obv=
ious</i> issue. Guess it was too good to be true/possible.</div><div><br></=
div><div>In any case - there are plenty of other options. That was just the=
best in general. I will throw at you a bunch more by the end of the day.</=
div><div><br></div><div>Thanks again!</div></div></blockquote><div><br></di=
v><div>Ok, here's the thing.</div><div><br></div><div><b>Variant A</b><=
/div><div><b></b><br></div><div>My original idea was to combine the &&a=
mp; which already represents <i>both</i> rval refs and frw refs with,</div>=
<div>=C2=A0well the most logical, an arrow to represent <i>both</i> the mov=
e and forward part.</div><div><br></div><div><br></div><div><div style=3D"b=
ackground-color: transparent; border-bottom-color: rgb(34, 34, 34); border-=
bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; borde=
r-image-repeat: stretch; border-image-slice: 100%; border-image-source: non=
e; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-s=
tyle: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bo=
rder-right-style: none; border-right-width: 0px; border-top-color: rgb(34, =
34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, =
34); font-family: &quot;Arial&quot;,&quot;Helvetica&quot;,s=
ans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-=
weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; =
margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; paddin=
g-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-d=
ecoration: none; text-indent: 0px; text-transform: none; -webkit-text-strok=
e-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"courie=
r new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bott=
om-style: none; border-bottom-width: 0px; border-image-outset: 0; border-im=
age-repeat: stretch; border-image-slice: 100%; border-image-source: none; b=
order-image-width: 1; 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; mar=
gin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; pad=
ding-left: 0px; padding-right: 0px; padding-top: 0px;">template <class F=
, class... Args><br style=3D"border-bottom-color: rgb(34, 34, 34); borde=
r-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; bor=
der-image-repeat: stretch; border-image-slice: 100%; border-image-source: n=
one; border-image-width: 1; 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: 0p=
x; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0p=
x; padding-left: 0px; padding-right: 0px; padding-top: 0px;">auto delay_inv=
oke(F&& f, Args&&... args)</font></div><div style=3D"backgr=
ound-color: transparent; border-bottom-color: rgb(34, 34, 34); border-botto=
m-style: none; border-bottom-width: 0px; border-image-outset: 0; border-ima=
ge-repeat: stretch; border-image-slice: 100%; border-image-source: none; bo=
rder-image-width: 1; 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, 3=
4); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); =
font-family: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-s=
erif; font-size: 13px; font-style: normal; font-variant: normal; font-weigh=
t: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margi=
n-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-lef=
t: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decora=
tion: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-wid=
th: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"courier new=
,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-st=
yle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-r=
epeat: stretch; border-image-slice: 100%; border-image-source: none; border=
-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: non=
e; 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-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;">{<br style=3D"border-bott=
om-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: =
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sli=
ce: 100%; border-image-source: none; border-image-width: 1; border-left-col=
or: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; borde=
r-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-t=
op-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; mar=
gin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; p=
adding-top: 0px;"><div style=3D"border-bottom-color: rgb(34, 34, 34); borde=
r-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; bor=
der-image-repeat: stretch; border-image-slice: 100%; border-image-source: n=
one; border-image-width: 1; 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: 0p=
x; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0p=
x; padding-left: 0px; padding-right: 0px; padding-top: 0px;">=C2=A0 return =
[f=3Df&&>, args =3D args&&>...]() -> decltype(auto=
)=C2=A0</div><div style=3D"border-bottom-color: rgb(34, 34, 34); border-bot=
tom-style: none; border-bottom-width: 0px; border-image-outset: 0; border-i=
mage-repeat: stretch; border-image-slice: 100%; border-image-source: none; =
border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-styl=
e: 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); border-top-style: none; border-top-width: 0px; margin-bottom: 0px; ma=
rgin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; pa=
dding-left: 0px; padding-right: 0px; padding-top: 0px;">=C2=A0 {=C2=A0<br s=
tyle=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; bo=
rder-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretc=
h; border-image-slice: 100%; border-image-source: none; border-image-width:=
1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-lef=
t-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-st=
yle: none; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; mar=
gin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; pa=
dding-right: 0px; padding-top: 0px;"></div>=C2=A0 =C2=A0 return std::invoke=
(f, args...);<br style=3D"border-bottom-color: rgb(34, 34, 34); border-bott=
om-style: none; border-bottom-width: 0px; border-image-outset: 0; border-im=
age-repeat: stretch; border-image-slice: 100%; border-image-source: none; b=
order-image-width: 1; 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; mar=
gin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; pad=
ding-left: 0px; padding-right: 0px; padding-top: 0px;">=C2=A0 }; <br=
style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; =
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stre=
tch; border-image-slice: 100%; border-image-source: none; border-image-widt=
h: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-l=
eft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: no=
ne; 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; m=
argin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; =
padding-right: 0px; padding-top: 0px;">}</font></div><div style=3D"backgrou=
nd-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-=
style: none; border-bottom-width: 0px; border-image-outset: 0; border-image=
-repeat: stretch; border-image-slice: 100%; border-image-source: none; bord=
er-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: n=
one; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-ri=
ght-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34)=
; border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); fo=
nt-family: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-ser=
if; font-size: 13px; font-style: normal; font-variant: normal; font-weight:=
400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-=
right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left:=
0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decorati=
on: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width=
: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"courier new,m=
onospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-styl=
e: none; border-bottom-width: 0px; border-image-outset: 0; border-image-rep=
eat: stretch; border-image-slice: 100%; border-image-source: none; border-i=
mage-width: 1; 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); bo=
rder-top-style: none; border-top-width: 0px; margin-bottom: 0px; margin-lef=
t: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-le=
ft: 0px; padding-right: 0px; padding-top: 0px;"><br></font></div><div style=
=3D"margin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: n=
one; text-align: left; color: rgb(34, 34, 34); text-transform: none; text-i=
ndent: 0px; letter-spacing: normal; font-size: 13px; font-variant: normal; =
word-spacing: 0px; white-space: normal; orphans: 2; -webkit-text-stroke-wid=
th: 0px; background-color: transparent;"><font face=3D"courier new,monospac=
e" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none=
; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: st=
retch; border-image-slice: 100%; border-image-source: none; border-image-wi=
dth: 1; 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-to=
p-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;"><div style=3D"background-color: tr=
ansparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none;=
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: str=
etch; border-image-slice: 100%; border-image-source: none; border-image-wid=
th: 1; 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: n=
one; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top=
-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &=
amp;quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-siz=
e: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter=
-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; =
margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; paddin=
g-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; te=
xt-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white=
-space: normal; word-spacing: 0px;"><br style=3D"background-attachment: scr=
oll; background-clip: border-box; background-color: transparent; background=
-image: none; background-origin: padding-box; background-position-x: 0%; ba=
ckground-position-y: 0%; background-repeat: repeat; background-size: auto; =
border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bot=
tom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; borde=
r-image-slice: 100%; border-image-source: none; border-image-width: 1; bord=
er-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: non=
e; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Ar=
ial&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; he=
ight: auto; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin=
-top: 0px; min-width: 0px; overflow: visible; overflow-x: visible; overflow=
-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pa=
dding-top: 0px;"></div><div style=3D"background-color: transparent; border-=
bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wid=
th: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image=
-slice: 100%; border-image-source: none; border-image-width: 1; border-left=
-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; b=
order-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; bord=
er-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&=
;quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-styl=
e: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; =
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; o=
rphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padd=
ing-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; te=
xt-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wo=
rd-spacing: 0px;"><div style=3D"background-color: transparent; border-botto=
m-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0=
px; border-image-outset: 0; border-image-repeat: stretch; border-image-slic=
e: 100%; border-image-source: none; border-image-width: 1; border-left-colo=
r: 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-to=
p-width: 0px; color: rgb(34, 34, 34); font-family: courier new,monospace; f=
ont-size: 13px; font-style: normal; font-variant: normal; font-weight: 400;=
letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right=
: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px;=
padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: n=
one; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px=
; white-space: normal; word-spacing: 0px;"><font face=3D"courier new,monosp=
ace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-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: 0p=
x; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0=
px; padding-right: 0px; padding-top: 0px;">auto cally =3D [img =3D img&=
&>](auto&& func, auto&&... args)=C2=A0</font></div><=
div style=3D"background-color: transparent; border-bottom-color: rgb(34, 34=
, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-ou=
tset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-ima=
ge-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34);=
border-left-style: none; border-left-width: 0px; border-right-color: rgb(3=
4, 34, 34); border-right-style: none; border-right-width: 0px; border-top-c=
olor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color=
: rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; fon=
t-style: normal; font-variant: normal; font-weight: 400; letter-spacing: no=
rmal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: =
0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px=
; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0=
px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: norm=
al; word-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; 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-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: =
0px; padding-top: 0px;">{</font></div><div style=3D"background-color: trans=
parent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; bo=
rder-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretc=
h; border-image-slice: 100%; border-image-source: none; border-image-width:=
1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-lef=
t-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-st=
yle: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: cour=
ier new,monospace; font-size: 13px; font-style: normal; font-variant: norma=
l; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-lef=
t: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px=
; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left=
; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-te=
xt-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=
=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); b=
order-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0;=
border-image-repeat: stretch; border-image-slice: 100%; border-image-sourc=
e: none; border-image-width: 1; 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: rg=
b(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: 0px; padding-right: 0px; padding-top: 0px;">=C2=A0 img=
&&>.flipped();</font></div><div style=3D"background-color: trans=
parent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; bo=
rder-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretc=
h; border-image-slice: 100%; border-image-source: none; border-image-width:=
1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-lef=
t-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-st=
yle: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: cour=
ier new,monospace; font-size: 13px; font-style: normal; font-variant: norma=
l; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-lef=
t: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px=
; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left=
; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-te=
xt-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=
=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); b=
order-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0;=
border-image-repeat: stretch; border-image-slice: 100%; border-image-sourc=
e: none; border-image-width: 1; 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: rg=
b(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: 0px; padding-right: 0px; padding-top: 0px;"><br 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, 34); border-r=
ight-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34=
); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); l=
ine-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px=
; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0=
px; padding-top: 0px;"></font></div><font face=3D"courier new,monospace" st=
yle=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34);=
border-bottom-style: none; border-bottom-width: 0px; border-image-outset: =
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-sou=
rce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); borde=
r-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; color: rgb(=
34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-styl=
e: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; =
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; o=
rphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padd=
ing-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; te=
xt-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wo=
rd-spacing: 0px;">=C2=A0 return func&&>(args&&>...);=
=C2=A0<br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-styl=
e: none; border-bottom-width: 0px; border-left-color: rgb(34, 34, 34); bord=
er-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; color: rgb=
(34, 34, 34); line-height: normal; margin-bottom: 0px; margin-left: 0px; ma=
rgin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; p=
adding-right: 0px; padding-top: 0px;"></font><div style=3D"background-color=
: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: n=
one; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat:=
stretch; border-image-slice: 100%; border-image-source: none; border-image=
-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bor=
der-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-styl=
e: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border=
-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-famil=
y: courier new,monospace; font-size: 13px; font-style: normal; font-variant=
: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; mar=
gin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bott=
om: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-alig=
n: left; text-decoration: none; text-indent: 0px; text-transform: none; -we=
bkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font=
face=3D"courier new,monospace" style=3D"background-color: transparent; bor=
der-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom=
-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-i=
mage-slice: 100%; border-image-source: none; border-image-width: 1; border-=
left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0p=
x; border-right-color: rgb(34, 34, 34); border-right-style: none; border-ri=
ght-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; =
border-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,mon=
ospace; font-size: 13px; font-style: normal; font-variant: normal; font-wei=
ght: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; mar=
gin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; pa=
dding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none=
; text-indent: 0px; text-transform: none; white-space: normal; word-spacing=
: 0px;">};</font></div></div><b></b><i></i><u></u><sub></sub><sup></sup><st=
rike></strike><br></font></div><b></b><i></i><u></u><sub></sub><sup></sup><=
strike></strike><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike=
><br></div><div>And because that's a bit heavy I tried to optimize it v=
isually, falling into a trap.</div><div><br></div><div><b>Pro:</b></div><di=
v><b></b><br></div><div>=C2=A0- Quite clear and explicit of what it does on=
what - forward/move the type&& variable, whatever 'type' i=
s, deduced or not.</div><div><br></div><div><b>Cons:</b></div><div><b></b><=
br></div><div><span style=3D"display: inline !important; float: none; backg=
round-color: transparent; color: rgb(34, 34, 34); font-family: "Arial&=
quot;,"Helvetica",sans-serif; font-size: 13px; font-style: normal=
; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: =
2; text-align: left; text-decoration: none; text-indent: 0px; text-transfor=
m: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing:=
0px;">=C2=A0- A tad heavy.</span><br></div><div><b>=C2=A0</b>- The &&a=
mp;> <i>mental image</i> is already used in code as in static_cast<ty=
pe&&> for instance<br></div><div><br></div><div><br></div><div><=
span style=3D"display: inline !important; float: none; background-color: tr=
ansparent; color: rgb(34, 34, 34); font-family: "Arial","Hel=
vetica",sans-serif; font-size: 13px; font-style: normal; font-variant:=
normal; font-weight: 700; letter-spacing: normal; orphans: 2; text-align: =
left; text-decoration: none; text-indent: 0px; text-transform: none; -webki=
t-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">Variant =
A1</span></div><div>=C2=A0</div><div>We can use lighter <font face=3D"couri=
er new,monospace">&></font><font face=3D"arial,sans-serif"> variant,=
but the loss of the && relation is not a good tradeoff.=C2=A0</fon=
t></div><div><font face=3D"arial,sans-serif">Also, the second downside stil=
l stands.</font></div><div><br></div><div><div style=3D"background-color: t=
ransparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none=
; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: st=
retch; border-image-slice: 100%; border-image-source: none; border-image-wi=
dth: 1; 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-to=
p-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: =
courier new,monospace; font-size: 13px; font-style: normal; font-variant: n=
ormal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin=
-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom:=
0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: =
left; text-decoration: none; text-indent: 0px; text-transform: none; -webki=
t-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font fa=
ce=3D"courier new,monospace" style=3D"background-color: transparent; border=
-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wi=
dth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-imag=
e-slice: 100%; border-image-source: none; border-image-width: 1; border-lef=
t-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; bor=
der-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,monosp=
ace; font-size: 13px; font-style: normal; font-variant: normal; font-weight=
: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin=
-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; paddi=
ng-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; t=
ext-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0=
px;"><br></font></div><div style=3D"margin: 0px; padding: 0px; border: 0px =
rgb(34, 34, 34); border-image: none; text-align: left; color: rgb(34, 34, 3=
4); text-transform: none; text-indent: 0px; letter-spacing: normal; font-fa=
mily: courier new,monospace; font-size: 13px; font-variant: normal; word-sp=
acing: 0px; white-space: normal; orphans: 2; -webkit-text-stroke-width: 0px=
; background-color: transparent;"><font face=3D"courier new,monospace" styl=
e=3D"margin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: =
none; text-align: left; color: rgb(34, 34, 34); text-transform: none; text-=
indent: 0px; letter-spacing: normal; font-family: courier new,monospace; fo=
nt-size: 13px; font-variant: normal; word-spacing: 0px; white-space: normal=
; background-color: transparent;"><span style=3D"display: inline !important=
; float: none; background-color: transparent; color: rgb(34, 34, 34); font-=
family: "Arial","Helvetica",sans-serif; font-size: 13px=
; font-style: normal; font-variant: normal; font-weight: 700; letter-spacin=
g: normal; orphans: 2; text-align: left; text-decoration: none; text-indent=
: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: n=
ormal; word-spacing: 0px;">Variant B</span></font></div><br>Well, the =3D&g=
t; is still on table, but as postscript.</div><div><br></div><div><div styl=
e=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); b=
order-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0;=
border-image-repeat: stretch; border-image-slice: 100%; border-image-sourc=
e: none; border-image-width: 1; 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: rg=
b(34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34=
, 34, 34); font-family: courier new,monospace; font-size: 13px; font-style:=
normal; font-variant: normal; font-weight: 400; letter-spacing: normal; ma=
rgin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orp=
hans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddin=
g-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text=
-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word=
-spacing: 0px;"><br style=3D"background-attachment: scroll; background-clip=
: border-box; background-color: transparent; background-image: none; backgr=
ound-origin: padding-box; background-position-x: 0%; background-position-y:=
0%; background-repeat: repeat; background-size: auto; border-bottom-color:=
rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bord=
er-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%;=
border-image-source: none; border-image-width: 1; border-left-color: rgb(3=
4, 34, 34); border-left-style: none; border-left-width: 0px; border-right-c=
olor: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; b=
order-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width:=
0px; color: rgb(34, 34, 34); font-size: 13px; height: auto; margin-bottom:=
0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-width: 0px;=
overflow: visible; overflow-x: visible; overflow-y: visible; padding-botto=
m: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div><di=
v style=3D"background-color: transparent; border-bottom-color: rgb(34, 34, =
34); border-bottom-style: none; border-bottom-width: 0px; border-image-outs=
et: 0; border-image-repeat: stretch; border-image-slice: 100%; border-image=
-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); b=
order-left-style: none; border-left-width: 0px; border-right-color: rgb(34,=
34, 34); border-right-style: none; border-right-width: 0px; border-top-col=
or: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color: =
rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-=
style: normal; font-variant: normal; font-weight: 400; letter-spacing: norm=
al; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0p=
x; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; =
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px=
; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal=
; word-spacing: 0px;"><div style=3D"background-color: transparent; border-b=
ottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-widt=
h: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-=
slice: 100%; border-image-source: none; border-image-width: 1; border-left-=
color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bo=
rder-right-color: rgb(34, 34, 34); border-right-style: none; border-right-w=
idth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; borde=
r-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,monospac=
e; font-size: 13px; font-style: normal; font-variant: normal; font-weight: =
400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-r=
ight: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: =
0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoratio=
n: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width:=
0px; white-space: normal; word-spacing: 0px;"><font face=3D"courier new,mo=
nospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style=
: none; border-bottom-width: 0px; border-image-outset: 0; border-image-repe=
at: stretch; border-image-slice: 100%; border-image-source: none; border-im=
age-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; =
border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-s=
tyle: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); bor=
der-top-style: none; border-top-width: 0px; margin-bottom: 0px; margin-left=
: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-lef=
t: 0px; padding-right: 0px; padding-top: 0px;">auto cally =3D [img =3D img=
=3D>](auto&& func, auto&&... args)=C2=A0</font></div><di=
v style=3D"background-color: transparent; border-bottom-color: rgb(34, 34, =
34); border-bottom-style: none; border-bottom-width: 0px; border-image-outs=
et: 0; border-image-repeat: stretch; border-image-slice: 100%; border-image=
-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); b=
order-left-style: none; border-left-width: 0px; border-right-color: rgb(34,=
34, 34); border-right-style: none; border-right-width: 0px; border-top-col=
or: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color: =
rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-=
style: normal; font-variant: normal; font-weight: 400; letter-spacing: norm=
al; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0p=
x; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; =
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px=
; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal=
; word-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"border-=
bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wid=
th: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image=
-slice: 100%; border-image-source: none; border-image-width: 1; border-left=
-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; b=
order-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; bord=
er-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px;=
margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0p=
x; padding-top: 0px;">{</font></div><div style=3D"background-color: transpa=
rent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; bord=
er-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch;=
border-image-slice: 100%; border-image-source: none; border-image-width: 1=
; 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-styl=
e: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: courie=
r new,monospace; font-size: 13px; font-style: normal; font-variant: normal;=
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left:=
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; =
padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; =
text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text=
-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"=
courier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); borde=
r-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; bor=
der-image-repeat: stretch; border-image-slice: 100%; border-image-source: n=
one; border-image-width: 1; 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: 0p=
x; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0p=
x; padding-left: 0px; padding-right: 0px; padding-top: 0px;">=C2=A0 img=3D&=
gt;.flipped();</font></div><div style=3D"background-color: transparent; bor=
der-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom=
-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-i=
mage-slice: 100%; border-image-source: none; border-image-width: 1; border-=
left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0p=
x; border-right-color: rgb(34, 34, 34); border-right-style: none; border-ri=
ght-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; =
border-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,mon=
ospace; font-size: 13px; font-style: normal; font-variant: normal; font-wei=
ght: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; mar=
gin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-l=
eft: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-deco=
ration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-w=
idth: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"courier n=
ew,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-=
style: none; border-bottom-width: 0px; border-image-outset: 0; border-image=
-repeat: stretch; border-image-slice: 100%; border-image-source: none; bord=
er-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: n=
one; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-ri=
ght-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; paddin=
g-left: 0px; padding-right: 0px; padding-top: 0px;"><br style=3D"border-bot=
tom-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-l=
eft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: no=
ne; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-=
style: none; border-top-width: 0px; color: rgb(34, 34, 34); line-height: no=
rmal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: =
0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-to=
p: 0px;"></font></div><font face=3D"courier new,monospace" style=3D"backgro=
und-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom=
-style: none; border-bottom-width: 0px; border-image-outset: 0; border-imag=
e-repeat: stretch; border-image-slice: 100%; border-image-source: none; bor=
der-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: =
none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-r=
ight-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34=
); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); f=
ont-family: courier new,monospace; font-size: 13px; font-style: normal; fon=
t-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom:=
0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; pad=
ding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; =
text-align: left; text-decoration: none; text-indent: 0px; text-transform: =
none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0p=
x;">=C2=A0 return func=3D>(args=3D>...);=C2=A0<br style=3D"border-bot=
tom-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-l=
eft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: no=
ne; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-=
style: none; border-top-width: 0px; color: rgb(34, 34, 34); line-height: no=
rmal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: =
0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-to=
p: 0px;"></font><div style=3D"background-color: transparent; border-bottom-=
color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px=
; border-image-outset: 0; border-image-repeat: stretch; border-image-slice:=
100%; border-image-source: none; border-image-width: 1; border-left-color:=
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-r=
ight-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; color: rgb(34, 34, 34); font-family: courier new,monospace; fon=
t-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; l=
etter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: =
0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; p=
adding-right: 0px; padding-top: 0px; text-align: left; text-decoration: non=
e; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; =
white-space: normal; word-spacing: 0px;"><font face=3D"courier new,monospac=
e" style=3D"background-color: transparent; border-bottom-color: rgb(34, 34,=
34); border-bottom-style: none; border-bottom-width: 0px; border-image-out=
set: 0; border-image-repeat: stretch; border-image-slice: 100%; border-imag=
e-source: none; border-image-width: 1; 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-co=
lor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color:=
rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font=
-style: normal; font-variant: normal; font-weight: 400; letter-spacing: nor=
mal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0=
px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top=
: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-tran=
sform: none; white-space: normal; word-spacing: 0px;">};</font></div></div>=
<b style=3D"background-color: transparent; border-bottom-color: rgb(34, 34,=
34); border-bottom-style: none; border-bottom-width: 0px; border-image-out=
set: 0; border-image-repeat: stretch; border-image-slice: 100%; border-imag=
e-source: none; border-image-width: 1; 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-co=
lor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color:=
rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font=
-style: normal; font-variant: normal; font-weight: 700; letter-spacing: nor=
mal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0=
px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px;=
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0p=
x; text-transform: none; -webkit-text-stroke-width: 0px; white-space: norma=
l; word-spacing: 0px;"></b><i style=3D"background-color: transparent; borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; 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-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,monos=
pace; font-size: 13px; font-style: italic; font-variant: normal; font-weigh=
t: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margi=
n-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-lef=
t: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decora=
tion: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-wid=
th: 0px; white-space: normal; word-spacing: 0px;"></i><u style=3D"backgroun=
d-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-s=
tyle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-=
repeat: stretch; border-image-slice: 100%; border-image-source: none; borde=
r-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: no=
ne; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-rig=
ht-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34);=
border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); fon=
t-family: courier new,monospace; font-size: 13px; font-style: normal; font-=
variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0=
px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; paddi=
ng-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; te=
xt-align: left; text-decoration: underline; text-indent: 0px; text-transfor=
m: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing:=
0px;"></u><sub style=3D"background-color: transparent; border-bottom-color=
: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bor=
der-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%=
; border-image-source: none; border-image-width: 1; 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; color: rgb(34, 34, 34); font-family: courier new,monospace; font-siz=
e: 9px; font-style: normal; font-variant: normal; font-weight: 400; letter-=
spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; m=
argin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding=
-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; tex=
t-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-=
space: normal; word-spacing: 0px;"></sub><sup style=3D"background-color: tr=
ansparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none;=
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: str=
etch; border-image-slice: 100%; border-image-source: none; border-image-wid=
th: 1; 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: n=
one; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top=
-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: c=
ourier new,monospace; font-size: 9px; font-style: normal; font-variant: nor=
mal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-l=
eft: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0=
px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: le=
ft; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-=
text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"></sup><str=
ike style=3D"background-color: transparent; border-bottom-color: rgb(34, 34=
, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-ou=
tset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-ima=
ge-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34);=
border-left-style: none; border-left-width: 0px; border-right-color: rgb(3=
4, 34, 34); border-right-style: none; border-right-width: 0px; border-top-c=
olor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color=
: rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; fon=
t-style: normal; font-variant: normal; font-weight: 400; letter-spacing: no=
rmal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: =
0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px=
; padding-top: 0px; text-align: left; text-decoration: line-through; text-i=
ndent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-spa=
ce: normal; word-spacing: 0px;"></strike><br></div><div>Not bad.</div><div>=
<br></div><div>Visual confusion might arise as in</div><div><br></div><div>=
<span style=3D"display: inline !important; float: none; background-color: t=
ransparent; color: rgb(34, 34, 34); font-family: courier new,monospace; fon=
t-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; l=
etter-spacing: normal; orphans: 2; text-align: left; text-decoration: none;=
text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; wh=
ite-space: normal; word-spacing: 0px;">if(img=3D>.flipped())</span></div=
><div><span style=3D"display: inline !important; float: none; background-co=
lor: transparent; color: rgb(34, 34, 34); font-family: courier new,monospac=
e; font-size: 13px; font-style: normal; font-variant: normal; font-weight: =
400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration:=
none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0=
px; white-space: normal; word-spacing: 0px;">vs</span></div><div><span styl=
e=3D"display: inline !important; float: none; background-color: transparent=
; color: rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13=
px; font-style: normal; font-variant: normal; font-weight: 400; letter-spac=
ing: normal; orphans: 2; text-align: left; text-decoration: none; text-inde=
nt: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space:=
normal; word-spacing: 0px;">if(img>=3Dflipped())</span></div><div><span=
style=3D"display: inline !important; float: none; background-color: transp=
arent; color: rgb(34, 34, 34); font-family: courier new,monospace; font-siz=
e: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter=
-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text=
-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-s=
pace: normal; word-spacing: 0px;">vs</span></div><div><span style=3D"displa=
y: inline !important; float: none; background-color: transparent; color: rg=
b(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-st=
yle: normal; font-variant: normal; font-weight: 400; letter-spacing: normal=
; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; te=
xt-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wo=
rd-spacing: 0px;">if(img<=3Dflipped())</span></div><div><font face=3D"co=
urier new,monospace"></font><br></div><div><span style=3D"display: inline !=
important; float: none; background-color: transparent; color: rgb(34, 34, 3=
4); font-family: courier new,monospace; font-size: 13px; font-style: normal=
; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: =
2; text-align: left; text-decoration: none; text-indent: 0px; text-transfor=
m: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing:=
0px;">img=3D(a | b);</span></div><div><span style=3D"display: inline !impo=
rtant; float: none; background-color: transparent; color: rgb(34, 34, 34); =
font-family: courier new,monospace; font-size: 13px; font-style: normal; fo=
nt-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; t=
ext-align: left; text-decoration: none; text-indent: 0px; text-transform: n=
one; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px=
;">vs</span></div><div><span style=3D"display: inline !important; float: no=
ne; background-color: transparent; color: rgb(34, 34, 34); font-family: cou=
rier new,monospace; font-size: 13px; font-style: normal; font-variant: norm=
al; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left;=
text-decoration: none; text-indent: 0px; text-transform: none; -webkit-tex=
t-stroke-width: 0px; white-space: normal; word-spacing: 0px;">img=3D>(<s=
pan style=3D"display: inline !important; float: none; background-color: tra=
nsparent; color: rgb(34, 34, 34); font-family: courier new,monospace; font-=
size: 13px; font-style: normal; font-variant: normal; font-weight: 400; let=
ter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; t=
ext-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; whit=
e-space: normal; word-spacing: 0px;">a | b</span>);</span></div><div><br></=
div><div>Not sure if that would be much of a problem</div><div><br></div><d=
iv><b>Pros</b></div><div><b></b><br></div><div>=C2=A0- Clear move/forward v=
isual notation. Quite distinct visually.=C2=A0</div><div><br></div><div><b>=
Cons</b></div><div><br></div><div>=C2=A0- Both assignment and compare use s=
ome or all the symbols in different locations.=C2=A0</div><div>=C2=A0-! Too=
"pretty" and too general, we might want to use it in a different=
context, it might have better uses!</div><div>=C2=A0<br><div style=3D"back=
ground-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bot=
tom-style: none; border-bottom-width: 0px; border-image-outset: 0; border-i=
mage-repeat: stretch; border-image-slice: 100%; border-image-source: none; =
border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-styl=
e: 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); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34)=
; font-family: courier new,monospace; font-size: 13px; font-style: normal; =
font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bott=
om: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; =
padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0p=
x; text-align: left; text-decoration: none; text-indent: 0px; text-transfor=
m: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing:=
0px;"></div><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><s=
pan style=3D"display: inline !important; float: none; background-color: tra=
nsparent; color: rgb(34, 34, 34); font-family: "Arial","Helv=
etica",sans-serif; font-size: 13px; font-style: normal; font-variant: =
normal; font-weight: 700; letter-spacing: normal; orphans: 2; text-align: l=
eft; text-decoration: none; text-indent: 0px; text-transform: none; -webkit=
-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">Variant C=
</span></div><div><br></div><div>That might come to a surprise but a postsc=
ript tide ~ is reasonable option as well.</div><div><br></div><div>If we re=
member, the object must not be used after the call, well the tide resembles=
a dtor call - it will trigger a mental warning</div><div><br></div><div>=
=C2=A0<div style=3D"background-color: transparent; border-bottom-color: rgb=
(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-i=
mage-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bor=
der-image-source: none; border-image-width: 1; border-left-color: rgb(34, 3=
4, 34); border-left-style: none; border-left-width: 0px; border-right-color=
: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; borde=
r-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px=
; color: rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13=
px; font-style: normal; font-variant: normal; font-weight: 400; letter-spac=
ing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margi=
n-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-rig=
ht: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-in=
dent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-spac=
e: normal; word-spacing: 0px;"><font face=3D"courier new,monospace" style=
=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-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: 0px; paddin=
g-right: 0px; padding-top: 0px;">auto cally =3D [img =3D img~](auto&&am=
p; func, auto&&... args)=C2=A0</font></div><div style=3D"background=
-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-st=
yle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-r=
epeat: stretch; border-image-slice: 100%; border-image-source: none; border=
-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: non=
e; 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-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font=
-family: courier new,monospace; font-size: 13px; font-style: normal; font-v=
ariant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0p=
x; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; paddin=
g-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; tex=
t-align: left; text-decoration: none; text-indent: 0px; text-transform: non=
e; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"=
><font face=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34,=
34, 34); border-bottom-style: none; border-bottom-width: 0px; border-image=
-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-=
image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 3=
4); border-left-style: none; border-left-width: 0px; border-right-color: rg=
b(34, 34, 34); border-right-style: none; border-right-width: 0px; border-to=
p-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; ma=
rgin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; pad=
ding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"=
>{</font></div><div style=3D"background-color: transparent; border-bottom-c=
olor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px;=
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: =
100%; border-image-source: none; border-image-width: 1; border-left-color: =
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-ri=
ght-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0=
px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-w=
idth: 0px; color: rgb(34, 34, 34); font-family: courier new,monospace; font=
-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; le=
tter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0=
px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; pa=
dding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none=
; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; w=
hite-space: normal; word-spacing: 0px;"><font face=3D"courier new,monospace=
" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none;=
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: str=
etch; border-image-slice: 100%; border-image-source: none; border-image-wid=
th: 1; 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: n=
one; 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: 0px;=
padding-right: 0px; padding-top: 0px;">=C2=A0 img~.flipped();</font></div>=
<div style=3D"background-color: transparent; border-bottom-color: rgb(34, 3=
4, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-o=
utset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-im=
age-source: none; border-image-width: 1; 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; colo=
r: rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; fo=
nt-style: normal; font-variant: normal; font-weight: 400; letter-spacing: n=
ormal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top:=
0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0p=
x; padding-top: 0px; text-align: left; text-decoration: none; text-indent: =
0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: nor=
mal; word-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"bord=
er-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-=
width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-im=
age-slice: 100%; border-image-source: none; border-image-width: 1; border-l=
eft-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-rig=
ht-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; b=
order-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0=
px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right:=
0px; padding-top: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34);=
border-bottom-style: none; border-bottom-width: 0px; border-left-color: rg=
b(34, 34, 34); border-left-style: none; border-left-width: 0px; border-righ=
t-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-wid=
th: 0px; color: rgb(34, 34, 34); line-height: normal; margin-bottom: 0px; m=
argin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; p=
adding-left: 0px; padding-right: 0px; padding-top: 0px;"></font></div><font=
face=3D"courier new,monospace" style=3D"background-color: transparent; bor=
der-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom=
-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-i=
mage-slice: 100%; border-image-source: none; border-image-width: 1; border-=
left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0p=
x; border-right-color: rgb(34, 34, 34); border-right-style: none; border-ri=
ght-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; =
border-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,mon=
ospace; font-size: 13px; font-style: normal; font-variant: normal; font-wei=
ght: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; mar=
gin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-l=
eft: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-deco=
ration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-w=
idth: 0px; white-space: normal; word-spacing: 0px;">=C2=A0 return func~(arg=
s~...);=C2=A0<br style=3D"border-bottom-color: rgb(34, 34, 34); border-bott=
om-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; col=
or: rgb(34, 34, 34); line-height: normal; margin-bottom: 0px; margin-left: =
0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left:=
0px; padding-right: 0px; padding-top: 0px;"></font><div style=3D"backgroun=
d-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-s=
tyle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-=
repeat: stretch; border-image-slice: 100%; border-image-source: none; borde=
r-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: no=
ne; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-rig=
ht-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34);=
border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); fon=
t-family: courier new,monospace; font-size: 13px; font-style: normal; font-=
variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0=
px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; paddi=
ng-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; te=
xt-align: left; text-decoration: none; text-indent: 0px; text-transform: no=
ne; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;=
"><font face=3D"courier new,monospace" style=3D"background-color: transpare=
nt; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style:=
none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: courier =
new,monospace; font-size: 13px; font-style: normal; font-variant: normal; f=
ont-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0=
px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: =
0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoratio=
n: none; text-indent: 0px; text-transform: none; white-space: normal; word-=
spacing: 0px;">};</font></div><div style=3D"background-color: transparent; =
border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bot=
tom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; borde=
r-image-slice: 100%; border-image-source: none; border-image-width: 1; bord=
er-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: non=
e; border-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,=
monospace; font-size: 13px; font-style: normal; font-variant: normal; font-=
weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; =
margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; paddin=
g-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-d=
ecoration: none; text-indent: 0px; text-transform: none; -webkit-text-strok=
e-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"courie=
r new,monospace" style=3D"background-color: transparent; border-bottom-colo=
r: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bo=
rder-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100=
%; border-image-source: none; border-image-width: 1; 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-widt=
h: 0px; color: rgb(34, 34, 34); font-family: courier new,monospace; font-si=
ze: 13px; font-style: normal; font-variant: normal; font-weight: 400; lette=
r-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px;=
margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0p=
x; padding-top: 0px; text-align: left; text-decoration: none; text-indent: =
0px; text-transform: none; white-space: normal; word-spacing: 0px;"><br></f=
ont></div><div style=3D"margin: 0px; padding: 0px; border: 0px rgb(34, 34, =
34); border-image: none; text-align: left; color: rgb(34, 34, 34); text-tra=
nsform: none; text-indent: 0px; letter-spacing: normal; font-size: 13px; fo=
nt-style: normal; font-variant: normal; font-weight: 400; text-decoration: =
none; word-spacing: 0px; white-space: normal; orphans: 2; -webkit-text-stro=
ke-width: 0px; background-color: transparent;"><font face=3D"arial,sans-ser=
if">Because the dtor is rarely called explicitly the scenario <font face=3D=
"courier new,monospace">image~.image();</font> vs <font face=3D"courier new=
,monospace">image.~image();</font> will not come often.</font></div><div st=
yle=3D"margin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image=
: none; text-align: left; color: rgb(34, 34, 34); text-transform: none; tex=
t-indent: 0px; letter-spacing: normal; font-size: 13px; font-style: normal;=
font-variant: normal; font-weight: 400; text-decoration: none; word-spacin=
g: 0px; white-space: normal; orphans: 2; -webkit-text-stroke-width: 0px; ba=
ckground-color: transparent;"><font face=3D"arial,sans-serif"><br></font></=
div><div style=3D"margin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); b=
order-image: none; text-align: left; color: rgb(34, 34, 34); text-transform=
: none; text-indent: 0px; letter-spacing: normal; font-size: 13px; font-sty=
le: normal; font-variant: normal; font-weight: 400; text-decoration: none; =
word-spacing: 0px; white-space: normal; orphans: 2; -webkit-text-stroke-wid=
th: 0px; background-color: transparent;"><font face=3D"arial,sans-serif">An=
alternative is to use double ~~.</font></div><div style=3D"margin: 0px; pa=
dding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text-align: le=
ft; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px; letter-=
spacing: normal; font-size: 13px; font-style: normal; font-variant: normal;=
font-weight: 400; text-decoration: none; word-spacing: 0px; white-space: n=
ormal; orphans: 2; -webkit-text-stroke-width: 0px; background-color: transp=
arent;"><font face=3D"arial,sans-serif"><br></font></div><div style=3D"marg=
in: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; tex=
t-align: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0=
px; letter-spacing: normal; font-size: 13px; font-variant: normal; word-spa=
cing: 0px; white-space: normal; orphans: 2; -webkit-text-stroke-width: 0px;=
background-color: transparent;"><font face=3D"arial,sans-serif"><div style=
=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-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; color: rgb(34,=
34, 34); font-family: courier new,monospace; font-size: 13px; font-style: =
normal; font-variant: normal; font-weight: 400; letter-spacing: normal; mar=
gin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orph=
ans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding=
-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-=
transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-=
spacing: 0px;"><font face=3D"courier new,monospace" style=3D"border-bottom-=
color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px=
; border-image-outset: 0; border-image-repeat: stretch; border-image-slice:=
100%; border-image-source: none; border-image-width: 1; border-left-color:=
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-r=
ight-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: 0px; padding-right: 0px; padd=
ing-top: 0px;">auto cally =3D [img =3D img~~](auto&& func, auto&=
;&... args)=C2=A0</font></div><div style=3D"background-color: transpare=
nt; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style:=
none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: courier =
new,monospace; font-size: 13px; font-style: normal; font-variant: normal; f=
ont-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0=
px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; pa=
dding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; te=
xt-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-s=
troke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"co=
urier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-=
bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; borde=
r-image-repeat: stretch; border-image-slice: 100%; border-image-source: non=
e; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-s=
tyle: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bo=
rder-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: 0px; padding-right: 0px; padding-top: 0px;">{</font></div><d=
iv style=3D"background-color: transparent; border-bottom-color: rgb(34, 34,=
34); border-bottom-style: none; border-bottom-width: 0px; border-image-out=
set: 0; border-image-repeat: stretch; border-image-slice: 100%; border-imag=
e-source: none; border-image-width: 1; 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-co=
lor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color:=
rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font=
-style: normal; font-variant: normal; font-weight: 400; letter-spacing: nor=
mal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0=
px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px;=
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0p=
x; text-transform: none; -webkit-text-stroke-width: 0px; white-space: norma=
l; word-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"border=
-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wi=
dth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-imag=
e-slice: 100%; border-image-source: none; border-image-width: 1; border-lef=
t-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; bor=
der-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px=
; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0=
px; padding-top: 0px;">=C2=A0 img~~.flipped();</font></div><div style=3D"ba=
ckground-color: transparent; border-bottom-color: rgb(34, 34, 34); border-b=
ottom-style: none; border-bottom-width: 0px; border-image-outset: 0; border=
-image-repeat: stretch; border-image-slice: 100%; border-image-source: none=
; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-st=
yle: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bor=
der-right-style: none; border-right-width: 0px; border-top-color: rgb(34, 3=
4, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 3=
4); font-family: courier new,monospace; font-size: 13px; font-style: normal=
; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bo=
ttom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2=
; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: =
0px; text-align: left; text-decoration: none; text-indent: 0px; text-transf=
orm: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacin=
g: 0px;"><font face=3D"courier new,monospace" style=3D"border-bottom-color:=
rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bord=
er-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%;=
border-image-source: none; border-image-width: 1; border-left-color: rgb(3=
4, 34, 34); border-left-style: none; border-left-width: 0px; border-right-c=
olor: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; b=
order-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: 0px; padding-right: 0px; padding-to=
p: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-s=
tyle: none; border-bottom-width: 0px; border-left-color: rgb(34, 34, 34); b=
order-left-style: none; border-left-width: 0px; border-right-color: rgb(34,=
34, 34); border-right-style: none; border-right-width: 0px; border-top-col=
or: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color: =
rgb(34, 34, 34); line-height: normal; margin-bottom: 0px; margin-left: 0px;=
margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px=
; padding-right: 0px; padding-top: 0px;"></font></div><font face=3D"courier=
new,monospace" style=3D"background-color: transparent; border-bottom-color=
: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bor=
der-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%=
; border-image-source: none; border-image-width: 1; 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; color: rgb(34, 34, 34); font-family: courier new,monospace; font-siz=
e: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter=
-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; =
margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; paddin=
g-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; te=
xt-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white=
-space: normal; word-spacing: 0px;">=C2=A0 return func~~(args~~...);=C2=A0<=
br 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, 34); =
border-right-style: none; border-right-width: 0px; border-top-color: rgb(34=
, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34=
, 34); line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-ri=
ght: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-=
right: 0px; padding-top: 0px;"></font><div style=3D"background-color: trans=
parent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; bo=
rder-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretc=
h; border-image-slice: 100%; border-image-source: none; border-image-width:=
1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-lef=
t-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-st=
yle: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: cour=
ier new,monospace; font-size: 13px; font-style: normal; font-variant: norma=
l; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-lef=
t: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px=
; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left=
; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-te=
xt-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=
=3D"courier new,monospace" style=3D"background-color: transparent; border-b=
ottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-widt=
h: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-=
slice: 100%; border-image-source: none; border-image-width: 1; border-left-=
color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bo=
rder-right-color: rgb(34, 34, 34); border-right-style: none; border-right-w=
idth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; borde=
r-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,monospac=
e; font-size: 13px; font-style: normal; font-variant: normal; font-weight: =
400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-r=
ight: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding=
-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; tex=
t-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px=
;">};</font></div><div><br></div><div><b>Pros:</b></div><div><b><br></b></d=
iv><div>=C2=A0- Quite distinct</div><div>=C2=A0- Triggers a mental warning,=
reminding us, the object is gone - a visual relation to end-of-line.</div>=
<div><br></div><div><b>Cons:</b></div><div><b>=C2=A0</b></div><div>=C2=A0- =
A bit arbitrary on first glance, no visual relation to either move/forward =
or a && type. (Except the repletion of symbols in the double varian=
t)</div><div>=C2=A0-! There is tide prefix tide operator which has a differ=
ent meaning. This creates odd asymmetry, probably only the double tide is a=
good option!</div><div><br></div><div><br></div><div><div style=3D"backgro=
und-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom=
-style: none; border-bottom-width: 0px; border-image-outset: 0; border-imag=
e-repeat: stretch; border-image-slice: 100%; border-image-source: none; bor=
der-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: =
none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-r=
ight-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34=
); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); f=
ont-family: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-se=
rif; font-size: 13px; font-style: normal; font-variant: normal; font-weight=
: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin=
-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left=
: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decorat=
ion: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-widt=
h: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"arial,sans-s=
erif" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: n=
one; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat:=
stretch; border-image-slice: 100%; border-image-source: none; border-image=
-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bor=
der-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-styl=
e: 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: 0=
px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: =
0px; padding-right: 0px; padding-top: 0px;"><span style=3D"background-color=
: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: n=
one; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat:=
stretch; border-image-slice: 100%; border-image-source: none; border-image=
-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bor=
der-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-styl=
e: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border=
-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); display: i=
nline; float: none; font-family: &quot;Arial&quot;,&quot;Helvet=
ica&quot;,sans-serif; font-size: 13px; font-style: normal; font-variant=
: normal; font-weight: 700; letter-spacing: normal; margin-bottom: 0px; mar=
gin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bott=
om: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-alig=
n: left; text-decoration: none; text-indent: 0px; text-transform: none; -we=
bkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">Varia=
nt D</span></font></div><div style=3D"background-color: transparent; border=
-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wi=
dth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-imag=
e-slice: 100%; border-image-source: none; border-image-width: 1; border-lef=
t-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; bor=
der-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&am=
p;quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-sty=
le: normal; font-variant: normal; font-weight: 400; letter-spacing: normal;=
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; =
orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pad=
ding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; t=
ext-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; w=
ord-spacing: 0px;"><font face=3D"arial,sans-serif" style=3D"border-bottom-c=
olor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px;=
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: =
100%; border-image-source: none; border-image-width: 1; border-left-color: =
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-ri=
ght-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0=
px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-w=
idth: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-=
top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px;"><span style=3D"background-color: transparent; border-bottom-c=
olor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px;=
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: =
100%; border-image-source: none; border-image-width: 1; border-left-color: =
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-ri=
ght-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0=
px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-w=
idth: 0px; color: rgb(34, 34, 34); display: inline; float: none; font-famil=
y: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font=
-size: 13px; font-style: normal; font-variant: normal; font-weight: 700; le=
tter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0=
px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; pa=
dding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none=
; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; w=
hite-space: normal; word-spacing: 0px;"><br></span></font></div><div style=
=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-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; color: rgb(34,=
34, 34); font-family: &quot;Arial&quot;,&quot;Helvetica&qu=
ot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; =
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: =
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; p=
adding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; t=
ext-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-=
stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"a=
rial,sans-serif" style=3D"border-bottom-color: rgb(34, 34, 34); border-bott=
om-style: none; border-bottom-width: 0px; border-image-outset: 0; border-im=
age-repeat: stretch; border-image-slice: 100%; border-image-source: none; b=
order-image-width: 1; 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; mar=
gin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; pad=
ding-left: 0px; padding-right: 0px; padding-top: 0px;">We can </font><font =
face=3D"arial,sans-serif" style=3D"border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-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: 0px; padding-right: 0px; padding-top: 0px;">~<font face=
=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); b=
order-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0;=
border-image-repeat: stretch; border-image-slice: 100%; border-image-sourc=
e: none; border-image-width: 1; 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: rg=
b(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: 0px; padding-right: 0px; padding-top: 0px;">&&=
</font></font><font style=3D"border-bottom-color: rgb(34, 34, 34); border-=
bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; borde=
r-image-repeat: stretch; border-image-slice: 100%; border-image-source: non=
e; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-s=
tyle: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bo=
rder-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: 0px; padding-right: 0px; padding-top: 0px;"><font style=3D"b=
order-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bott=
om-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border=
-image-slice: 100%; border-image-source: none; border-image-width: 1; borde=
r-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: 0px; padding-rig=
ht: 0px; padding-top: 0px;">combining A and C in away</font>. Sadly <font f=
ace=3D"courier new,monospace">&&~ </font>cannot be used as it is we=
ll defined in </font><font face=3D"courier new,monospace"><font style=3D"bo=
rder-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-botto=
m-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-=
image-slice: 100%; border-image-source: none; border-image-width: 1; border=
-left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0=
px; border-right-color: rgb(34, 34, 34); border-right-style: none; border-r=
ight-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: 0px; padding-righ=
t: 0px; padding-top: 0px;">a </font><font style=3D"border-bottom-color: rgb=
(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-i=
mage-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bor=
der-image-source: none; border-image-width: 1; border-left-color: rgb(34, 3=
4, 34); border-left-style: none; border-left-width: 0px; border-right-color=
: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; borde=
r-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: 0px; padding-right: 0px; padding-top: 0=
px;">&& ~b=C2=A0</font></font></div><b></b><i></i><u></u><sub></sub=
><sup></sup><strike></strike><font face=3D"courier new,monospace"></font><f=
ont face=3D"courier new,monospace"></font><br></div><div><div style=3D"back=
ground-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bot=
tom-style: none; border-bottom-width: 0px; border-image-outset: 0; border-i=
mage-repeat: stretch; border-image-slice: 100%; border-image-source: none; =
border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-styl=
e: 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); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34)=
; font-family: courier new,monospace; font-size: 13px; font-style: normal; =
font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bott=
om: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; =
padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0p=
x; text-align: left; text-decoration: none; text-indent: 0px; text-transfor=
m: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing:=
0px;"><font face=3D"courier new,monospace" style=3D"border-bottom-color: r=
gb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border=
-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; b=
order-image-source: none; border-image-width: 1; border-left-color: rgb(34,=
34, 34); border-left-style: none; border-left-width: 0px; border-right-col=
or: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; bor=
der-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0=
px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0p=
x; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top:=
0px;">auto cally =3D [img =3D img~&&](auto&& func, auto&am=
p;&... args)=C2=A0</font></div><div style=3D"background-color: transpar=
ent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; borde=
r-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; =
border-image-slice: 100%; border-image-source: none; border-image-width: 1;=
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-w=
idth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; b=
order-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style=
: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: courier=
new,monospace; font-size: 13px; font-style: normal; font-variant: normal; =
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: =
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; p=
adding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; t=
ext-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-=
stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"c=
ourier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border=
-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; bord=
er-image-repeat: stretch; border-image-slice: 100%; border-image-source: no=
ne; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-=
style: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); b=
order-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: 0px; padding-right: 0px; padding-top: 0px;">{</font></div><=
div style=3D"background-color: transparent; border-bottom-color: rgb(34, 34=
, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-ou=
tset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-ima=
ge-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34);=
border-left-style: none; border-left-width: 0px; border-right-color: rgb(3=
4, 34, 34); border-right-style: none; border-right-width: 0px; border-top-c=
olor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color=
: rgb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; fon=
t-style: normal; font-variant: normal; font-weight: 400; letter-spacing: no=
rmal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: =
0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px=
; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0=
px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: norm=
al; word-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; 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-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: =
0px; padding-top: 0px;">=C2=A0 img~&&.flipped();</font></div><div s=
tyle=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34)=
; border-bottom-style: none; border-bottom-width: 0px; border-image-outset:=
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-so=
urce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); bord=
er-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; color: rgb=
(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-sty=
le: normal; font-variant: normal; font-weight: 400; letter-spacing: normal;=
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; =
orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pad=
ding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; t=
ext-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; w=
ord-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"border-bot=
tom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width:=
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sl=
ice: 100%; border-image-source: none; border-image-width: 1; border-left-co=
lor: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bord=
er-right-color: rgb(34, 34, 34); border-right-style: none; border-right-wid=
th: 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; ma=
rgin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; =
padding-top: 0px;"><br 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-colo=
r: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; bord=
er-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0p=
x; color: rgb(34, 34, 34); line-height: normal; margin-bottom: 0px; margin-=
left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding=
-left: 0px; padding-right: 0px; padding-top: 0px;"></font></div><font face=
=3D"courier new,monospace" style=3D"background-color: transparent; border-b=
ottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-widt=
h: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-=
slice: 100%; border-image-source: none; border-image-width: 1; border-left-=
color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bo=
rder-right-color: rgb(34, 34, 34); border-right-style: none; border-right-w=
idth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; borde=
r-top-width: 0px; color: rgb(34, 34, 34); font-family: courier new,monospac=
e; font-size: 13px; font-style: normal; font-variant: normal; font-weight: =
400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-r=
ight: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: =
0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoratio=
n: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width:=
0px; white-space: normal; word-spacing: 0px;">=C2=A0 return func~&&=
;(args~&&...);=C2=A0<br style=3D"border-bottom-color: rgb(34, 34, 3=
4); border-bottom-style: none; border-bottom-width: 0px; border-left-color:=
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-r=
ight-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; color: rgb(34, 34, 34); line-height: normal; margin-bottom: 0px=
; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px=
; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></font><div sty=
le=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); =
border-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0=
; border-image-repeat: stretch; border-image-slice: 100%; border-image-sour=
ce: none; border-image-width: 1; 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: r=
gb(34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(3=
4, 34, 34); font-family: courier new,monospace; font-size: 13px; font-style=
: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; m=
argin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; or=
phans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; tex=
t-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wor=
d-spacing: 0px;"><font face=3D"courier new,monospace" style=3D"background-c=
olor: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-styl=
e: none; border-bottom-width: 0px; border-image-outset: 0; border-image-rep=
eat: stretch; border-image-slice: 100%; border-image-source: none; border-i=
mage-width: 1; 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); bo=
rder-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-f=
amily: courier new,monospace; font-size: 13px; font-style: normal; font-var=
iant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px;=
margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px;=
padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;=
text-decoration: none; text-indent: 0px; text-transform: none; white-space=
: normal; word-spacing: 0px;">};</font></div><b></b><i></i><u></u><sub></su=
b><sup></sup><strike></strike><br></div><div><b>Pros</b></div><div>=C2=A0</=
div></font><div><font face=3D"arial,sans-serif">=C2=A0 - </font>Strong <fon=
t face=3D"arial,sans-serif">notion for both && type </font>and <fon=
t face=3D"arial,sans-serif">end-of-line.=C2=A0</font></div><font face=3D"ar=
ial,sans-serif"><div><b></b><i></i><u></u><sub></sub><sup></sup><strike></s=
trike><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><br></div=
><div><b>Cons</b></div><div><b></b><br></div><div><b>=C2=A0</b>- Heavy and =
odd, one might argue noisy as well.=C2=A0</div><div><br></div><div><b><br><=
/b></div><div><b>Other options</b></div><div><b></b><br></div><div><font fa=
ce=3D"courier new,monospace">val~>=C2=A0</font></div><div>Problem is, it=
is way to similar to ->.</div><div><br></div><div><font face=3D"courier=
new,monospace">val:></font></div><div>Odd and arbitrary</div><div><br><=
/div><div><br></div></font><div><font face=3D"arial,sans-serif">That's =
it. Comments (and alternatives) are welcome.=C2=A0</font></div></div></div>=
</div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/3246d246-296a-4019-a336-90a9f4a18474%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/3246d246-296a-4019-a336-90a9f4a18474=
%40isocpp.org</a>.<br />
------=_Part_39834_173156941.1527619345680--
------=_Part_39833_623197363.1527619345679--
.
Author: mihailnajdenov@gmail.com
Date: Tue, 29 May 2018 11:46:16 -0700 (PDT)
Raw View
------=_Part_29184_44175926.1527619576314
Content-Type: multipart/alternative;
boundary="----=_Part_29185_576632377.1527619576315"
------=_Part_29185_576632377.1527619576315
Content-Type: text/plain; charset="UTF-8"
Ok, here's the thing.
*Variant A*
My original idea was to combine the && which already represents both rval
refs and frw refs with,
well the most logical, an arrow to represent both the move and forward
part.
template <class F, class... Args>
auto delay_invoke(F&& f, Args&&... args)
{
return [f=f&&>, args = args&&>...]() -> decltype(auto)
{
return std::invoke(f, args...);
};
}
auto cally = [img = img&&>](auto&& func, auto&&... args)
{
img&&>.flipped();
return func&&>(args&&>...);
};
And because that's a bit heavy I tried to optimize it visually, falling
into a trap.
*Pros:*
- Quite clear and explicit of what it does on what - forward/move the
type&& variable, whatever 'type' is, deduced or not.
*Cons:*
- A tad heavy.
- The &&> mental image is already used in code as in static_cast<type&&>
for instance
*Variant A1*
We can use lighter &> variant, but the loss of the && relation is not a
good tradeoff.
Also, the second downside still stands.
*Variant B*
Well, the => is still on table, but as postscript.
auto cally = [img = img=>](auto&& func, auto&&... args)
{
img=>.flipped();
return func=>(args=>...);
};
Not bad.
Visual confusion might arise as in
if(img=>.flipped())
vs
if(img>=flipped())
vs
if(img<=flipped())
img=(a | b);
vs
img=>(a | b);
Not sure if that would be a problem
*Pros*
- Clear move/forward visual notation. Quite distinct visually.
*Cons*
- Both assignment and compare use some or all the symbols in different
locations.
-! Too "pretty" and too general, we might want to use it in a different
context, it might have better uses!
*Variant C*
That might come to a surprise but a postscript tide ~ is reasonable option
as well.
If we remember, the object must not be used after the call, well the tide
resembles a dtor call - it will trigger a mental warning
auto cally = [img = img~](auto&& func, auto&&... args)
{
img~.flipped();
return func~(args~...);
};
Because the dtor is rarely called explicitly the scenario image~.image();
vs image.~image(); will not come often.
An alternative is to use double ~~.
auto cally = [img = img~~](auto&& func, auto&&... args)
{
img~~.flipped();
return func~~(args~~...);
};
*Pros:*
- Quite distinct
- Triggers a mental warning, reminding us, the object is gone - a visual
relation to end-of-line.
*Cons:*
- A bit arbitrary on first glance, no visual relation to either
move/forward or a && type. (Except the repletion of symbols in the double
variant)
-! There is tide prefix tide operator which has a different meaning. This
creates odd asymmetry, probably only the double tide is a good option!
*Variant D*
We can ~&& combining A and C in away. Sadly &&~ cannot be used as it is
well defined in a && ~b
auto cally = [img = img~&&](auto&& func, auto&&... args)
{
img~&&.flipped();
return func~&&(args~&&...);
};
*Pros*
- Strong notion for both && type and end-of-line.
*Cons*
- Heavy and odd, one might argue noisy as well.
*Other options*
val~>
Problem is, it is way to similar to ->.
val:>
Odd, and arbitrary
That's it. Comments (and alternatives) are welcome.
--
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/d8659491-7eb1-4328-b585-5a9aa3454a88%40isocpp.org.
------=_Part_29185_576632377.1527619576315
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div><br></div><div>Ok, here's the thing.</div><div><b=
r></div><div><b>Variant A</b></div><div><b><br></b></div><div>My original i=
dea was to combine the && which already represents both rval refs a=
nd frw refs with,<br>=C2=A0well the most logical, an arrow to represent bot=
h the move and forward part.</div><div><br><font face=3D"courier new,monosp=
ace">template <class F, class... Args><br>auto delay_invoke(F&&am=
p; f, Args&&... args)<br>{<br>=C2=A0 return [f=3Df&&>, a=
rgs =3D args&&>...]() -> decltype(auto) <br>=C2=A0 { <br>=C2=
=A0=C2=A0=C2=A0 return std::invoke(f, args...);<br>=C2=A0 }; <br>}</font></=
div><div><font face=3D"courier new,monospace"><br>auto cally =3D [img =3D i=
mg&&>](auto&& func, auto&&... args) <br>{<br>=C2=
=A0 img&&>.flipped();</font></div><div><font face=3D"courier new=
,monospace">=C2=A0 return func&&>(args&&>...); <br>};=
</font></div><div><font face=3D"courier new,monospace"></font><br>And becau=
se that's a bit heavy I tried to optimize it visually, falling into a t=
rap.</div><div><br></div><div><b>Pros:</b></div><div><b><br></b></div><div>=
=C2=A0- Quite clear and explicit of what it does on what - forward/move the=
type&& variable, whatever 'type' is, deduced or not.</div>=
<div><br></div><div><b>Cons:</b></div><div><b><br></b></div><div>=C2=A0- A =
tad heavy.<br>=C2=A0- The &&> mental image is already used in co=
de as in static_cast<type&&> for instance</div><div><br><b>Va=
riant A1<br></b>=C2=A0<br>We can use lighter<font face=3D"courier new,monos=
pace"> &></font> variant, but the loss of the && relation is=
not a good tradeoff. <br>Also, the second downside still stands.</div><div=
><br><b>Variant B</b></div><div><b><br></b></div><div>Well, the =3D> is =
still on table, but as postscript.</div><div><br><font face=3D"courier new,=
monospace">auto cally =3D [img =3D img=3D>](auto&& func, auto&am=
p;&... args) <br>{<br>=C2=A0 img=3D>.flipped();</font></div><div><fo=
nt face=3D"courier new,monospace">=C2=A0 return func=3D>(args=3D>...)=
; <br>};</font></div><div><font face=3D"courier new,monospace"></font><br><=
/div><div>Not bad.</div><div><br></div><div>Visual confusion might arise as=
in</div><div><br></div><div><font face=3D"courier new,monospace">if(img=3D=
>.flipped())<br>vs<br>if(img>=3Dflipped())<br>vs<br>if(img<=3Dflip=
ped())</font></div><div><font face=3D"courier new,monospace">img=3D(a | b);=
<br>vs<br>img=3D>(a | b);</font></div><div><font face=3D"courier new,mon=
ospace"></font><br></div><div>Not sure if that would be a problem</div><div=
><br></div><div><b>Pros</b></div><div>=C2=A0- Clear move/forward visual not=
ation. Quite distinct visually.=C2=A0</div><div><br></div><div><b>Cons</b><=
/div><div><b><br></b></div><div>=C2=A0- Both assignment and compare use som=
e or all the symbols in different locations. <br>=C2=A0-! Too "pretty&=
quot; and too general, we might want to use it in a different context, it m=
ight have better uses!<br>=C2=A0</div><div><b>Variant C</b></div><div><b><b=
r></b></div><div>That might come to a surprise but a postscript tide ~ is r=
easonable option as well.</div><div>If we remember, the object must not be =
used after the call, well the tide resembles a dtor call - it will trigger =
a mental warning</div><div>=C2=A0<br><font face=3D"courier new,monospace">a=
uto cally =3D [img =3D img~](auto&& func, auto&&... args) <=
br>{<br>=C2=A0 img~.flipped();</font></div><div><font face=3D"courier new,m=
onospace">=C2=A0 return func~(args~...); <br>};</font></div><div><font face=
=3D"courier new,monospace"></font><br></div><div>Because the dtor is rarely=
called explicitly the scenario image~.image(); vs image.~image(); will not=
come often.</div><div>An alternative is to use double ~~.</div><div><br></=
div><div><font face=3D"courier new,monospace">auto cally =3D [img =3D img~~=
](auto&& func, auto&&... args) <br>{<br>=C2=A0 img~~.flippe=
d();</font></div><div><font face=3D"courier new,monospace">=C2=A0 return fu=
nc~~(args~~...); <br>};</font></div><div><font face=3D"courier new,monospac=
e"></font><br></div><div><b>Pros:</b></div><div><b></b><br></div><div>=C2=
=A0- Quite distinct<br>=C2=A0- Triggers a mental warning, reminding us, the=
object is gone - a visual relation to end-of-line.</div><div><br></div><di=
v><b>Cons:<br></b>=C2=A0<br>=C2=A0- A bit arbitrary on first glance, no vis=
ual relation to either move/forward or a && type. (Except the reple=
tion of symbols in the double variant)<br>=C2=A0-! There is tide prefix tid=
e operator which has a different meaning. This creates odd asymmetry, proba=
bly only the double tide is a good option!</div><div><br><b>Variant D</b></=
div><div><b></b><br></div>We can ~&& combining A and C in away. Sad=
ly &&~ cannot be used as it is well defined in a && ~b <div=
><font face=3D"courier new,monospace"><br></font></div><div><font face=3D"c=
ourier new,monospace">auto cally =3D [img =3D img~&&](auto&&=
; func, auto&&... args) <br>{<br>=C2=A0 img~&&.flipped();</=
font></div><div><font face=3D"courier new,monospace">=C2=A0 return func~&am=
p;&(args~&&...); <br>};</font></div><div><font face=3D"courier =
new,monospace"></font><br></div><div><b>Pros</b><br>=C2=A0<br>=C2=A0 - Stro=
ng notion for both && type and end-of-line.=C2=A0</div><div><br></d=
iv><div><b>Cons</b></div><div><b></b><br></div><div>=C2=A0- Heavy and odd, =
one might argue noisy as well. </div><div><br><b>Other options</b></div><di=
v><b></b><br></div><div><font face=3D"courier new,monospace">val~> </fon=
t><br>Problem is, it is way to similar to ->.</div><div><br></div><div><=
font face=3D"courier new,monospace">val:></font><br>Odd, and arbitrary</=
div><div><br>That's it. Comments (and alternatives) are welcome. </div>=
</div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/d8659491-7eb1-4328-b585-5a9aa3454a88%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/d8659491-7eb1-4328-b585-5a9aa3454a88=
%40isocpp.org</a>.<br />
------=_Part_29185_576632377.1527619576315--
------=_Part_29184_44175926.1527619576314--
.
Author: Barry Revzin <barry.revzin@gmail.com>
Date: Tue, 29 May 2018 13:18:31 -0700 (PDT)
Raw View
------=_Part_40544_1455746484.1527625111203
Content-Type: multipart/alternative;
boundary="----=_Part_40545_562867718.1527625111203"
------=_Part_40545_562867718.1527625111203
Content-Type: text/plain; charset="UTF-8"
On Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, mihailn...@gmail.com wrote:
>
>
> That's it. Comments (and alternatives) are welcome.
>
As already mentioned in this thread, I have previously proposed a [prefix]
forwarding operator that was rejected by EWG fairly strongly (vote was 2 |
0 | 1 | 12 | 7). I have no reason to believe from that discussion that the
any of the issues were prefix-related, so I don't think a postfix
forwarding operator would help. Using fwdexpr as a keyword (along the lines
of sizeof and decltype) had tepid favor (0 | 7 | 4 | 4 | 1), so that's the
direction that this idea would need to go towards.
Maybe we need qualified keywords... like std::fwd. Too bad fwd by itself
probably clashes too much.
--
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/6264f3dd-83da-4d6a-9741-f9086f7228df%40isocpp.org.
------=_Part_40545_562867718.1527625111203
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br>On Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, mihailn.=
...@gmail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;mar=
gin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D=
"ltr"><div><br></div><div>That's it. Comments (and alternatives) are we=
lcome.<br></div></div></blockquote><div><br></div><div>As already mentioned=
in this thread, I have previously proposed a [prefix] forwarding operator =
that was rejected by EWG fairly strongly (vote was 2 | 0 | 1 | 12 | 7). I h=
ave no reason to believe from that discussion that the any of the issues we=
re prefix-related, so I don't think a postfix forwarding operator would=
help. Using <font face=3D"courier new, monospace">fwdexpr </font>as a keyw=
ord (along the lines of <font face=3D"courier new, monospace">sizeof </font=
>and <font face=3D"courier new, monospace">decltype)=C2=A0</font>had tepid =
favor (0 | 7 | 4 | 4 | 1), so that's the direction that this idea would=
need to go towards.=C2=A0</div><div><br></div><div>Maybe we need qualified=
keywords... like <font face=3D"courier new, monospace">std::fwd</font>. To=
o bad <font face=3D"courier new, monospace">fwd </font>by itself probably c=
lashes too much.=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" 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/6264f3dd-83da-4d6a-9741-f9086f7228df%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/6264f3dd-83da-4d6a-9741-f9086f7228df=
%40isocpp.org</a>.<br />
------=_Part_40545_562867718.1527625111203--
------=_Part_40544_1455746484.1527625111203--
.
Author: Nicol Bolas <jmckesson@gmail.com>
Date: Tue, 29 May 2018 13:32:43 -0700 (PDT)
Raw View
------=_Part_40039_1228746521.1527625963701
Content-Type: multipart/alternative;
boundary="----=_Part_40040_321875827.1527625963701"
------=_Part_40040_321875827.1527625963701
Content-Type: text/plain; charset="UTF-8"
On Tuesday, May 29, 2018 at 4:18:31 PM UTC-4, Barry Revzin wrote:
>
>
> On Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, mihailn...@gmail.com wrote:
>>
>>
>> That's it. Comments (and alternatives) are welcome.
>>
>
> As already mentioned in this thread, I have previously proposed a [prefix]
> forwarding operator that was rejected by EWG fairly strongly (vote was 2 |
> 0 | 1 | 12 | 7). I have no reason to believe from that discussion that the
> any of the issues were prefix-related, so I don't think a postfix
> forwarding operator would help. Using fwdexpr as a keyword (along the
> lines of sizeof and decltype) had tepid favor (0 | 7 | 4 | 4 | 1), so
> that's the direction that this idea would need to go towards.
>
> Maybe we need qualified keywords... like std::fwd. Too bad fwd by itself
> probably clashes too much.
>
If the committee could have accepted P0056, then we could use naked `fwd`
just fine. The idea with that proposal is that you would designate "fwd" as
a "soft keyword". It would work like a keyword, so long as the keyword
could not be confused with an identifier. And if the user has used it as an
identifier accessible in the current scope? You can qualify it in that case
with `std::fwd`.
Sadly, that proposal was not accepted. Yet now, the committee is apparently
trying to find another solution to the `co_await` and `module` issues. Even
though the solution is sitting right in front of them.
--
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/e3d6c1ca-6890-4e92-976d-2709e636d35c%40isocpp.org.
------=_Part_40040_321875827.1527625963701
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">On Tuesday, May 29, 2018 at 4:18:31 PM UTC-4, Barry Revzin=
wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.=
8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><br>On=
Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, <a>mihailn...@gmail.com</a> wro=
te:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div>=
<div>That's it. Comments (and alternatives) are welcome.<br></div></div=
></blockquote><div><br></div><div>As already mentioned in this thread, I ha=
ve previously proposed a [prefix] forwarding operator that was rejected by =
EWG fairly strongly (vote was 2 | 0 | 1 | 12 | 7). I have no reason to beli=
eve from that discussion that the any of the issues were prefix-related, so=
I don't think a postfix forwarding operator would help. Using <font fa=
ce=3D"courier new, monospace">fwdexpr </font>as a keyword (along the lines =
of <font face=3D"courier new, monospace">sizeof </font>and <font face=3D"co=
urier new, monospace">decltype)=C2=A0</font>had tepid favor (0 | 7 | 4 | 4 =
| 1), so that's the direction that this idea would need to go towards.=
=C2=A0</div><div><br></div><div>Maybe we need qualified keywords... like <f=
ont face=3D"courier new, monospace">std::fwd</font>. Too bad <font face=3D"=
courier new, monospace">fwd </font>by itself probably clashes too much.=C2=
=A0</div></div></blockquote><div><br></div><div>If the committee could have=
accepted P0056, then we could use naked `fwd` just fine. The idea with tha=
t proposal is that you would designate "fwd" as a "soft keyw=
ord". It would work like a keyword, so long as the keyword could not b=
e confused with an identifier. And if the user has used it as an identifier=
accessible in the current scope? You can qualify it in that case with `std=
::fwd`.</div><div><br></div><div>Sadly, that proposal was not accepted. Yet=
now, the committee is apparently trying to find another solution to the `c=
o_await` and `module` issues. Even though the solution is sitting right in =
front of them.<br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/e3d6c1ca-6890-4e92-976d-2709e636d35c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/e3d6c1ca-6890-4e92-976d-2709e636d35c=
%40isocpp.org</a>.<br />
------=_Part_40040_321875827.1527625963701--
------=_Part_40039_1228746521.1527625963701--
.
Author: Chris Hallock <christopherhallock@gmail.com>
Date: Tue, 29 May 2018 14:21:46 -0700 (PDT)
Raw View
------=_Part_30140_798907074.1527628907013
Content-Type: multipart/alternative;
boundary="----=_Part_30141_1613486483.1527628907013"
------=_Part_30141_1613486483.1527628907013
Content-Type: text/plain; charset="UTF-8"
On Tuesday, May 29, 2018 at 4:18:31 PM UTC-4, Barry Revzin wrote:
>
>
> On Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, mihailn...@gmail.com wrote:
>>
>>
>> That's it. Comments (and alternatives) are welcome.
>>
>
> As already mentioned in this thread, I have previously proposed a [prefix]
> forwarding operator that was rejected by EWG fairly strongly (vote was 2 |
> 0 | 1 | 12 | 7). I have no reason to believe from that discussion that the
> any of the issues were prefix-related, so I don't think a postfix
> forwarding operator would help. Using fwdexpr as a keyword (along the
> lines of sizeof and decltype) had tepid favor (0 | 7 | 4 | 4 | 1), so
> that's the direction that this idea would need to go towards.
>
> Maybe we need qualified keywords... like std::fwd. Too bad fwd by itself
> probably clashes too much.
>
Would postfix fwd clash with anything?
--
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/86bcd4b9-180b-41fa-8f84-d2b4f52219b1%40isocpp.org.
------=_Part_30141_1613486483.1527628907013
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Tuesday, May 29, 2018 at 4:18:31 PM UTC-4, Barr=
y Revzin wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr=
"><br>On Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, <a>mihailn...@gmail.com=
</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:=
0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><b=
r></div><div>That's it. Comments (and alternatives) are welcome.<br></d=
iv></div></blockquote><div><br></div><div>As already mentioned in this thre=
ad, I have previously proposed a [prefix] forwarding operator that was reje=
cted by EWG fairly strongly (vote was 2 | 0 | 1 | 12 | 7). I have no reason=
to believe from that discussion that the any of the issues were prefix-rel=
ated, so I don't think a postfix forwarding operator would help. Using =
<font face=3D"courier new, monospace">fwdexpr </font>as a keyword (along th=
e lines of <font face=3D"courier new, monospace">sizeof </font>and <font fa=
ce=3D"courier new, monospace">decltype)=C2=A0</font>had tepid favor (0 | 7 =
| 4 | 4 | 1), so that's the direction that this idea would need to go t=
owards.=C2=A0</div><div><br></div><div>Maybe we need qualified keywords... =
like <font face=3D"courier new, monospace">std::fwd</font>. Too bad <font f=
ace=3D"courier new, monospace">fwd </font>by itself probably clashes too mu=
ch.=C2=A0</div></div></blockquote><div><br></div><div>Would postfix <span s=
tyle=3D"font-family: courier new, monospace;">fwd</span> clash with anythin=
g?<br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/86bcd4b9-180b-41fa-8f84-d2b4f52219b1%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/86bcd4b9-180b-41fa-8f84-d2b4f52219b1=
%40isocpp.org</a>.<br />
------=_Part_30141_1613486483.1527628907013--
------=_Part_30140_798907074.1527628907013--
.
Author: mihailnajdenov@gmail.com
Date: Wed, 30 May 2018 00:33:40 -0700 (PDT)
Raw View
------=_Part_42942_1903883607.1527665620808
Content-Type: multipart/alternative;
boundary="----=_Part_42943_1100704109.1527665620808"
------=_Part_42943_1100704109.1527665620808
Content-Type: text/plain; charset="UTF-8"
On Tuesday, May 29, 2018 at 11:18:31 PM UTC+3, Barry Revzin wrote:
>
>
> On Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, mihailn...@gmail.com wrote:
>>
>>
>> That's it. Comments (and alternatives) are welcome.
>>
>
> As already mentioned in this thread, I have previously proposed a [prefix]
> forwarding operator that was rejected by EWG fairly strongly (vote was 2 |
> 0 | 1 | 12 | 7). I have no reason to believe from that discussion that the
> any of the issues were prefix-related, so I don't think a postfix
> forwarding operator would help. Using fwdexpr as a keyword (along the
> lines of sizeof and decltype) had tepid favor (0 | 7 | 4 | 4 | 1), so
> that's the direction that this idea would need to go towards.
>
Hello, and thanks for the feedback, I see You are the original author of
the previous frw op proposal.
As I understand that vote was for that concrete operator. I also understand
a new operator alternative was not found in prefix space exclusively and
that lead to keyword approach.
That is my understanding of the situation.
The situation is a bit different this time in two aspects.
*First*, this proposal is as much as merging forward and move as is to use
an operator (I assume You believe an op is the more natural, considering
you suggested it as well)
Now, along with other benefits to the language, *an opportunity is open to
use a keyword outside the space of "forward" lingo*, as this is a new
encompassing operation.
*Second*, as I already said, the prefix-ness of an operator is a source of
(at least some of) the problems.
- It is very hard to use && - the established symbol for a reference.
- The left-tor-right notion of forward/move of the > symbol will always
point *into* the variable, which will always create problems in assignment
x = =>x, x = >>x, x = ~>x
- The < symbol as a an alternative is almost impossible to use: <=x, <&x,
<&&x, <~x. All these *are nogo as prefix but possible* *as postfix*!
- The tide, in C++ associated with a destruction, is close to impossible
to use as well.
As you can see two new routs are established to move this, and as
consequence yours, proposal forward. I haven't explored the first rout,
because I find it inferior, and I believe You too, considering Your
proposal is for an operator, but I might give it a go as back up plan.
--
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/d238cb89-1fbe-4ba5-b5d8-a12fba1cba78%40isocpp.org.
------=_Part_42943_1100704109.1527665620808
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Tuesday, May 29, 2018 at 11:18:31 PM UTC+3, Bar=
ry Revzin wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"lt=
r"><br>On Tuesday, May 29, 2018 at 1:46:16 PM UTC-5, <a>mihailn...@gmail.co=
m</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left=
:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><=
br></div><div>That's it. Comments (and alternatives) are welcome.<br></=
div></div></blockquote><div><br></div><div>As already mentioned in this thr=
ead, I have previously proposed a [prefix] forwarding operator that was rej=
ected by EWG fairly strongly (vote was 2 | 0 | 1 | 12 | 7). I have no reaso=
n to believe from that discussion that the any of the issues were prefix-re=
lated, so I don't think a postfix forwarding operator would help. Using=
<font face=3D"courier new, monospace">fwdexpr </font>as a keyword (along t=
he lines of <font face=3D"courier new, monospace">sizeof </font>and <font f=
ace=3D"courier new, monospace">decltype)=C2=A0</font>had tepid favor (0 | 7=
| 4 | 4 | 1), so that's the direction that this idea would need to go =
towards.=C2=A0</div></div></blockquote><div><br></div><div>Hello, and thank=
s for the feedback, I see You are the original author of the previous frw o=
p proposal.</div><div><br></div><div>As I understand that vote was for that=
concrete operator. I also understand a new operator alternative was not fo=
und in prefix space exclusively and that lead to keyword approach.</div><di=
v>That is my understanding of the situation.=C2=A0</div><div><br></div><div=
>The situation is a bit different this time in two aspects.</div><div><br><=
/div><div><b>First</b>, this proposal is as much as merging forward and mov=
e as is to use an operator (I assume You believe an op is the more natural,=
considering you suggested it as well)<br></div><div>Now, along with other =
benefits to the language, <i>an opportunity is open to use a keyword outsid=
e the space of "forward" lingo</i>, as this is a new encompassing=
operation.</div><div><br></div><div><b>Second</b>, as I already said, the =
prefix-ness of an operator is a source of (at least some of) the problems.<=
/div><div>=C2=A0- It is very hard to use <font face=3D"courier new,monospac=
e">&&</font> <span style=3D"display: inline !important; float: none=
; background-color: transparent; color: rgb(34, 34, 34); font-family: "=
;Arial","Helvetica",sans-serif; font-size: 13px; font-style:=
normal; font-variant: normal; font-weight: 400; letter-spacing: normal; or=
phans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-t=
ransform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-s=
pacing: 0px;">- the established symbol for a reference.</span></div><div><s=
pan style=3D"display: inline !important; float: none; background-color: tra=
nsparent; color: rgb(34, 34, 34); font-family: "Arial","Helv=
etica",sans-serif; font-size: 13px; font-style: normal; font-variant: =
normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: l=
eft; text-decoration: none; text-indent: 0px; text-transform: none; -webkit=
-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">=C2=A0- T=
he left-tor-right notion of forward/move of the <font face=3D"courier new,m=
onospace">></font> symbol will always point <i>into</i> the variable, wh=
ich will always create problems in assignment x =3D =3D>x, x =3D >>=
;x, x =3D ~>x=C2=A0</span></div><div>=C2=A0- The <font face=3D"courier n=
ew,monospace"><</font> symbol as a an alternative is almost impossible t=
o use: <font face=3D"courier new,monospace"><=3Dx, <&x, <&=
&x, <~x.</font><font face=3D"arial,sans-serif"> All these <i>are nog=
o as prefix but possible</i> <i>as postfix</i>!</font></div><div><font face=
=3D"arial,sans-serif">=C2=A0- The tide, in C++ associated with a destructio=
n, is close to impossible to use as well.</font></div><div><font face=3D"ar=
ial,sans-serif"><br></font></div><div><font face=3D"arial,sans-serif">As yo=
u can see two new routs are established to move this, and as consequence yo=
urs, proposal forward. I haven't explored the first rout, because I fin=
d it inferior, and I believe You too, considering Your proposal is for an o=
perator, but I might give it a go as back up plan. =C2=A0</font><br></div><=
div><font face=3D"courier new,monospace"></font><font face=3D"courier new,m=
onospace"></font><font face=3D"arial,sans-serif"></font><br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/d238cb89-1fbe-4ba5-b5d8-a12fba1cba78%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/d238cb89-1fbe-4ba5-b5d8-a12fba1cba78=
%40isocpp.org</a>.<br />
------=_Part_42943_1100704109.1527665620808--
------=_Part_42942_1903883607.1527665620808--
.
Author: mihailnajdenov@gmail.com
Date: Thu, 31 May 2018 01:05:12 -0700 (PDT)
Raw View
------=_Part_2686_317291908.1527753912339
Content-Type: multipart/alternative;
boundary="----=_Part_2687_976217084.1527753912341"
------=_Part_2687_976217084.1527753912341
Content-Type: text/plain; charset="UTF-8"
On Tuesday, May 29, 2018 at 1:23:07 AM UTC+3, Richard Hodges wrote:
>
> Anyone proposing adding another operator to c++ has clearly not recently
> had to teach the language or maintain code.
>
> forward (or give, or similar) should be a keyword. I know the committee
> fears adding keywords, but this fear is unfounded. The constant
> hoop-jumping merely to avoid the inevitable simply creates technical debt
> which will impede design choices in the future.
>
>
Ok, so I decided to play around with the a possible keyword. Here's what I
came up with.
giveop
giveup
givein
giveof
giveovr
- . -
passon
passop
passin
passof
passovr
- . -
handin
handovr
These are self-explanatory.
- . -
Two unorthodox variants
func givn (args givn...)
or
func taken (args taken...)
As you can see, as postfix.
And BTW, purely from language standpoint other keywords can work as postfix
as giveovr, handin etc
- . -
remit
Odd, but short and probably not taken. "refer (a matter for decision) to
some authority."
- . -
letgo
- . -
convey
Self-explanatory and should be usable as-is.
There is also the category of words, stressing on the fact variable is no
longer used in the current context.
vacate
- . -
evict
- . -
layof
Granted, these are less suited for forward and more for move. Still, the
benefit is the strong do-not-use waring.
IMO pass "wins" as it fits perfectly with forward - *argument passing *AND
fixes an annoying confusions with move, were
* a)* one can move const objects.
*b) *move-might-not-move
If you use pass, visually you are not laying by saying you are moving - you
just pass the object ant trust, the compiler it will transfer it the best
way.
Needless to say, I still believe an operator is the better option (see
pre-previous post), exactly because we don't have come up with a name
(among other things)!
Comments are welcome. Thank You.
--
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/45954c2a-d722-4f42-b491-564b07f7fd77%40isocpp.org.
------=_Part_2687_976217084.1527753912341
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Tuesday, May 29, 2018 at 1:23:07 AM UTC+3, Rich=
ard Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr">Anyone proposing adding another operator to c++ has clearly not recentl=
y had to teach the language or maintain code.<div><br></div><div><font face=
=3D"monospace, monospace">forward</font> (or <font face=3D"monospace, monos=
pace">give</font>, or similar) should be a keyword. I know the committee fe=
ars adding keywords, but this fear is unfounded. The constant hoop-jumping =
merely to avoid the inevitable simply creates technical debt which will imp=
ede design choices in the future.</div><div><br></div></div></blockquote><d=
iv><br></div><div>Ok, so I decided to play around with the a possible keywo=
rd. Here's what I came up with.<br></div><div><b></b><br></div><div><fo=
nt face=3D"courier new,monospace">giveop</font></div><div><font face=3D"cou=
rier new,monospace">giveup</font></div><div><font face=3D"courier new,monos=
pace">givein</font></div><div><font face=3D"courier new,monospace">giveof</=
font></div><div><font face=3D"courier new,monospace">giveovr</font></div><d=
iv><font face=3D"courier new,monospace"><br></font></div><div><font face=3D=
"courier new,monospace"><div style=3D"background-color: transparent; border=
-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wi=
dth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-imag=
e-slice: 100%; border-image-source: none; border-image-width: 1; border-lef=
t-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; bor=
der-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&am=
p;quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-sty=
le: normal; font-variant: normal; font-weight: 400; letter-spacing: normal;=
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; =
orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pad=
ding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; t=
ext-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; w=
ord-spacing: 0px;"><font face=3D"arial,sans-serif" style=3D"border-bottom-c=
olor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px;=
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: =
100%; border-image-source: none; border-image-width: 1; border-left-color: =
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-ri=
ght-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0=
px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-w=
idth: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-=
top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px;"><span style=3D"background-color: transparent; border-bottom-c=
olor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px;=
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: =
100%; border-image-source: none; border-image-width: 1; border-left-color: =
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-ri=
ght-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0=
px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-w=
idth: 0px; color: rgb(34, 34, 34); display: inline; float: none; font-famil=
y: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: nor=
mal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-l=
eft: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0=
px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: le=
ft; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-=
text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><span styl=
e=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); b=
order-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0;=
border-image-repeat: stretch; border-image-slice: 100%; border-image-sourc=
e: none; border-image-width: 1; 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: rg=
b(34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34=
, 34, 34); display: inline; float: none; font-family: courier new,monospace=
; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 4=
00; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-ri=
ght: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0=
px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration=
: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: =
0px; white-space: normal; word-spacing: 0px;">- . -</span></span></font></d=
iv><div style=3D"background-color: transparent; border-bottom-color: rgb(34=
, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-imag=
e-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border=
-image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, =
34); border-left-style: none; border-left-width: 0px; border-right-color: r=
gb(34, 34, 34); border-right-style: none; border-right-width: 0px; border-t=
op-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; c=
olor: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Hel=
vetica&quot;,sans-serif; font-size: 13px; font-style: normal; font-vari=
ant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; =
margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-b=
ottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-a=
lign: left; text-decoration: none; text-indent: 0px; text-transform: none; =
-webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><f=
ont face=3D"arial,sans-serif" style=3D"border-bottom-color: rgb(34, 34, 34)=
; border-bottom-style: none; border-bottom-width: 0px; border-image-outset:=
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-so=
urce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); bord=
er-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-bot=
tom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bot=
tom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span s=
tyle=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34)=
; border-bottom-style: none; border-bottom-width: 0px; border-image-outset:=
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-so=
urce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); bord=
er-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; color: rgb=
(34, 34, 34); display: inline; float: none; font-family: arial,sans-serif; =
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400=
; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-righ=
t: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px=
; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: =
none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0p=
x; white-space: normal; word-spacing: 0px;"><span style=3D"background-color=
: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: n=
one; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat:=
stretch; border-image-slice: 100%; border-image-source: none; border-image=
-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bor=
der-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-styl=
e: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border=
-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); display: i=
nline; float: none; font-family: courier new,monospace; font-size: 13px; fo=
nt-style: normal; font-variant: normal; font-weight: 400; letter-spacing: n=
ormal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top:=
0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0p=
x; padding-top: 0px; text-align: left; text-decoration: none; text-indent: =
0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: nor=
mal; word-spacing: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34);=
border-bottom-style: none; border-bottom-width: 0px; border-image-outset: =
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-sou=
rce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); borde=
r-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-bott=
om: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bott=
om: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></span><=
/span></font></div><div style=3D"background-color: transparent; border-bott=
om-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: =
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sli=
ce: 100%; border-image-source: none; border-image-width: 1; border-left-col=
or: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; borde=
r-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-t=
op-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quo=
t;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: n=
ormal; font-variant: normal; font-weight: 400; letter-spacing: normal; marg=
in-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orpha=
ns: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-=
top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-t=
ransform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-s=
pacing: 0px;"><font face=3D"arial,sans-serif" style=3D"border-bottom-color:=
rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bord=
er-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%;=
border-image-source: none; border-image-width: 1; border-left-color: rgb(3=
4, 34, 34); border-left-style: none; border-left-width: 0px; border-right-c=
olor: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; b=
order-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: 0px; padding-right: 0px; padding-to=
p: 0px;"><span style=3D"background-color: transparent; border-bottom-color:=
rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bord=
er-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%;=
border-image-source: none; border-image-width: 1; border-left-color: rgb(3=
4, 34, 34); border-left-style: none; border-left-width: 0px; border-right-c=
olor: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; b=
order-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width:=
0px; color: rgb(34, 34, 34); display: inline; float: none; font-family: ar=
ial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; =
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: =
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; p=
adding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; t=
ext-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-=
stroke-width: 0px; white-space: normal; word-spacing: 0px;"><span style=3D"=
background-color: transparent; border-bottom-color: rgb(34, 34, 34); border=
-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; bord=
er-image-repeat: stretch; border-image-slice: 100%; border-image-source: no=
ne; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-=
style: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); b=
order-right-style: none; border-right-width: 0px; border-top-color: rgb(34,=
34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34,=
34); display: inline; float: none; font-family: courier new,monospace; fon=
t-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; l=
etter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: =
0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; p=
adding-right: 0px; padding-top: 0px; text-align: left; text-decoration: non=
e; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; =
white-space: normal; word-spacing: 0px;">passon</span></span></font></div><=
div style=3D"background-color: transparent; border-bottom-color: rgb(34, 34=
, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-ou=
tset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-ima=
ge-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34);=
border-left-style: none; border-left-width: 0px; border-right-color: rgb(3=
4, 34, 34); border-right-style: none; border-right-width: 0px; border-top-c=
olor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color=
: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Helveti=
ca&quot;,sans-serif; font-size: 13px; font-style: normal; font-variant:=
normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; marg=
in-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-botto=
m: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align=
: left; text-decoration: none; text-indent: 0px; text-transform: none; -web=
kit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font =
face=3D"arial,sans-serif" style=3D"border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-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: 0px; padding-right: 0px; padding-top: 0px;"><span style=
=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-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; color: rgb(34,=
34, 34); display: inline; float: none; font-family: arial,sans-serif; font=
-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; le=
tter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0=
px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; pa=
dding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none=
; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; w=
hite-space: normal; word-spacing: 0px;"><span style=3D"background-color: tr=
ansparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none;=
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: str=
etch; border-image-slice: 100%; border-image-source: none; border-image-wid=
th: 1; 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: n=
one; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top=
-style: none; border-top-width: 0px; color: rgb(34, 34, 34); display: inlin=
e; float: none; font-family: courier new,monospace; font-size: 13px; font-s=
tyle: normal; font-variant: normal; font-weight: 400; letter-spacing: norma=
l; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px=
; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; p=
adding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px;=
text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal;=
word-spacing: 0px;">passop</span></span></font></div><div style=3D"backgro=
und-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom=
-style: none; border-bottom-width: 0px; border-image-outset: 0; border-imag=
e-repeat: stretch; border-image-slice: 100%; border-image-source: none; bor=
der-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: =
none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-r=
ight-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34=
); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); f=
ont-family: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-se=
rif; font-size: 13px; font-style: normal; font-variant: normal; font-weight=
: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin=
-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left=
: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decorat=
ion: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-widt=
h: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"arial,sans-s=
erif" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: n=
one; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat:=
stretch; border-image-slice: 100%; border-image-source: none; border-image=
-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bor=
der-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-styl=
e: 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: 0=
px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: =
0px; padding-right: 0px; padding-top: 0px;"><span style=3D"background-color=
: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: n=
one; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat:=
stretch; border-image-slice: 100%; border-image-source: none; border-image=
-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bor=
der-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-styl=
e: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border=
-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); display: i=
nline; float: none; font-family: arial,sans-serif; font-size: 13px; font-st=
yle: normal; font-variant: normal; font-weight: 400; letter-spacing: normal=
; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;=
orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pa=
dding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; =
text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; =
word-spacing: 0px;"><span style=3D"background-color: transparent; border-bo=
ttom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width=
: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-s=
lice: 100%; border-image-source: none; border-image-width: 1; border-left-c=
olor: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bor=
der-right-color: rgb(34, 34, 34); border-right-style: none; border-right-wi=
dth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; border=
-top-width: 0px; color: rgb(34, 34, 34); display: inline; float: none; font=
-family: courier new,monospace; font-size: 13px; font-style: normal; font-v=
ariant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0p=
x; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; paddin=
g-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; tex=
t-align: left; text-decoration: none; text-indent: 0px; text-transform: non=
e; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"=
>passin</span></span></font></div><div style=3D"background-color: transpare=
nt; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style:=
none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quo=
t;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px=
; font-style: normal; font-variant: normal; font-weight: 400; letter-spacin=
g: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-=
top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right=
: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-inde=
nt: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space:=
normal; word-spacing: 0px;"><font face=3D"arial,sans-serif" style=3D"borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; 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-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: =
0px; padding-top: 0px;"><span style=3D"background-color: transparent; borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; 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-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; color: rgb(34, 34, 34); display: inline; float: none; =
font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-va=
riant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px=
; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding=
-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text=
-align: left; text-decoration: none; text-indent: 0px; text-transform: none=
; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">=
<span style=3D"background-color: transparent; border-bottom-color: rgb(34, =
34, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-=
outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-i=
mage-source: none; border-image-width: 1; 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; col=
or: rgb(34, 34, 34); display: inline; float: none; font-family: courier new=
,monospace; font-size: 13px; font-style: normal; font-variant: normal; font=
-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px;=
margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; paddi=
ng-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-=
decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stro=
ke-width: 0px; white-space: normal; word-spacing: 0px;">passof</span></span=
></font></div><div style=3D"background-color: transparent; border-bottom-co=
lor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; =
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: 1=
00%; border-image-source: none; border-image-width: 1; border-left-color: r=
gb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-rig=
ht-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0p=
x; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-wi=
dth: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&a=
mp;quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: normal=
; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bo=
ttom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2=
; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: =
0px; text-align: left; text-decoration: none; text-indent: 0px; text-transf=
orm: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacin=
g: 0px;"><font face=3D"arial,sans-serif" style=3D"border-bottom-color: rgb(=
34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-im=
age-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bord=
er-image-source: none; border-image-width: 1; 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: 0px; padding-right: 0px; padding-top: 0p=
x;"><span style=3D"background-color: transparent; border-bottom-color: rgb(=
34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-im=
age-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bord=
er-image-source: none; border-image-width: 1; 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;=
color: rgb(34, 34, 34); display: inline; float: none; font-family: arial,s=
ans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-=
weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; =
margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; paddin=
g-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-d=
ecoration: none; text-indent: 0px; text-transform: none; -webkit-text-strok=
e-width: 0px; white-space: normal; word-spacing: 0px;"><span style=3D"backg=
round-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bott=
om-style: none; border-bottom-width: 0px; border-image-outset: 0; border-im=
age-repeat: stretch; border-image-slice: 100%; border-image-source: none; b=
order-image-width: 1; 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; color: rgb(34, 34, 34);=
display: inline; float: none; font-family: courier new,monospace; font-siz=
e: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter=
-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; =
margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; paddin=
g-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; te=
xt-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white=
-space: normal; word-spacing: 0px;">passovr</span></span></font><br></div><=
b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><br></font></div=
><div><font face=3D"courier new,monospace"><div style=3D"background-color: =
transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: non=
e; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: s=
tretch; border-image-slice: 100%; border-image-source: none; border-image-w=
idth: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; borde=
r-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-t=
op-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family:=
&quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-s=
ize: 13px; font-style: normal; font-variant: normal; font-weight: 400; lett=
er-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px=
; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padd=
ing-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; =
text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; whi=
te-space: normal; word-spacing: 0px;"><font face=3D"arial,sans-serif" style=
=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-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: 0px; paddin=
g-right: 0px; padding-top: 0px;"><span style=3D"background-color: transpare=
nt; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style:=
none; border-top-width: 0px; color: rgb(34, 34, 34); display: inline; floa=
t: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal=
; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bo=
ttom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2=
; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: =
0px; text-align: left; text-decoration: none; text-indent: 0px; text-transf=
orm: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacin=
g: 0px;"><span style=3D"background-color: transparent; border-bottom-color:=
rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bord=
er-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%;=
border-image-source: none; border-image-width: 1; border-left-color: rgb(3=
4, 34, 34); border-left-style: none; border-left-width: 0px; border-right-c=
olor: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; b=
order-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width:=
0px; color: rgb(34, 34, 34); display: inline; float: none; font-family: co=
urier new,monospace; font-size: 13px; font-style: normal; font-variant: nor=
mal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-l=
eft: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0=
px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: le=
ft; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-=
text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">- . -</spa=
n></span></font></div><div style=3D"background-color: transparent; border-b=
ottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-widt=
h: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-=
slice: 100%; border-image-source: none; border-image-width: 1; border-left-=
color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bo=
rder-right-color: rgb(34, 34, 34); border-right-style: none; border-right-w=
idth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; borde=
r-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&=
quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style=
: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; m=
argin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; or=
phans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; tex=
t-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wor=
d-spacing: 0px;"><font face=3D"arial,sans-serif" style=3D"border-bottom-col=
or: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; b=
order-image-outset: 0; border-image-repeat: stretch; border-image-slice: 10=
0%; border-image-source: none; border-image-width: 1; border-left-color: rg=
b(34, 34, 34); border-left-style: none; border-left-width: 0px; border-righ=
t-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-wid=
th: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-to=
p: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding=
-top: 0px;"><span style=3D"background-color: transparent; border-bottom-col=
or: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; b=
order-image-outset: 0; border-image-repeat: stretch; border-image-slice: 10=
0%; border-image-source: none; border-image-width: 1; border-left-color: rg=
b(34, 34, 34); border-left-style: none; border-left-width: 0px; border-righ=
t-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-wid=
th: 0px; color: rgb(34, 34, 34); display: inline; float: none; font-family:=
arial,sans-serif; font-size: 13px; font-style: normal; font-variant: norma=
l; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-lef=
t: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px=
; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left=
; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-te=
xt-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><span style=
=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-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; color: rgb(34,=
34, 34); display: inline; float: none; font-family: courier new,monospace;=
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 40=
0; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-rig=
ht: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0p=
x; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration:=
none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0=
px; white-space: normal; word-spacing: 0px;"><br style=3D"border-bottom-col=
or: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; b=
order-image-outset: 0; border-image-repeat: stretch; border-image-slice: 10=
0%; border-image-source: none; border-image-width: 1; border-left-color: rg=
b(34, 34, 34); border-left-style: none; border-left-width: 0px; border-righ=
t-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-wid=
th: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-to=
p: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding=
-top: 0px;"></span></span></font></div><div style=3D"background-color: tran=
sparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; b=
order-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stret=
ch; border-image-slice: 100%; border-image-source: none; border-image-width=
: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-le=
ft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: non=
e; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-s=
tyle: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &am=
p;quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-size:=
13px; font-style: normal; font-variant: normal; font-weight: 400; letter-s=
pacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; ma=
rgin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-=
right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text=
-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-s=
pace: normal; word-spacing: 0px;"><font face=3D"arial,sans-serif" style=3D"=
border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bot=
tom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; borde=
r-image-slice: 100%; border-image-source: none; border-image-width: 1; bord=
er-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: non=
e; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-righ=
t: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-ri=
ght: 0px; padding-top: 0px;"><span style=3D"background-color: transparent; =
border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bot=
tom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; borde=
r-image-slice: 100%; border-image-source: none; border-image-width: 1; bord=
er-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: non=
e; border-top-width: 0px; color: rgb(34, 34, 34); display: inline; float: n=
one; font-family: arial,sans-serif; font-size: 13px; font-style: normal; fo=
nt-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom=
: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; pa=
dding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;=
text-align: left; text-decoration: none; text-indent: 0px; text-transform:=
none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0=
px;"><span style=3D"background-color: transparent; border-bottom-color: rgb=
(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-i=
mage-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bor=
der-image-source: none; border-image-width: 1; border-left-color: rgb(34, 3=
4, 34); border-left-style: none; border-left-width: 0px; border-right-color=
: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; borde=
r-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px=
; color: rgb(34, 34, 34); display: inline; float: none; font-family: courie=
r new,monospace; font-size: 13px; font-style: normal; font-variant: normal;=
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left:=
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; =
padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; =
text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text=
-stroke-width: 0px; white-space: normal; word-spacing: 0px;">handin</span><=
/span></font></div></font><div style=3D"background-color: transparent; bord=
er-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-=
width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-im=
age-slice: 100%; border-image-source: none; border-image-width: 1; border-l=
eft-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-rig=
ht-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; b=
order-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&=
amp;quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-s=
tyle: normal; font-variant: normal; font-weight: 400; letter-spacing: norma=
l; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px=
; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; p=
adding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px;=
text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal;=
word-spacing: 0px;"><font face=3D"courier new,monospace"><font face=3D"ari=
al,sans-serif" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom=
-style: none; border-bottom-width: 0px; border-image-outset: 0; border-imag=
e-repeat: stretch; border-image-slice: 100%; border-image-source: none; bor=
der-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: =
none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-r=
ight-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34=
); border-top-style: none; border-top-width: 0px; margin-bottom: 0px; margi=
n-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; paddi=
ng-left: 0px; padding-right: 0px; padding-top: 0px;"><span style=3D"backgro=
und-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom=
-style: none; border-bottom-width: 0px; border-image-outset: 0; border-imag=
e-repeat: stretch; border-image-slice: 100%; border-image-source: none; bor=
der-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: =
none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-r=
ight-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34=
); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); d=
isplay: inline; float: none; font-family: arial,sans-serif; font-size: 13px=
; font-style: normal; font-variant: normal; font-weight: 400; letter-spacin=
g: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-=
top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right=
: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-inde=
nt: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space:=
normal; word-spacing: 0px;"><span style=3D"background-color: transparent; =
border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bot=
tom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; borde=
r-image-slice: 100%; border-image-source: none; border-image-width: 1; bord=
er-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: non=
e; border-top-width: 0px; color: rgb(34, 34, 34); display: inline; float: n=
one; font-family: courier new,monospace; font-size: 13px; font-style: norma=
l; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-b=
ottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: =
2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top:=
0px; text-align: left; text-decoration: none; text-indent: 0px; text-trans=
form: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spaci=
ng: 0px;">handovr</span></span></font></font></div><div style=3D"background=
-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-st=
yle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-r=
epeat: stretch; border-image-slice: 100%; border-image-source: none; border=
-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: non=
e; 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-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font=
-family: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif=
; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 4=
00; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-ri=
ght: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0=
px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration=
: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: =
0px; white-space: normal; word-spacing: 0px;"><font face=3D"courier new,mon=
ospace"><font face=3D"arial,sans-serif" style=3D"border-bottom-color: rgb(3=
4, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-ima=
ge-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; borde=
r-image-source: none; border-image-width: 1; 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; p=
adding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px=
;"><span style=3D"background-color: transparent; border-bottom-color: rgb(3=
4, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-ima=
ge-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; borde=
r-image-source: none; border-image-width: 1; 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; =
color: rgb(34, 34, 34); display: inline; float: none; font-family: arial,sa=
ns-serif; font-size: 13px; font-style: normal; font-variant: normal; font-w=
eight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; m=
argin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding=
-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-de=
coration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke=
-width: 0px; white-space: normal; word-spacing: 0px;"><span style=3D"backgr=
ound-color: transparent; border-bottom-color: rgb(34, 34, 34); border-botto=
m-style: none; border-bottom-width: 0px; border-image-outset: 0; border-ima=
ge-repeat: stretch; border-image-slice: 100%; border-image-source: none; bo=
rder-image-width: 1; 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, 3=
4); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); =
display: inline; float: none; font-family: courier new,monospace; font-size=
: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter-=
spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; m=
argin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding=
-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; tex=
t-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-=
space: normal; word-spacing: 0px;"></span></span></font></font><font face=
=3D"courier new,monospace"><font face=3D""Arial","Helvetica&=
quot;,sans-serif"></font><br></font></div></div><div><font face=3D"arial,sa=
ns-serif">These are self-explanatory.=C2=A0</font></div><div><font face=3D"=
arial,sans-serif"><br></font></div><div><font face=3D"arial,sans-serif"><sp=
an style=3D"display: inline !important; float: none; background-color: tran=
sparent; color: rgb(34, 34, 34); font-family: courier new,monospace; font-s=
ize: 13px; font-style: normal; font-variant: normal; font-weight: 400; lett=
er-spacing: normal; orphans: 2; text-align: left; text-decoration: none; te=
xt-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white=
-space: normal; word-spacing: 0px;">- . -</span></font></div><div><font fac=
e=3D"arial,sans-serif"><b></b><i></i><u></u><sub></sub><sup></sup><strike><=
/strike><br></font></div><div><font face=3D"arial,sans-serif">Two unorthodo=
x variants</font></div><div><font face=3D"courier new,monospace"></font><br=
></div><div><font face=3D"courier new,monospace">func givn (args givn...)</=
font><br></div><div>or</div><div><span style=3D"display: inline !important;=
float: none; background-color: transparent; color: rgb(34, 34, 34); font-f=
amily: courier new,monospace; font-size: 13px; font-style: normal; font-var=
iant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-al=
ign: left; text-decoration: none; text-indent: 0px; text-transform: none; -=
webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">fun=
c taken (args taken...)</span></div><div><br></div><div>As you can see, as =
postfix.</div><div><br></div><div>And BTW, purely from language standpoint =
other keywords can work as postfix as <font face=3D"courier new,monospace">=
giveovr</font><font face=3D"arial,sans-serif">, </font><span style=3D"displ=
ay: inline !important; float: none; background-color: transparent; color: r=
gb(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-s=
tyle: normal; font-variant: normal; font-weight: 400; letter-spacing: norma=
l; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; t=
ext-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; w=
ord-spacing: 0px;">handin <font face=3D"arial,sans-serif">etc</font></span>=
</div><div><font face=3D"courier new,monospace"><b></b><i></i><u></u><sub><=
/sub><sup></sup><strike></strike><font face=3D"arial,sans-serif"></font><br=
></font></div><div><font face=3D"courier new,monospace">- . -</font></div><=
div><font face=3D"courier new,monospace"><br></font></div><div><font face=
=3D"courier new,monospace">remit</font></div><div><font face=3D"courier new=
,monospace"><br></font></div><div><font face=3D"arial,sans-serif">Odd, but =
short and probably not taken. "<span style=3D"display: inline !importa=
nt; float: none; background-color: transparent; color: rgb(34, 34, 34); fon=
t-family: arial,sans-serif; font-size: 13px; font-style: normal; font-varia=
nt: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-alig=
n: left; text-decoration: none; text-indent: 0px; text-transform: none; -we=
bkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">refer=
(a matter for decision) to some authority."</span></font></div><div><=
font face=3D"arial,sans-serif"><span style=3D"display: inline !important; f=
loat: none; background-color: transparent; color: rgb(34, 34, 34); font-fam=
ily: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: n=
ormal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: le=
ft; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-=
text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><br></span=
></font></div><div><font face=3D"arial,sans-serif"><span style=3D"text-alig=
n: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px; le=
tter-spacing: normal; font-family: arial,sans-serif; font-size: 13px; font-=
variant: normal; word-spacing: 0px; display: inline !important; white-space=
: normal; orphans: 2; float: none; -webkit-text-stroke-width: 0px; backgrou=
nd-color: transparent;"><span style=3D"text-align: left; color: rgb(34, 34,=
34); text-transform: none; text-indent: 0px; letter-spacing: normal; font-=
family: courier new,monospace; font-size: 13px; font-variant: normal; word-=
spacing: 0px; display: inline !important; white-space: normal; orphans: 2; =
float: none; -webkit-text-stroke-width: 0px; background-color: transparent;=
"><span style=3D"display: inline !important; float: none; background-color:=
transparent; color: rgb(34, 34, 34); font-family: courier new,monospace; f=
ont-size: 13px; font-style: normal; font-variant: normal; font-weight: 400;=
letter-spacing: normal; orphans: 2; text-align: left; text-decoration: non=
e; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; =
white-space: normal; word-spacing: 0px;">- . -</span></span></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-indent: 0px; letter-spac=
ing: normal; font-family: arial,sans-serif; font-size: 13px; font-variant: =
normal; word-spacing: 0px; display: inline !important; white-space: normal;=
orphans: 2; float: none; -webkit-text-stroke-width: 0px; background-color:=
transparent;"><span style=3D"text-align: left; color: rgb(34, 34, 34); tex=
t-transform: none; text-indent: 0px; letter-spacing: normal; font-family: c=
ourier new,monospace; font-size: 13px; font-variant: normal; word-spacing: =
0px; display: inline !important; white-space: normal; orphans: 2; float: no=
ne; -webkit-text-stroke-width: 0px; background-color: transparent;"><b></b>=
<i></i><u></u><sub></sub><sup></sup><strike></strike><br></span></span></fo=
nt></div><div><font face=3D"arial,sans-serif"><span style=3D"text-align: le=
ft; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px; letter-=
spacing: normal; font-family: arial,sans-serif; font-size: 13px; font-varia=
nt: normal; word-spacing: 0px; display: inline !important; white-space: nor=
mal; orphans: 2; float: none; -webkit-text-stroke-width: 0px; background-co=
lor: transparent;"><span style=3D"text-align: left; color: rgb(34, 34, 34);=
text-transform: none; text-indent: 0px; letter-spacing: normal; font-famil=
y: courier new,monospace; font-size: 13px; font-variant: normal; word-spaci=
ng: 0px; display: inline !important; white-space: normal; orphans: 2; float=
: none; -webkit-text-stroke-width: 0px; background-color: transparent;">let=
go</span></span></font></div><div><font face=3D"arial,sans-serif"><span sty=
le=3D"text-align: left; color: rgb(34, 34, 34); text-transform: none; text-=
indent: 0px; letter-spacing: normal; font-family: arial,sans-serif; font-si=
ze: 13px; font-variant: normal; word-spacing: 0px; display: inline !importa=
nt; white-space: normal; orphans: 2; float: none; -webkit-text-stroke-width=
: 0px; background-color: transparent;"><br></span></font></div><div><span s=
tyle=3D"display: inline !important; float: none; background-color: transpar=
ent; color: rgb(34, 34, 34); font-family: courier new,monospace; font-size:=
13px; font-style: normal; font-variant: normal; font-weight: 400; letter-s=
pacing: normal; orphans: 2; text-align: left; text-decoration: none; text-i=
ndent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-spa=
ce: normal; word-spacing: 0px;">- . -</span></div><div><b></b><i></i><u></u=
><sub></sub><sup></sup><strike></strike><br></div><div><font face=3D"courie=
r new,monospace">convey</font></div><div><font face=3D"courier new,monospac=
e"></font><br></div><div><span style=3D"display: inline !important; float: =
none; background-color: transparent; color: rgb(34, 34, 34); font-family: a=
rial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal;=
font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; te=
xt-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-s=
troke-width: 0px; white-space: normal; word-spacing: 0px;">S</span><span st=
yle=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34);=
border-bottom-style: none; border-bottom-width: 0px; border-image-outset: =
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-sou=
rce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); borde=
r-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; color: rgb(=
34, 34, 34); display: inline; float: none; font-family: arial,sans-serif; f=
ont-size: 13px; font-style: normal; font-variant: normal; font-weight: 400;=
letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right=
: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px;=
padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: n=
one; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px=
; white-space: normal; word-spacing: 0px;"><span style=3D"background-color:=
transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-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; color: rgb(34, 34, 34); display: in=
line; float: none; font-family: arial,sans-serif; font-size: 13px; font-sty=
le: normal; font-variant: normal; font-weight: 400; letter-spacing: normal;=
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; =
orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pad=
ding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; t=
ext-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; w=
ord-spacing: 0px;"><span style=3D"background-color: transparent; border-bot=
tom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width:=
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sl=
ice: 100%; border-image-source: none; border-image-width: 1; border-left-co=
lor: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bord=
er-right-color: rgb(34, 34, 34); border-right-style: none; border-right-wid=
th: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-=
top-width: 0px; color: rgb(34, 34, 34); display: inline; float: none; font-=
family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant=
: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; mar=
gin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bott=
om: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-alig=
n: left; text-decoration: none; text-indent: 0px; text-transform: none; -we=
bkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">elf-e=
xplanatory and should be usable as-is.=C2=A0</span></span></span></div><div=
><span style=3D"background-color: transparent; border-bottom-color: rgb(34,=
34, 34); border-bottom-style: none; border-bottom-width: 0px; border-image=
-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-=
image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 3=
4); border-left-style: none; border-left-width: 0px; border-right-color: rg=
b(34, 34, 34); border-right-style: none; border-right-width: 0px; border-to=
p-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; co=
lor: rgb(34, 34, 34); display: inline; float: none; font-family: arial,sans=
-serif; font-size: 13px; font-style: normal; font-variant: normal; font-wei=
ght: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; mar=
gin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-l=
eft: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-deco=
ration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-w=
idth: 0px; white-space: normal; word-spacing: 0px;"><span style=3D"backgrou=
nd-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-=
style: none; border-bottom-width: 0px; border-image-outset: 0; border-image=
-repeat: stretch; border-image-slice: 100%; border-image-source: none; bord=
er-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: n=
one; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-ri=
ght-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34)=
; border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); di=
splay: inline; float: none; font-family: arial,sans-serif; font-size: 13px;=
font-style: normal; font-variant: normal; font-weight: 400; letter-spacing=
: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-t=
op: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right:=
0px; padding-top: 0px; text-align: left; text-decoration: none; text-inden=
t: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: =
normal; word-spacing: 0px;"><span style=3D"background-color: transparent; b=
order-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bott=
om-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border=
-image-slice: 100%; border-image-source: none; border-image-width: 1; borde=
r-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; color: rgb(34, 34, 34); display: inline; float: no=
ne; font-family: arial,sans-serif; font-size: 13px; font-style: normal; fon=
t-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom:=
0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; pad=
ding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; =
text-align: left; text-decoration: none; text-indent: 0px; text-transform: =
none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0p=
x;"><br></span></span></span></div><div><br></div><div><font face=3D"arial,=
sans-serif"><span style=3D"text-align: left; color: rgb(34, 34, 34); text-t=
ransform: none; text-indent: 0px; letter-spacing: normal; font-family: &quo=
t;Arial","Helvetica",sans-serif; font-size: 13px; font-style=
: normal; font-variant: normal; text-decoration: none; word-spacing: 0px; d=
isplay: inline !important; white-space: normal; orphans: 2; float: none; -w=
ebkit-text-stroke-width: 0px; background-color: transparent;">There is also=
the category of words, stressing on the fact variable is no longer used in=
the current context.</span></font><br></div><div><b></b><i></i><u></u><sub=
></sub><sup></sup><strike></strike><b></b><font face=3D"courier new,monospa=
ce"></font><br></div><div><font face=3D"courier new,monospace">vacate</font=
></div><div><font face=3D"courier new,monospace"></font><br></div><div><spa=
n style=3D"display: inline !important; float: none; background-color: trans=
parent; color: rgb(34, 34, 34); font-family: courier new,monospace; font-si=
ze: 13px; font-style: normal; font-variant: normal; font-weight: 400; lette=
r-spacing: normal; orphans: 2; text-align: left; text-decoration: none; tex=
t-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-=
space: normal; word-spacing: 0px;">- . -</span><b></b><i></i><u></u><sub></=
sub><sup></sup><strike></strike><br></div><div><b></b><i></i><u></u><sub></=
sub><sup></sup><strike></strike><br></div><div><font face=3D"courier new,mo=
nospace">evict</font></div><div><font face=3D"courier new,monospace"><br></=
font></div><div><font face=3D"courier new,monospace"><span style=3D"display=
: inline !important; float: none; background-color: transparent; color: rgb=
(34, 34, 34); font-family: courier new,monospace; font-size: 13px; font-sty=
le: normal; font-variant: normal; font-weight: 400; letter-spacing: normal;=
orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; tex=
t-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wor=
d-spacing: 0px;">- . -</span><b></b><i></i><u></u><sub></sub><sup></sup><st=
rike></strike><br></font></div><div><font face=3D"courier new,monospace"></=
font><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><br></div>=
<div><font face=3D"courier new,monospace">layof</font></div><div><font face=
=3D"courier new,monospace"><br></font></div><div><font face=3D"arial,sans-s=
erif">Granted, these are less suited for <font face=3D"courier new,monospac=
e">forward</font> and more for <font face=3D"courier new,monospace">move</f=
ont>. Still, the benefit is the strong do-not-use waring.</font></div><div>=
<font face=3D"arial,sans-serif"><br></font></div><div><font face=3D"arial,s=
ans-serif"><br></font></div><div><font face=3D"arial,sans-serif">IMO <font =
face=3D"courier new,monospace">pass</font> "wins" as it fits perf=
ectly with forward - <i>argument passing </i>AND fixes an annoying confusio=
ns with move, were=C2=A0</font></div><div><font face=3D"arial,sans-serif"><=
b>=C2=A0a)</b> one can move const objects.</font></div><div>=C2=A0<b>b) </b=
>move-might-not-move=C2=A0</div><div><br></div><div>If you use pass, visual=
ly you are not laying by saying you are moving - you just pass the object a=
nt trust, the compiler it will transfer it the best way.</div><div><font fa=
ce=3D"arial,sans-serif"><b></b><b></b><br></font></div><div><font face=3D"a=
rial,sans-serif"><br></font></div><div><font face=3D"arial,sans-serif">Need=
less to say, I still believe an operator is the better option (see pre-prev=
ious post), exactly because we don't have come up with a name (among ot=
her things)!</font></div><div><font face=3D"arial,sans-serif"><br></font></=
div><div><font face=3D"arial,sans-serif"><br></font></div><div><font face=
=3D"arial,sans-serif">Comments are welcome. Thank You.</font></div><div><b>=
</b><i></i><u></u><sub></sub><sup></sup><strike></strike><font face=3D"aria=
l,sans-serif"></font><br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/45954c2a-d722-4f42-b491-564b07f7fd77%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/45954c2a-d722-4f42-b491-564b07f7fd77=
%40isocpp.org</a>.<br />
------=_Part_2687_976217084.1527753912341--
------=_Part_2686_317291908.1527753912339--
.
Author: mihailnajdenov@gmail.com
Date: Thu, 31 May 2018 01:08:40 -0700 (PDT)
Raw View
------=_Part_2670_1390436513.1527754120581
Content-Type: multipart/alternative;
boundary="----=_Part_2671_842014962.1527754120581"
------=_Part_2671_842014962.1527754120581
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Tuesday, May 29, 2018 at 1:23:07 AM UTC+3, Richard Hodges wrote:
>
> Anyone proposing adding another operator to c++ has clearly not recently=
=20
> had to teach the language or maintain code.
>
> forward (or give, or similar) should be a keyword. I know the committee=
=20
> fears adding keywords, but this fear is unfounded. The constant=20
> hoop-jumping merely to avoid the inevitable simply creates technical debt=
=20
> which will impede design choices in the future.
>
Ok, so I decided to play around with the a possible keyword. Here's what I=
=20
came up with.
giveop
giveup
givein
giveof
giveovr
- . -
passon
passop
passin
passof
passovr
- . -
handin
handovr
These are self-explanatory.=20
- . -
Two unorthodox variants
func givn (args givn=E2=80=A6)
or
func taken (args taken...)
As you can see, as postfix.
And BTW, purely from language standpoint other keywords can work as postfix=
=20
as giveovr, handin etc
- . -
remit
Odd, but short and probably not taken. "refer (a matter for decision) to=20
some authority."
- . -
letgo
- . -
convey
Self-explanatory and should be usable as-is.=20
There is also the category of words, stressing on the fact variable is no=
=20
longer used in the current context.
vacate
- . -
evict
- . -
layof
Granted, these are less suited for forward and more for move. Still, the=20
benefit is the strong do-not-use waring.
IMO pass "wins" as it fits perfectly with forward - argument passing AND=20
fixes an annoying confusions with move, were=20
a) one can move const objects.
b) move-might-not-move=20
If you use pass, visually you are not laying by saying you are moving - you=
=20
just pass the object ant trust, the compiler it will transfer it the best=
=20
way.
Needless to say, I still believe an operator is the better option (see=20
pre-previous post), exactly because we don't have come up with a name!
Comments are welcome. =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.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/e7ee5875-c667-488a-80d3-e896ff8af163%40isocpp.or=
g.
------=_Part_2671_842014962.1527754120581
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Tuesday, May 29, 2018 at 1:23:07 AM UTC+3, Rich=
ard Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr">Anyone proposing adding another operator to c++ has clearly not recentl=
y had to teach the language or maintain code.<div><br></div><div><font face=
=3D"monospace, monospace">forward</font> (or <font face=3D"monospace, monos=
pace">give</font>, or similar) should be a keyword. I know the committee fe=
ars adding keywords, but this fear is unfounded. The constant hoop-jumping =
merely to avoid the inevitable simply creates technical debt which will imp=
ede design choices in the future.<br></div></div></blockquote><div><br></di=
v><div><br>Ok, so I decided to play around with the a possible keyword. Her=
e's what I came up with.</div><div><font face=3D"courier new,monospace"=
></font><br></div><div><font face=3D"courier new,monospace">giveop<br>giveu=
p<br>givein<br>giveof<br>giveovr</font></div><div><font face=3D"courier new=
,monospace"><br></font></div><div><font face=3D"courier new,monospace">- . =
-</font></div><div><font face=3D"courier new,monospace"><br></font></div><d=
iv><font face=3D"courier new,monospace">passon<br>passop<br>passin<br>passo=
f<br>passovr</font></div><div><font face=3D"courier new,monospace"><br></fo=
nt></div><div><font face=3D"courier new,monospace">- . -</font></div><div><=
font face=3D"courier new,monospace"><br></font></div><div><font face=3D"cou=
rier new,monospace">handin<br>handovr</font></div><div><font face=3D"courie=
r new,monospace"><br></font></div><div>These are self-explanatory.=C2=A0</d=
iv><div><br></div><div><font face=3D"courier new,monospace">- . -</font></d=
iv><div><font face=3D"courier new,monospace"></font><br></div><div>Two unor=
thodox variants</div><div><br></div><div><font face=3D"courier new,monospac=
e">func givn (args givn=E2=80=A6)</font><br>or<br><font face=3D"courier new=
,monospace">func taken (args taken...)</font></div><div><font face=3D"couri=
er new,monospace"></font><br></div><div>As you can see, as postfix.</div><d=
iv>And BTW, purely from language standpoint other keywords can work as post=
fix as <font face=3D"courier new,monospace">giveovr</font>, <font face=3D"c=
ourier new,monospace">handin</font> etc</div><div><br></div><div><font face=
=3D"courier new,monospace">- . -</font></div><div><font face=3D"courier new=
,monospace"></font><br></div><div><font face=3D"courier new,monospace">remi=
t</font></div><div><font face=3D"courier new,monospace"><br></font></div><d=
iv>Odd, but short and probably not taken. "refer (a matter for decisio=
n) to some authority."</div><div><br></div><div><font face=3D"courier =
new,monospace">- . -</font></div><div><font face=3D"courier new,monospace">=
</font><br></div><div><font face=3D"courier new,monospace">letgo</font></di=
v><div><font face=3D"courier new,monospace"><br></font></div><div><font fac=
e=3D"courier new,monospace">- . -</font></div><div><font face=3D"courier ne=
w,monospace"><br></font></div><div><font face=3D"courier new,monospace">con=
vey</font></div><div><font face=3D"courier new,monospace"><br></font></div>=
<div>Self-explanatory and should be usable as-is. </div><div><br>There is a=
lso the category of words, stressing on the fact variable is no longer used=
in the current context.</div><div><font face=3D"courier new,monospace"></f=
ont><br></div><div><font face=3D"courier new,monospace">vacate</font></div>=
<div><font face=3D"courier new,monospace"></font><br></div><div><font face=
=3D"courier new,monospace">- . -</font></div><div><font face=3D"courier new=
,monospace"></font><br></div><div><font face=3D"courier new,monospace">evic=
t</font></div><div><font face=3D"courier new,monospace"></font><br></div><d=
iv><font face=3D"courier new,monospace">- . -</font></div><div><font face=
=3D"courier new,monospace"></font><br></div><div><font face=3D"courier new,=
monospace">layof</font></div><div><font face=3D"courier new,monospace"></fo=
nt><br></div><div>Granted, these are less suited for forward and more for m=
ove. Still, the benefit is the strong do-not-use waring.</div><div><br>IMO =
<font face=3D"courier new,monospace">pass</font> "wins" as it fit=
s perfectly with forward - argument passing AND fixes an annoying confusion=
s with move, were <br>=C2=A0a) one can move const objects.<br>=C2=A0b) move=
-might-not-move=C2=A0</div><div><br></div><div>If you use pass, visually yo=
u are not laying by saying you are moving - you just pass the object ant tr=
ust, the compiler it will transfer it the best way.</div><div><br>Needless =
to say, I still believe an operator is the better option (see pre-previous =
post), exactly because we don't have come up with a name!</div><div><br=
>Comments are welcome. =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" 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/e7ee5875-c667-488a-80d3-e896ff8af163%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/e7ee5875-c667-488a-80d3-e896ff8af163=
%40isocpp.org</a>.<br />
------=_Part_2671_842014962.1527754120581--
------=_Part_2670_1390436513.1527754120581--
.
Author: Richard Hodges <hodges.r@gmail.com>
Date: Thu, 31 May 2018 10:14:05 +0200
Raw View
--000000000000b49fe2056d7c0d10
Content-Type: text/plain; charset="UTF-8"
On Thu, 31 May 2018 at 10:05, <mihailnajdenov@gmail.com> wrote:
>
>
> On Tuesday, May 29, 2018 at 1:23:07 AM UTC+3, Richard Hodges wrote:
>>
>> Anyone proposing adding another operator to c++ has clearly not recently
>> had to teach the language or maintain code.
>>
>> forward (or give, or similar) should be a keyword. I know the committee
>> fears adding keywords, but this fear is unfounded. The constant
>> hoop-jumping merely to avoid the inevitable simply creates technical debt
>> which will impede design choices in the future.
>>
>>
> Ok, so I decided to play around with the a possible keyword. Here's what I
> came up with.
>
I think you missed one. We already have a keyword which could be repurposed
without consequence or confusion:
template<class T>
void foo(T&& x)
{
bar(auto(x)); // equivalent to bar(std::forward<decltype(x)>(x));
}
>
> giveop
> giveup
> givein
> giveof
> giveovr
>
> - . -
>
> passon
> passop
> passin
> passof
> passovr
>
> - . -
>
> handin
> handovr
>
> These are self-explanatory.
>
> - . -
>
> Two unorthodox variants
>
> func givn (args givn...)
> or
> func taken (args taken...)
>
> As you can see, as postfix.
>
> And BTW, purely from language standpoint other keywords can work as
> postfix as giveovr, handin etc
>
> - . -
>
> remit
>
> Odd, but short and probably not taken. "refer (a matter for decision) to
> some authority."
>
> - . -
>
> letgo
>
> - . -
>
> convey
>
> Self-explanatory and should be usable as-is.
>
>
> There is also the category of words, stressing on the fact variable is no
> longer used in the current context.
>
> vacate
>
> - . -
>
> evict
>
> - . -
>
> layof
>
> Granted, these are less suited for forward and more for move. Still, the
> benefit is the strong do-not-use waring.
>
>
> IMO pass "wins" as it fits perfectly with forward - *argument passing *AND
> fixes an annoying confusions with move, were
> * a)* one can move const objects.
> *b) *move-might-not-move
>
> If you use pass, visually you are not laying by saying you are moving -
> you just pass the object ant trust, the compiler it will transfer it the
> best way.
>
>
> Needless to say, I still believe an operator is the better option (see
> pre-previous post), exactly because we don't have come up with a name
> (among other things)!
>
>
> Comments are welcome. Thank You.
>
> --
> 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/45954c2a-d722-4f42-b491-564b07f7fd77%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/45954c2a-d722-4f42-b491-564b07f7fd77%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
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/CALvx3hZTne_6HU-N%3DzEfw5KASiX6_qHW%3DGeQry0_xrX6nSfkGw%40mail.gmail.com.
--000000000000b49fe2056d7c0d10
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 Thu=
, 31 May 2018 at 10:05, <<a href=3D"mailto:mihailnajdenov@gmail.com">mih=
ailnajdenov@gmail.com</a>> wrote:<br></div><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
"><div dir=3D"ltr"><br><br>On Tuesday, May 29, 2018 at 1:23:07 AM UTC+3, Ri=
chard Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;marg=
in-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"=
>Anyone proposing adding another operator to c++ has clearly not recently h=
ad to teach the language or maintain code.<div><br></div><div><font face=3D=
"monospace, monospace">forward</font> (or <font face=3D"monospace, monospac=
e">give</font>, or similar) should be a keyword. I know the committee fears=
adding keywords, but this fear is unfounded. The constant hoop-jumping mer=
ely to avoid the inevitable simply creates technical debt which will impede=
design choices in the future.</div><div><br></div></div></blockquote><div>=
<br></div><div>Ok, so I decided to play around with the a possible keyword.=
Here's what I came up with.<br></div></div></blockquote><div><br></div=
><div>I think you missed one. We already have a keyword which could be repu=
rposed without consequence or confusion:</div><div><br></div><div><font fac=
e=3D"monospace, monospace">template<class T></font></div><div><font f=
ace=3D"monospace, monospace">void foo(T&& x)</font></div><div><font=
face=3D"monospace, monospace">{</font></div><div><font face=3D"monospace, =
monospace">=C2=A0 bar(auto(x));=C2=A0 // equivalent to bar(std::forward<=
decltype(x)>(x));</font></div><div><font face=3D"monospace, monospace">}=
</font></div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r"><div></div><div><b></b><br></div><div><font face=3D"courier new,monospac=
e">giveop</font></div><div><font face=3D"courier new,monospace">giveup</fon=
t></div><div><font face=3D"courier new,monospace">givein</font></div><div><=
font face=3D"courier new,monospace">giveof</font></div><div><font face=3D"c=
ourier new,monospace">giveovr</font></div><div><font face=3D"courier new,mo=
nospace"><br></font></div><div><font face=3D"courier new,monospace"><div><f=
ont face=3D"arial,sans-serif" style=3D"border-bottom-color:rgb(34,34,34);bo=
rder-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;marg=
in-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left=
:0px;padding-right:0px;padding-top:0px"><span style=3D"background-color:tra=
nsparent;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;bor=
der-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:non=
e;border-top-width:0px;color:rgb(34,34,34);display:inline;float:none;font-f=
amily:arial,sans-serif;font-size:13px;font-style:normal;font-variant:normal=
;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left:0px;ma=
rgin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-r=
ight:0px;padding-top:0px;text-align:left;text-decoration:none;text-indent:0=
px;text-transform:none;white-space:normal;word-spacing:0px"><span style=3D"=
background-color:transparent;border-bottom-color:rgb(34,34,34);border-botto=
m-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);bor=
der-right-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);=
border-top-style:none;border-top-width:0px;color:rgb(34,34,34);display:inli=
ne;float:none;font-family:courier new,monospace;font-size:13px;font-style:n=
ormal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-bott=
om:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;p=
adding-left:0px;padding-right:0px;padding-top:0px;text-align:left;text-deco=
ration:none;text-indent:0px;text-transform:none;white-space:normal;word-spa=
cing:0px">- . -</span></span></font></div><div><font face=3D"arial,sans-ser=
if" style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:none;bor=
der-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:0=
px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;pad=
ding-top:0px"><span style=3D"background-color:transparent;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;col=
or:rgb(34,34,34);display:inline;float:none;font-family:arial,sans-serif;fon=
t-size:13px;font-style:normal;font-variant:normal;font-weight:400;letter-sp=
acing:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:=
0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px;t=
ext-align:left;text-decoration:none;text-indent:0px;text-transform:none;whi=
te-space:normal;word-spacing:0px"><span style=3D"background-color:transpare=
nt;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-le=
ft-width:0px;border-right-color:rgb(34,34,34);border-right-style:none;borde=
r-right-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;bord=
er-top-width:0px;color:rgb(34,34,34);display:inline;float:none;font-family:=
courier new,monospace;font-size:13px;font-style:normal;font-variant:normal;=
font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left:0px;mar=
gin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-ri=
ght:0px;padding-top:0px;text-align:left;text-decoration:none;text-indent:0p=
x;text-transform:none;white-space:normal;word-spacing:0px"><br style=3D"bor=
der-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-wid=
th:0px;border-right-color:rgb(34,34,34);border-right-style:none;border-righ=
t-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:0p=
x;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px"></=
span></span></font></div><div><font face=3D"arial,sans-serif" style=3D"bord=
er-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-widt=
h: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:0px;padding-right:0px;padding-top:0px"><sp=
an style=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);=
border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,3=
4,34);border-left-style:none;border-left-width:0px;border-right-color:rgb(3=
4,34,34);border-right-style:none;border-right-width:0px;border-top-color:rg=
b(34,34,34);border-top-style:none;border-top-width:0px;color:rgb(34,34,34);=
display:inline;float:none;font-family:arial,sans-serif;font-size:13px;font-=
style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;te=
xt-decoration:none;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px"><span style=3D"background-color:transparent;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;bord=
er-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;=
color:rgb(34,34,34);display:inline;float:none;font-family:courier new,monos=
pace;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;l=
etter-spacing:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;mar=
gin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-t=
op:0px;text-align:left;text-decoration:none;text-indent:0px;text-transform:=
none;white-space:normal;word-spacing:0px">passon</span></span></font></div>=
<div><font face=3D"arial,sans-serif" 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,34);border-right-style:none;border-right-width:0px;border-top-col=
or:rgb(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0=
px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;paddi=
ng-left:0px;padding-right:0px;padding-top:0px"><span style=3D"background-co=
lor:transparent;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:n=
one;border-left-width:0px;border-right-color:rgb(34,34,34);border-right-sty=
le:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-st=
yle:none;border-top-width:0px;color:rgb(34,34,34);display:inline;float:none=
;font-family:arial,sans-serif;font-size:13px;font-style:normal;font-variant=
:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left=
:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;pa=
dding-right:0px;padding-top:0px;text-align:left;text-decoration:none;text-i=
ndent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span st=
yle=3D"background-color:transparent;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;color:rgb(34,34,34);displ=
ay:inline;float:none;font-family:courier new,monospace;font-size:13px;font-=
style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;te=
xt-decoration:none;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px">passop</span></span></font></div><div><font face=3D"arial,=
sans-serif" 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"><span style=3D"background-color:transparent;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;color:rgb(34,34,34);display:inline;float:none;font-family:arial,sans-s=
erif;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;l=
etter-spacing:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;mar=
gin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-t=
op:0px;text-align:left;text-decoration:none;text-indent:0px;text-transform:=
none;white-space:normal;word-spacing:0px"><span style=3D"background-color:t=
ransparent;border-bottom-color:rgb(34,34,34);border-bottom-style:none;borde=
r-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-style:none;b=
order-left-width:0px;border-right-color:rgb(34,34,34);border-right-style:no=
ne;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-style:n=
one;border-top-width:0px;color:rgb(34,34,34);display:inline;float:none;font=
-family:courier new,monospace;font-size:13px;font-style:normal;font-variant=
:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left=
:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;pa=
dding-right:0px;padding-top:0px;text-align:left;text-decoration:none;text-i=
ndent:0px;text-transform:none;white-space:normal;word-spacing:0px">passin</=
span></span></font></div><div><font face=3D"arial,sans-serif" style=3D"bord=
er-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-widt=
h: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:0px;padding-right:0px;padding-top:0px"><sp=
an style=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);=
border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,3=
4,34);border-left-style:none;border-left-width:0px;border-right-color:rgb(3=
4,34,34);border-right-style:none;border-right-width:0px;border-top-color:rg=
b(34,34,34);border-top-style:none;border-top-width:0px;color:rgb(34,34,34);=
display:inline;float:none;font-family:arial,sans-serif;font-size:13px;font-=
style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;te=
xt-decoration:none;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px"><span style=3D"background-color:transparent;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;bord=
er-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;=
color:rgb(34,34,34);display:inline;float:none;font-family:courier new,monos=
pace;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;l=
etter-spacing:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;mar=
gin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-t=
op:0px;text-align:left;text-decoration:none;text-indent:0px;text-transform:=
none;white-space:normal;word-spacing:0px">passof</span></span></font></div>=
<div><font face=3D"arial,sans-serif" 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,34);border-right-style:none;border-right-width:0px;border-top-col=
or:rgb(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0=
px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;paddi=
ng-left:0px;padding-right:0px;padding-top:0px"><span style=3D"background-co=
lor:transparent;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:n=
one;border-left-width:0px;border-right-color:rgb(34,34,34);border-right-sty=
le:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-st=
yle:none;border-top-width:0px;color:rgb(34,34,34);display:inline;float:none=
;font-family:arial,sans-serif;font-size:13px;font-style:normal;font-variant=
:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left=
:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;pa=
dding-right:0px;padding-top:0px;text-align:left;text-decoration:none;text-i=
ndent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span st=
yle=3D"background-color:transparent;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;color:rgb(34,34,34);displ=
ay:inline;float:none;font-family:courier new,monospace;font-size:13px;font-=
style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;te=
xt-decoration:none;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px">passovr</span></span></font><br></div><b></b><i></i><u></u=
><sub></sub><sup></sup><strike></strike><br></font></div><div><font face=3D=
"courier new,monospace"><div><font face=3D"arial,sans-serif" style=3D"borde=
r-bottom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0=
px;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-w=
idth: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"><spa=
n style=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);b=
order-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;color:rgb(34,34,34);d=
isplay:inline;float:none;font-family:arial,sans-serif;font-size:13px;font-s=
tyle:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margi=
n-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom=
:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;tex=
t-decoration:none;text-indent:0px;text-transform:none;white-space:normal;wo=
rd-spacing:0px"><span style=3D"background-color:transparent;border-bottom-c=
olor: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;borde=
r-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;c=
olor:rgb(34,34,34);display:inline;float:none;font-family:courier new,monosp=
ace;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;le=
tter-spacing:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;marg=
in-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-to=
p:0px;text-align:left;text-decoration:none;text-indent:0px;text-transform:n=
one;white-space:normal;word-spacing:0px">- . -</span></span></font></div><d=
iv><font face=3D"arial,sans-serif" style=3D"border-bottom-color:rgb(34,34,3=
4);border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(3=
4,34,34);border-left-style:none;border-left-width:0px;border-right-color:rg=
b(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:0px;padding-right:0px;padding-top:0px"><span style=3D"background-colo=
r:transparent;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;color:rgb(34,34,34);display:inline;float:none;f=
ont-family:arial,sans-serif;font-size:13px;font-style:normal;font-variant:n=
ormal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left:0=
px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padd=
ing-right:0px;padding-top:0px;text-align:left;text-decoration:none;text-ind=
ent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span styl=
e=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);border-=
bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34);b=
order-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;color:rgb(34,34,34);display=
:inline;float:none;font-family:courier new,monospace;font-size:13px;font-st=
yle:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin=
-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:=
0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;text=
-decoration:none;text-indent:0px;text-transform:none;white-space:normal;wor=
d-spacing:0px"><br 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,34);bord=
er-right-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);b=
order-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;paddin=
g-right:0px;padding-top:0px"></span></span></font></div><div><font face=3D"=
arial,sans-serif" 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"><span style=3D"background-color:transparent;bor=
der-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-wid=
th:0px;border-right-color:rgb(34,34,34);border-right-style:none;border-righ=
t-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-top=
-width:0px;color:rgb(34,34,34);display:inline;float:none;font-family:arial,=
sans-serif;font-size:13px;font-style:normal;font-variant:normal;font-weight=
:400;letter-spacing:normal;margin-bottom:0px;margin-left:0px;margin-right:0=
px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;pad=
ding-top:0px;text-align:left;text-decoration:none;text-indent:0px;text-tran=
sform:none;white-space:normal;word-spacing:0px"><span style=3D"background-c=
olor:transparent;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,34);border-right-st=
yle:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-s=
tyle:none;border-top-width:0px;color:rgb(34,34,34);display:inline;float:non=
e;font-family:courier new,monospace;font-size:13px;font-style:normal;font-v=
ariant:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margi=
n-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:=
0px;padding-right:0px;padding-top:0px;text-align:left;text-decoration:none;=
text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">ha=
ndin</span></span></font></div></font><div><font face=3D"courier new,monosp=
ace"><font face=3D"arial,sans-serif" 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,34);border-right-style:none;border-right-width:0px;border-top-col=
or:rgb(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0=
px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;paddi=
ng-left:0px;padding-right:0px;padding-top:0px"><span style=3D"background-co=
lor:transparent;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:n=
one;border-left-width:0px;border-right-color:rgb(34,34,34);border-right-sty=
le:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-st=
yle:none;border-top-width:0px;color:rgb(34,34,34);display:inline;float:none=
;font-family:arial,sans-serif;font-size:13px;font-style:normal;font-variant=
:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left=
:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;pa=
dding-right:0px;padding-top:0px;text-align:left;text-decoration:none;text-i=
ndent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span st=
yle=3D"background-color:transparent;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;color:rgb(34,34,34);displ=
ay:inline;float:none;font-family:courier new,monospace;font-size:13px;font-=
style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;te=
xt-decoration:none;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px">handovr</span></span></font></font></div><div><font face=
=3D"courier new,monospace"><font face=3D"arial,sans-serif" 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:0=
px;border-right-color:rgb(34,34,34);border-right-style:none;border-right-wi=
dth:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-top-wid=
th:0px;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;pa=
dding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px"><span =
style=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);bor=
der-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,3=
4);border-left-style:none;border-left-width:0px;border-right-color:rgb(34,3=
4,34);border-right-style:none;border-right-width:0px;border-top-color:rgb(3=
4,34,34);border-top-style:none;border-top-width:0px;color:rgb(34,34,34);dis=
play:inline;float:none;font-family:arial,sans-serif;font-size:13px;font-sty=
le:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-=
bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0=
px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;text-=
decoration:none;text-indent:0px;text-transform:none;white-space:normal;word=
-spacing:0px"><span style=3D"background-color:transparent;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;col=
or:rgb(34,34,34);display:inline;float:none;font-family:courier new,monospac=
e;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;lett=
er-spacing:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;margin=
-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:=
0px;text-align:left;text-decoration:none;text-indent:0px;text-transform:non=
e;white-space:normal;word-spacing:0px"></span></span></font></font><font fa=
ce=3D"courier new,monospace"><font face=3D""Arial","Helvetic=
a",sans-serif"></font><br></font></div></div><div><font face=3D"arial,=
sans-serif">These are self-explanatory.=C2=A0</font></div><div><font face=
=3D"arial,sans-serif"><br></font></div><div><font face=3D"arial,sans-serif"=
><span style=3D"display:inline!important;float:none;background-color:transp=
arent;color:rgb(34,34,34);font-family:courier new,monospace;font-size:13px;=
font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal=
;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;w=
hite-space:normal;word-spacing:0px">- . -</span></font></div><div><font fac=
e=3D"arial,sans-serif"><b></b><i></i><u></u><sub></sub><sup></sup><strike><=
/strike><br></font></div><div><font face=3D"arial,sans-serif">Two unorthodo=
x variants</font></div><div><font face=3D"courier new,monospace"></font><br=
></div><div><font face=3D"courier new,monospace">func givn (args givn...)</=
font><br></div><div>or</div><div><span style=3D"display:inline!important;fl=
oat:none;background-color:transparent;color:rgb(34,34,34);font-family:couri=
er new,monospace;font-size:13px;font-style:normal;font-variant:normal;font-=
weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-=
indent:0px;text-transform:none;white-space:normal;word-spacing:0px">func ta=
ken (args taken...)</span></div><div><br></div><div>As you can see, as post=
fix.</div><div><br></div><div>And BTW, purely from language standpoint othe=
r keywords can work as postfix as <font face=3D"courier new,monospace">give=
ovr</font><font face=3D"arial,sans-serif">, </font><span style=3D"display:i=
nline!important;float:none;background-color:transparent;color:rgb(34,34,34)=
;font-family:courier new,monospace;font-size:13px;font-style:normal;font-va=
riant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-dec=
oration:none;text-indent:0px;text-transform:none;white-space:normal;word-sp=
acing:0px">handin <font face=3D"arial,sans-serif">etc</font></span></div><d=
iv><font face=3D"courier new,monospace"><b></b><i></i><u></u><sub></sub><su=
p></sup><strike></strike><font face=3D"arial,sans-serif"></font><br></font>=
</div><div><font face=3D"courier new,monospace">- . -</font></div><div><fon=
t face=3D"courier new,monospace"><br></font></div><div><font face=3D"courie=
r new,monospace">remit</font></div><div><font face=3D"courier new,monospace=
"><br></font></div><div><font face=3D"arial,sans-serif">Odd, but short and =
probably not taken. "<span style=3D"display:inline!important;float:non=
e;background-color:transparent;color:rgb(34,34,34);font-family:arial,sans-s=
erif;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;l=
etter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;t=
ext-transform:none;white-space:normal;word-spacing:0px">refer (a matter for=
decision) to some authority."</span></font></div><div><font face=3D"a=
rial,sans-serif"><span style=3D"display:inline!important;float:none;backgro=
und-color:transparent;color:rgb(34,34,34);font-family:arial,sans-serif;font=
-size:13px;font-style:normal;font-variant:normal;font-weight:400;letter-spa=
cing:normal;text-align:left;text-decoration:none;text-indent:0px;text-trans=
form:none;white-space:normal;word-spacing:0px"><br></span></font></div><div=
><font face=3D"arial,sans-serif"><span style=3D"text-align:left;color:rgb(3=
4,34,34);text-transform:none;text-indent:0px;letter-spacing:normal;font-fam=
ily:arial,sans-serif;font-size:13px;font-variant:normal;word-spacing:0px;di=
splay:inline!important;white-space:normal;float:none;background-color:trans=
parent"><span style=3D"text-align:left;color:rgb(34,34,34);text-transform:n=
one;text-indent:0px;letter-spacing:normal;font-family:courier new,monospace=
;font-size:13px;font-variant:normal;word-spacing:0px;display:inline!importa=
nt;white-space:normal;float:none;background-color:transparent"><span style=
=3D"display:inline!important;float:none;background-color:transparent;color:=
rgb(34,34,34);font-family:courier new,monospace;font-size:13px;font-style:n=
ormal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:=
left;text-decoration:none;text-indent:0px;text-transform:none;white-space:n=
ormal;word-spacing:0px">- . -</span></span></span></font></div><div><font f=
ace=3D"arial,sans-serif"><span style=3D"text-align:left;color:rgb(34,34,34)=
;text-transform:none;text-indent:0px;letter-spacing:normal;font-family:aria=
l,sans-serif;font-size:13px;font-variant:normal;word-spacing:0px;display:in=
line!important;white-space:normal;float:none;background-color:transparent">=
<span style=3D"text-align:left;color:rgb(34,34,34);text-transform:none;text=
-indent:0px;letter-spacing:normal;font-family:courier new,monospace;font-si=
ze:13px;font-variant:normal;word-spacing:0px;display:inline!important;white=
-space:normal;float:none;background-color:transparent"><b></b><i></i><u></u=
><sub></sub><sup></sup><strike></strike><br></span></span></font></div><div=
><font face=3D"arial,sans-serif"><span style=3D"text-align:left;color:rgb(3=
4,34,34);text-transform:none;text-indent:0px;letter-spacing:normal;font-fam=
ily:arial,sans-serif;font-size:13px;font-variant:normal;word-spacing:0px;di=
splay:inline!important;white-space:normal;float:none;background-color:trans=
parent"><span style=3D"text-align:left;color:rgb(34,34,34);text-transform:n=
one;text-indent:0px;letter-spacing:normal;font-family:courier new,monospace=
;font-size:13px;font-variant:normal;word-spacing:0px;display:inline!importa=
nt;white-space:normal;float:none;background-color:transparent">letgo</span>=
</span></font></div><div><font face=3D"arial,sans-serif"><span style=3D"tex=
t-align:left;color:rgb(34,34,34);text-transform:none;text-indent:0px;letter=
-spacing:normal;font-family:arial,sans-serif;font-size:13px;font-variant:no=
rmal;word-spacing:0px;display:inline!important;white-space:normal;float:non=
e;background-color:transparent"><br></span></font></div><div><span style=3D=
"display:inline!important;float:none;background-color:transparent;color:rgb=
(34,34,34);font-family:courier new,monospace;font-size:13px;font-style:norm=
al;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:lef=
t;text-decoration:none;text-indent:0px;text-transform:none;white-space:norm=
al;word-spacing:0px">- . -</span></div><div><b></b><i></i><u></u><sub></sub=
><sup></sup><strike></strike><br></div><div><font face=3D"courier new,monos=
pace">convey</font></div><div><font face=3D"courier new,monospace"></font><=
br></div><div><span style=3D"display:inline!important;float:none;background=
-color:transparent;color:rgb(34,34,34);font-family:arial,sans-serif;font-si=
ze:13px;font-style:normal;font-variant:normal;font-weight:400;letter-spacin=
g:normal;text-align:left;text-decoration:none;text-indent:0px;text-transfor=
m:none;white-space:normal;word-spacing:0px">S</span><span style=3D"backgrou=
nd-color:transparent;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;color:rgb(34,34,34);display:inline;float=
:none;font-family:arial,sans-serif;font-size:13px;font-style:normal;font-va=
riant:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin=
-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0=
px;padding-right:0px;padding-top:0px;text-align:left;text-decoration:none;t=
ext-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><sp=
an style=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);=
border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,3=
4,34);border-left-style:none;border-left-width:0px;border-right-color:rgb(3=
4,34,34);border-right-style:none;border-right-width:0px;border-top-color:rg=
b(34,34,34);border-top-style:none;border-top-width:0px;color:rgb(34,34,34);=
display:inline;float:none;font-family:arial,sans-serif;font-size:13px;font-=
style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:left;te=
xt-decoration:none;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px"><span style=3D"background-color:transparent;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;bord=
er-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;=
color:rgb(34,34,34);display:inline;float:none;font-family:arial,sans-serif;=
font-size:13px;font-style:normal;font-variant:normal;font-weight:400;letter=
-spacing:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-t=
op:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0p=
x;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px">elf-explanatory and should be usable a=
s-is.=C2=A0</span></span></span></div><div><span style=3D"background-color:=
transparent;border-bottom-color:rgb(34,34,34);border-bottom-style:none;bord=
er-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:n=
one;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-style:=
none;border-top-width:0px;color:rgb(34,34,34);display:inline;float:none;fon=
t-family:arial,sans-serif;font-size:13px;font-style:normal;font-variant:nor=
mal;font-weight:400;letter-spacing:normal;margin-bottom:0px;margin-left:0px=
;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;paddin=
g-right:0px;padding-top:0px;text-align:left;text-decoration:none;text-inden=
t:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style=
=3D"background-color:transparent;border-bottom-color:rgb(34,34,34);border-b=
ottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34);bo=
rder-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;color:rgb(34,34,34);display:=
inline;float:none;font-family:arial,sans-serif;font-size:13px;font-style:no=
rmal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-botto=
m:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;pa=
dding-left:0px;padding-right:0px;padding-top:0px;text-align:left;text-decor=
ation:none;text-indent:0px;text-transform:none;white-space:normal;word-spac=
ing:0px"><span style=3D"background-color:transparent;border-bottom-color:rg=
b(34,34,34);border-bottom-style:none;border-bottom-width:0px;border-left-co=
lor: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;color:rg=
b(34,34,34);display:inline;float:none;font-family:arial,sans-serif;font-siz=
e:13px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing=
:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;p=
adding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-a=
lign:left;text-decoration:none;text-indent:0px;text-transform:none;white-sp=
ace:normal;word-spacing:0px"><br></span></span></span></div><div><br></div>=
<div><font face=3D"arial,sans-serif"><span style=3D"text-align:left;color:r=
gb(34,34,34);text-transform:none;text-indent:0px;letter-spacing:normal;font=
-family:"Arial","Helvetica",sans-serif;font-size:13px;f=
ont-style:normal;font-variant:normal;text-decoration:none;word-spacing:0px;=
display:inline!important;white-space:normal;float:none;background-color:tra=
nsparent">There is also the category of words, stressing on the fact variab=
le is no longer used in the current context.</span></font><br></div><div><b=
></b><i></i><u></u><sub></sub><sup></sup><strike></strike><b></b><font face=
=3D"courier new,monospace"></font><br></div><div><font face=3D"courier new,=
monospace">vacate</font></div><div><font face=3D"courier new,monospace"></f=
ont><br></div><div><span style=3D"display:inline!important;float:none;backg=
round-color:transparent;color:rgb(34,34,34);font-family:courier new,monospa=
ce;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;let=
ter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;tex=
t-transform:none;white-space:normal;word-spacing:0px">- . -</span><b></b><i=
></i><u></u><sub></sub><sup></sup><strike></strike><br></div><div><b></b><i=
></i><u></u><sub></sub><sup></sup><strike></strike><br></div><div><font fac=
e=3D"courier new,monospace">evict</font></div><div><font face=3D"courier ne=
w,monospace"><br></font></div><div><font face=3D"courier new,monospace"><sp=
an style=3D"display:inline!important;float:none;background-color:transparen=
t;color:rgb(34,34,34);font-family:courier new,monospace;font-size:13px;font=
-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;tex=
t-align:left;text-decoration:none;text-indent:0px;text-transform:none;white=
-space:normal;word-spacing:0px">- . -</span><b></b><i></i><u></u><sub></sub=
><sup></sup><strike></strike><br></font></div><div><font face=3D"courier ne=
w,monospace"></font><b></b><i></i><u></u><sub></sub><sup></sup><strike></st=
rike><br></div><div><font face=3D"courier new,monospace">layof</font></div>=
<div><font face=3D"courier new,monospace"><br></font></div><div><font face=
=3D"arial,sans-serif">Granted, these are less suited for <font face=3D"cour=
ier new,monospace">forward</font> and more for <font face=3D"courier new,mo=
nospace">move</font>. Still, the benefit is the strong do-not-use waring.</=
font></div><div><font face=3D"arial,sans-serif"><br></font></div><div><font=
face=3D"arial,sans-serif"><br></font></div><div><font face=3D"arial,sans-s=
erif">IMO <font face=3D"courier new,monospace">pass</font> "wins"=
as it fits perfectly with forward - <i>argument passing </i>AND fixes an a=
nnoying confusions with move, were=C2=A0</font></div><div><font face=3D"ari=
al,sans-serif"><b>=C2=A0a)</b> one can move const objects.</font></div><div=
>=C2=A0<b>b) </b>move-might-not-move=C2=A0</div><div><br></div><div>If you =
use pass, visually you are not laying by saying you are moving - you just p=
ass the object ant trust, the compiler it will transfer it the best way.</d=
iv><div><font face=3D"arial,sans-serif"><b></b><b></b><br></font></div><div=
><font face=3D"arial,sans-serif"><br></font></div><div><font face=3D"arial,=
sans-serif">Needless to say, I still believe an operator is the better opti=
on (see pre-previous post), exactly because we don't have come up with =
a name (among other things)!</font></div><div><font face=3D"arial,sans-seri=
f"><br></font></div><div><font face=3D"arial,sans-serif"><br></font></div><=
div><font face=3D"arial,sans-serif">Comments are welcome. Thank You.</font>=
</div><div><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><fon=
t face=3D"arial,sans-serif"></font><br></div></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">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/45954c2a-d722-4f42-b491-564b07f7fd77%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/45954c2a-d722-=
4f42-b491-564b07f7fd77%40isocpp.org</a>.<br>
</blockquote></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/CALvx3hZTne_6HU-N%3DzEfw5KASiX6_qHW%3=
DGeQry0_xrX6nSfkGw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALvx3hZTne_6=
HU-N%3DzEfw5KASiX6_qHW%3DGeQry0_xrX6nSfkGw%40mail.gmail.com</a>.<br />
--000000000000b49fe2056d7c0d10--
.
Author: mihailnajdenov@gmail.com
Date: Thu, 31 May 2018 01:37:29 -0700 (PDT)
Raw View
------=_Part_2858_813573132.1527755849652
Content-Type: multipart/alternative;
boundary="----=_Part_2859_478990016.1527755849652"
------=_Part_2859_478990016.1527755849652
Content-Type: text/plain; charset="UTF-8"
On Thursday, May 31, 2018 at 11:14:18 AM UTC+3, Richard Hodges wrote:
>
>
>
> On Thu, 31 May 2018 at 10:05, <mihailn...@gmail.com <javascript:>> wrote:
>
>>
>>
>> On Tuesday, May 29, 2018 at 1:23:07 AM UTC+3, Richard Hodges wrote:
>>>
>>> Anyone proposing adding another operator to c++ has clearly not recently
>>> had to teach the language or maintain code.
>>>
>>> forward (or give, or similar) should be a keyword. I know the committee
>>> fears adding keywords, but this fear is unfounded. The constant
>>> hoop-jumping merely to avoid the inevitable simply creates technical debt
>>> which will impede design choices in the future.
>>>
>>>
>> Ok, so I decided to play around with the a possible keyword. Here's what
>> I came up with.
>>
>
> I think you missed one. We already have a keyword which could be
> repurposed without consequence or confusion:
>
> template<class T>
> void foo(T&& x)
> {
> bar(auto(x)); // equivalent to bar(std::forward<decltype(x)>(x));
> }
>
Here there is a confusion with copy as in new auto(x).
The end-of-line is not conveyed in any way.
Where in
template<class T>
void foo(T&& x)
{
bar(passin(x));
// or
bar(x passin);
}
It is obvious the variable is redirected
And in
template<class T>
void foo(T&& x)
{
bar(x&&>);
}
It is obvious the variable is converted back to forw ref and pushed upstream
--
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/95661dc8-9637-4417-86b0-127d34e23255%40isocpp.org.
------=_Part_2859_478990016.1527755849652
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><br>On Thursday, May 31, 2018 at 11:14:18 AM UTC+3, Ri=
chard Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;mar=
gin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D=
"ltr"><br><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Thu, 31 May 20=
18 at 10:05, <<a onmousedown=3D"this.href=3D'javascript:';return=
true;" onclick=3D"this.href=3D'javascript:';return true;" href=3D"=
javascript:" target=3D"_blank" rel=3D"nofollow" gdf-obfuscated-mailto=3D"3y=
8T2IoiAAAJ">mihailn...@gmail.com</a>> wrote:<br></div><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><div dir=3D"ltr"><br><br>On Tuesday, May 29, 2018 at 1:23:07 =
AM UTC+3, Richard Hodges wrote:<blockquote class=3D"gmail_quote" style=3D"m=
argin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
dir=3D"ltr">Anyone proposing adding another operator to c++ has clearly no=
t recently had to teach the language or maintain code.<div><br></div><div><=
font face=3D"monospace, monospace">forward</font> (or <font face=3D"monospa=
ce, monospace">give</font>, or similar) should be a keyword. I know the com=
mittee fears adding keywords, but this fear is unfounded. The constant hoop=
-jumping merely to avoid the inevitable simply creates technical debt which=
will impede design choices in the future.</div><div><br></div></div></bloc=
kquote><div><br></div><div>Ok, so I decided to play around with the a possi=
ble keyword. Here's what I came up with.<br></div></div></blockquote><d=
iv><br></div><div>I think you missed one. We already have a keyword which c=
ould be repurposed without consequence or confusion:</div><div><br></div><d=
iv><font face=3D"monospace, monospace">template<class T></font></div>=
<div><font face=3D"monospace, monospace">void foo(T&& x)</font></di=
v><div><font face=3D"monospace, monospace">{</font></div><div><font face=3D=
"monospace, monospace">=C2=A0 bar(auto(x));=C2=A0 // equivalent to bar(std:=
:forward<decltype(x)>(<wbr>x));</font></div><div><font face=3D"monosp=
ace, monospace">}</font></div></div></div></blockquote><div><br></div><div>=
<br></div><div>Here there is a confusion with copy as in <font face=3D"cour=
ier new,monospace">new auto(x).</font><font face=3D"arial,sans-serif">=C2=
=A0</font></div><div><font face=3D"arial,sans-serif"><br></font></div><div>=
<font face=3D"arial,sans-serif">The end-of-line is not conveyed in any way.=
=C2=A0</font></div><div><font face=3D"arial,sans-serif"><br></font></div><d=
iv><font face=3D"arial,sans-serif">Where in</font><font face=3D"arial,sans-=
serif"><br></font></div><div><font face=3D"arial,sans-serif"><div style=3D"=
background-color: transparent; border-bottom-color: rgb(34, 34, 34); border=
-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; bord=
er-image-repeat: stretch; border-image-slice: 100%; border-image-source: no=
ne; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-=
style: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); b=
order-right-style: none; border-right-width: 0px; border-top-color: rgb(34,=
34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34,=
34); font-family: &quot;Arial&quot;,&quot;Helvetica&quot;,=
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font=
-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px;=
margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; paddi=
ng-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-=
decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stro=
ke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"monos=
pace, monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-bott=
om-style: none; border-bottom-width: 0px; border-image-outset: 0; border-im=
age-repeat: stretch; border-image-slice: 100%; border-image-source: none; b=
order-image-width: 1; 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; mar=
gin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; pad=
ding-left: 0px; padding-right: 0px; padding-top: 0px;"><br></font></div></f=
ont><div style=3D"margin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); b=
order-image: none; text-align: left; color: rgb(34, 34, 34); text-transform=
: none; text-indent: 0px; letter-spacing: normal; font-size: 13px; font-var=
iant: normal; word-spacing: 0px; white-space: normal; orphans: 2; -webkit-t=
ext-stroke-width: 0px; background-color: transparent;"><font face=3D"arial,=
sans-serif"><font style=3D"border-bottom-color: rgb(34, 34, 34); border-bot=
tom-style: none; border-bottom-width: 0px; border-image-outset: 0; border-i=
mage-repeat: stretch; border-image-slice: 100%; border-image-source: none; =
border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-styl=
e: 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); border-top-style: none; border-top-width: 0px; margin-bottom: 0px; ma=
rgin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; pa=
dding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style=3D"margi=
n: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text=
-align: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0p=
x; letter-spacing: normal; font-size: 13px; font-style: normal; font-varian=
t: normal; font-weight: 400; text-decoration: none; word-spacing: 0px; whit=
e-space: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-col=
or: transparent;"><font face=3D"courier new,monospace" style=3D"border-bott=
om-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: =
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sli=
ce: 100%; border-image-source: none; border-image-width: 1; border-left-col=
or: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; borde=
r-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-t=
op-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; mar=
gin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; p=
adding-top: 0px;">template<class T></font></div><div style=3D"margin:=
0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text-a=
lign: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px;=
letter-spacing: normal; font-size: 13px; font-style: normal; font-variant:=
normal; font-weight: 400; text-decoration: none; word-spacing: 0px; white-=
space: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-color=
: transparent;"><font face=3D"courier new,monospace" style=3D"border-bottom=
-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0p=
x; border-image-outset: 0; border-image-repeat: stretch; border-image-slice=
: 100%; border-image-source: none; border-image-width: 1; 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; margi=
n-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pad=
ding-top: 0px;">void foo(T&& x)</font></div><div style=3D"margin: 0=
px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text-ali=
gn: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px; l=
etter-spacing: normal; font-size: 13px; font-style: normal; font-variant: n=
ormal; font-weight: 400; text-decoration: none; word-spacing: 0px; white-sp=
ace: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-color: =
transparent;"><font face=3D"courier new,monospace" style=3D"border-bottom-c=
olor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px;=
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: =
100%; border-image-source: none; border-image-width: 1; border-left-color: =
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-ri=
ght-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0=
px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-w=
idth: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-=
top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px;">{</font></div><div style=3D"margin: 0px; padding: 0px; border=
: 0px rgb(34, 34, 34); border-image: none; text-align: left; color: rgb(34,=
34, 34); text-transform: none; text-indent: 0px; letter-spacing: normal; f=
ont-size: 13px; font-style: normal; font-variant: normal; font-weight: 400;=
text-decoration: none; word-spacing: 0px; white-space: normal; orphans: 2;=
-webkit-text-stroke-width: 0px; background-color: transparent;"><font face=
=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); b=
order-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0;=
border-image-repeat: stretch; border-image-slice: 100%; border-image-sourc=
e: none; border-image-width: 1; 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: rg=
b(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: 0px; padding-right: 0px; padding-top: 0px;">=C2=A0 bar=
(passin(x)); =C2=A0</font></div><div style=3D"margin: 0px; padding: 0px; bo=
rder: 0px rgb(34, 34, 34); border-image: none; text-align: left; color: rgb=
(34, 34, 34); text-transform: none; text-indent: 0px; letter-spacing: norma=
l; font-size: 13px; font-style: normal; font-variant: normal; font-weight: =
400; text-decoration: none; word-spacing: 0px; white-space: normal; orphans=
: 2; -webkit-text-stroke-width: 0px; background-color: transparent;"><font =
face=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34=
); border-bottom-style: none; border-bottom-width: 0px; border-image-outset=
: 0; border-image-repeat: stretch; border-image-slice: 100%; border-image-s=
ource: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); bor=
der-left-style: none; border-left-width: 0px; border-right-color: rgb(34, 3=
4, 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-bo=
ttom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bo=
ttom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">// or<=
/font></div><div style=3D"margin: 0px; padding: 0px; border: 0px rgb(34, 34=
, 34); border-image: none; text-align: left; color: rgb(34, 34, 34); text-t=
ransform: none; text-indent: 0px; letter-spacing: normal; font-size: 13px; =
font-variant: normal; word-spacing: 0px; white-space: normal; orphans: 2; -=
webkit-text-stroke-width: 0px; background-color: transparent;"><font style=
=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border=
-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; b=
order-image-slice: 100%; border-image-source: none; border-image-width: 1; =
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-wi=
dth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; bo=
rder-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: 0px; paddin=
g-right: 0px; padding-top: 0px;"><span style=3D"text-align: left; color: rg=
b(34, 34, 34); text-transform: none; text-indent: 0px; letter-spacing: norm=
al; font-size: 13px; font-style: normal; font-variant: normal; font-weight:=
400; text-decoration: none; word-spacing: 0px; display: inline !important;=
white-space: normal; orphans: 2; float: none; -webkit-text-stroke-width: 0=
px; background-color: transparent;"><font face=3D"courier new,monospace">=
=C2=A0 bar(x passin);=C2=A0</font></span><br></font></div><div style=3D"mar=
gin: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; te=
xt-align: left; color: rgb(34, 34, 34); text-transform: none; text-indent: =
0px; letter-spacing: normal; font-size: 13px; font-style: normal; font-vari=
ant: normal; font-weight: 400; text-decoration: none; word-spacing: 0px; wh=
ite-space: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-c=
olor: transparent;"><font face=3D"courier new,monospace" style=3D"border-bo=
ttom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width=
: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-s=
lice: 100%; border-image-source: none; border-image-width: 1; border-left-c=
olor: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bor=
der-right-color: rgb(34, 34, 34); border-right-style: none; border-right-wi=
dth: 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; m=
argin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px;=
padding-top: 0px;">}</font></div></font><font face=3D"monospace, monospace=
" style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none;=
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: str=
etch; border-image-slice: 100%; border-image-source: none; border-image-wid=
th: 1; 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: n=
one; 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: 0px;=
padding-right: 0px; padding-top: 0px;"><div style=3D"background-color: tra=
nsparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; =
border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stre=
tch; border-image-slice: 100%; border-image-source: none; border-image-widt=
h: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-l=
eft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: no=
ne; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-=
style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: ar=
ial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; =
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: =
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; p=
adding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; t=
ext-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-=
stroke-width: 0px; white-space: normal; word-spacing: 0px;"><font face=3D"m=
onospace, monospace" style=3D"border-bottom-color: rgb(34, 34, 34); border-=
bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; borde=
r-image-repeat: stretch; border-image-slice: 100%; border-image-source: non=
e; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-s=
tyle: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bo=
rder-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: 0px; padding-right: 0px; padding-top: 0px;"><font face=3D"co=
urier new,monospace"></font><br></font></div></font><font style=3D"border-b=
ottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-widt=
h: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-=
slice: 100%; border-image-source: none; border-image-width: 1; border-left-=
color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bo=
rder-right-color: rgb(34, 34, 34); border-right-style: none; border-right-w=
idth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; borde=
r-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;"><div>It is obvious the variable is redirected</div><di=
v><br></div><div>And in=C2=A0</div><div><br></div><div><div style=3D"margin=
: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text-=
align: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px=
; letter-spacing: normal; font-size: 13px; font-style: normal; font-variant=
: normal; font-weight: 400; text-decoration: none; word-spacing: 0px; white=
-space: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-colo=
r: transparent;"><font face=3D"courier new,monospace" style=3D"border-botto=
m-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0=
px; border-image-outset: 0; border-image-repeat: stretch; border-image-slic=
e: 100%; border-image-source: none; border-image-width: 1; border-left-colo=
r: 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-to=
p-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; marg=
in-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pa=
dding-top: 0px;">template<class T></font></div><div style=3D"margin: =
0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text-al=
ign: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px; =
letter-spacing: normal; font-size: 13px; font-style: normal; font-variant: =
normal; font-weight: 400; text-decoration: none; word-spacing: 0px; white-s=
pace: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-color:=
transparent;"><font face=3D"courier new,monospace" style=3D"border-bottom-=
color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px=
; border-image-outset: 0; border-image-repeat: stretch; border-image-slice:=
100%; border-image-source: none; border-image-width: 1; border-left-color:=
rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-r=
ight-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: 0px; padding-right: 0px; padd=
ing-top: 0px;">void foo(T&& x)</font></div><div style=3D"margin: 0p=
x; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text-alig=
n: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0px; le=
tter-spacing: normal; font-size: 13px; font-style: normal; font-variant: no=
rmal; font-weight: 400; text-decoration: none; word-spacing: 0px; white-spa=
ce: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-color: t=
ransparent;"><font face=3D"courier new,monospace" style=3D"border-bottom-co=
lor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; =
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: 1=
00%; border-image-source: none; border-image-width: 1; border-left-color: r=
gb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-rig=
ht-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0p=
x; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-wi=
dth: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-t=
op: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddin=
g-top: 0px;">{</font></div><div style=3D"margin: 0px; padding: 0px; border:=
0px rgb(34, 34, 34); border-image: none; text-align: left; color: rgb(34, =
34, 34); text-transform: none; text-indent: 0px; letter-spacing: normal; fo=
nt-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; =
text-decoration: none; word-spacing: 0px; white-space: normal; orphans: 2; =
-webkit-text-stroke-width: 0px; background-color: transparent;"><font face=
=3D"courier new,monospace" style=3D"border-bottom-color: rgb(34, 34, 34); b=
order-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0;=
border-image-repeat: stretch; border-image-slice: 100%; border-image-sourc=
e: none; border-image-width: 1; 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: rg=
b(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: 0px; padding-right: 0px; padding-top: 0px;">=C2=A0 bar=
(x&&>); =C2=A0</font><font style=3D"border-bottom-color: rgb(34,=
34, 34); border-bottom-style: none; border-bottom-width: 0px; border-image=
-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-=
image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 3=
4); border-left-style: none; border-left-width: 0px; border-right-color: rg=
b(34, 34, 34); border-right-style: none; border-right-width: 0px; border-to=
p-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; ma=
rgin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; pad=
ding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"=
><br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-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: 0p=
x; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0=
px; padding-right: 0px; padding-top: 0px;"></font></div><div style=3D"margi=
n: 0px; padding: 0px; border: 0px rgb(34, 34, 34); border-image: none; text=
-align: left; color: rgb(34, 34, 34); text-transform: none; text-indent: 0p=
x; letter-spacing: normal; font-size: 13px; font-style: normal; font-varian=
t: normal; font-weight: 400; text-decoration: none; word-spacing: 0px; whit=
e-space: normal; orphans: 2; -webkit-text-stroke-width: 0px; background-col=
or: transparent;"><font face=3D"courier new,monospace" style=3D"border-bott=
om-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: =
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sli=
ce: 100%; border-image-source: none; border-image-width: 1; border-left-col=
or: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; borde=
r-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-t=
op-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; mar=
gin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; p=
adding-top: 0px;">}</font></div><b></b><i></i><u></u><sub></sub><sup></sup>=
<strike></strike><font face=3D"courier new,monospace"></font><br></div></fo=
nt></font><div><font face=3D"arial,sans-serif"><font style=3D"border-bottom=
-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0p=
x; border-image-outset: 0; border-image-repeat: stretch; border-image-slice=
: 100%; border-image-source: none; border-image-width: 1; 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; margi=
n-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pad=
ding-top: 0px;">It is obvious the variable is </font></font>converted back =
<font face=3D"arial,sans-serif"><font style=3D"border-bottom-color: rgb(34,=
34, 34); border-bottom-style: none; border-bottom-width: 0px; border-image=
-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-=
image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 3=
4); border-left-style: none; border-left-width: 0px; border-right-color: rg=
b(34, 34, 34); border-right-style: none; border-right-width: 0px; border-to=
p-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; ma=
rgin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; pad=
ding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"=
>to forw ref and pushed upstream</font></font></div></div><font face=3D"ari=
al,sans-serif"><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike>=
<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><b></b><i></i><=
u></u><sub></sub><sup></sup><strike></strike><br></font></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" 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/95661dc8-9637-4417-86b0-127d34e23255%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/95661dc8-9637-4417-86b0-127d34e23255=
%40isocpp.org</a>.<br />
------=_Part_2859_478990016.1527755849652--
------=_Part_2858_813573132.1527755849652--
.