Topic: [std-proposals] [thought] Make auto optional i
Author: dansavch@gmail.com
Date: Fri, 18 Nov 2016 04:45:48 -0800 (PST)
Raw View
------=_Part_6131_1130677367.1479473148140
Content-Type: multipart/alternative;
boundary="----=_Part_6132_1368108535.1479473148142"
------=_Part_6132_1368108535.1479473148142
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Why do I think, that making =E2=80=9Cauto=E2=80=9D optional in =E2=80=9Ccon=
st auto=E2=80=9D context is a good=20
idea?
Background
1) S. Meyers said =E2=80=9CUse const whenever possible=E2=80=9D
2) H. Sutter said =E2=80=9Calmost always auto=E2=80=9D=20
3) N3853 said, that default for many programmers =E2=80=9Cfor ( auto x : so=
mething=20
)=E2=80=9D is bad
Consider several examples of =E2=80=9Cgood=E2=80=9D code:
a)=20
const auto x =3D =E2=80=A6;
b)=20
for ( const auto& x : something ) =E2=80=A6
But very often in code we face with this one instead of =E2=80=9Cgood=E2=80=
=9D
a)
const Type x =3D =E2=80=A6;
or
Type x =3D =E2=80=A6;
or
auto x =3D =E2=80=A6
b)=20
for ( auto x : something ) =E2=80=A6
(Note that almost always when someone writes code like this he actually wan=
t
s read-only access for x)
=E2=80=9CNot good=E2=80=9D example for a) leads to unclear code (=E2=80=9Cw=
hy is it not const?=20
Where will it be modified?=E2=80=9D) and sometimes to performance degradati=
on=20
(consider case when Type is COW-type, like QVector).
=E2=80=9CNot good=E2=80=9D example for b) leads to awful performance degra=
dation in some=20
cases (when each time =E2=80=9Csomething=E2=80=9D returns a reference on in=
ternal buffer=20
and each time we copy it, see example here=20
<http://ericniebler.com/2013/10/13/out-parameters-vs-move-semantics/> ).
Why do people write =E2=80=9Cnot good=E2=80=9D instead of =E2=80=9Cgood=E2=
=80=9D? Because=20
for ( auto x : ...
is mentally really more simple and clean then
for ( const auto& x : ...
And =E2=80=9Cauto=E2=80=9D in context
const auto x =3D double{0.};
is really meaningless.
=E2=80=9Cconst=E2=80=9D - means that it will never mutate
=E2=80=9Cx=E2=80=9D =E2=80=93 means name
=E2=80=9C=3D=E2=80=9D =E2=80=93 means assignment (ok, no assignment here, l=
et=E2=80=99s call it =E2=80=9Cbinding=E2=80=9D)
=E2=80=9Cdouble{0.}=E2=80=9D =E2=80=93 means type and value (expression in =
general case)
=E2=80=9Cauto=E2=80=9D =E2=80=93 means nothing
=20
So is it a bad idea to let us write =E2=80=9Cgood=E2=80=9D example using =
=E2=80=9Cnew good=E2=80=9D style?
a)=20
const x =3D =E2=80=A6;
b)
for ( const x : something ) =E2=80=A6
(Note that here absolutely clear, that x is new local variable. As I know,=
=20
this was main reason why proposal like N3853 was rejected)
I think in that case many programmers who write =E2=80=9Cgood=E2=80=9D exam=
ples will be=20
happy and many programmers who write =E2=80=9Cbad=E2=80=9D examples will st=
art to write=20
code in =E2=80=9Cnew good=E2=80=9D style, because it simple like =E2=80=9Cb=
ad=E2=80=9D style.
But there could be several alternatives of meaning of this syntax:
=20
-----------------------------
=20
Variant 1 (not good in my opinion)
const x =3D
means=20
const auto& x =3D
(reference!)
Benefits:
1) Popularization of =E2=80=9CAAA=E2=80=9D rule
2) Popularization of =E2=80=9CUse const whenever possible=E2=80=
=9D
3) Cleaning the code=20
4) Performance issues (especially for =E2=80=9Cfor ( const x :=
=E2=80=9D instead=20
of =E2=80=9Cfor ( auto x :=E2=80=9D)
Problem is that =E2=80=9Cconst x=E2=80=9D will looks like value (not refere=
nce) and it=20
could lead to awful mistakes like this
auto cc =3D new CC{};
const x =3D cc->methodThatReturnsReferenceOnMemeber();=20
delete cc;=20
std::cout << x; // UB here
So this variant is given only to complete the whole picture.
=20
-----------------------------
=20
Variant 2 (good in my opinion)
const x =3D
means=20
const auto x =3D
(value!). And so =E2=80=9Cconst &x=E2=80=9D is a =E2=80=9Cconst auto& x=E2=
=80=9D (and maybe =E2=80=9Cconst * x=E2=80=9D is=20
=E2=80=9Cconst auto * x=E2=80=9D)
Benefits:
1) Popularization of =E2=80=9CAAA rule=E2=80=9D
2) Popularization of =E2=80=9CUse const whenever possible=E2=80=
=9D
3) Cleaning the code
4) Small performance issues (only from using =E2=80=9Cconst=E2=
=80=9D for COW=20
types).
Problem: In range-based for loops many will write =E2=80=9Cfor ( const x :=
=E2=80=9D instead=20
of =E2=80=9Cfor (const & x :=E2=80=9D which will lead to coping=E2=80=A6 ag=
ain. But maybe const=20
keyword here will allow compiler make some kind of optimizations?
=20
---------------------------
=20
Variant 3 (good in my opinion)
Like 2: =E2=80=9Cconst x=E2=80=9D means =E2=80=9Cconst auto x=E2=80=9D. But=
special rule for range-based=20
for loops, where =E2=80=9Cfor ( const x :=E2=80=9D will mean =E2=80=9Cfor (=
const auto& x :=E2=80=9D.
Benefits: In that case we will have all benefits from Variant 1.
Problem: two sets of rules is bad=E2=80=A6 or not?
=20
---------------------------
=20
Variant 4 (not good for me)
Allow syntax of this kind ONLY in range-based for loops context =E2=80=9Cfo=
r (=20
const x :=E2=80=9D will mean =E2=80=9Cfor ( const auto& x :=E2=80=9D.=20
Benefits: performance
Problem: But I really want to write =E2=80=9Cconst x =3D=E2=80=9D everywher=
e.
Note that (I think) for small|primitive|built-in types (like char) compiler=
=20
could make a copy instead of reference.
=20
---------------------------
=20
Special cases:
1) Will it be good to allow this=20
template<=E2=80=A6> const myFunc() {=E2=80=A6}
instead of=20
template<=E2=80=A6> const auto myFunc(){=E2=80=A6}
?
I think =E2=80=93 NO.=20
Here
const auto x =3D double{0.};
keyword =E2=80=9Cauto=E2=80=9D means nothing. Expression conceptually compl=
ete without=20
=E2=80=9Cauto=E2=80=9D.
But here
template<=E2=80=A6> const auto myFunc()
is entire describing of function interface, and =E2=80=9Cauto=E2=80=9D real=
ly have meaning=20
=E2=80=9Ctype will appeared in implementation part=E2=80=9D.
This is MY feeling.
2) Will it be good to allow write (Concept TS syntax)
void myFunc( const x, const y )
instead of=20
void myFunc (const auto x, const auto y) // Variant 2,3
or
void myFunc (const auto& x, const auto& y) // Variant 1
?
I think maybe, but I am not sure. It depends on what Variant we will=20
choose, because if "const x" means "by value" - it's rare or often=20
unefficient case to passing arguments into function, and we shouldn't=20
optimaze using of it.
=20
Resume example:
Bad
auto x =3D calcX( a, b );
auto y =3D calcY( a, b );=20
for ( auto el : returnsRange( x, y ) ) {=20
auto z =3D process( el, c );=20
consume( z, x, y, a, b, c );=20
}
Good
const auto x =3D calcX( a, b );
const auto y =3D calcY( a, b );=20
for ( const auto& el : returnsRange( x, y ) ) {=20
const auto z =3D process( el, c );=20
consume( z, x, y, a, b, c );=20
}
New
const x =3D calcX( a, b );
const y =3D calcY( a, b );=20
for ( const el : returnsRange( x, y ) ) {=20
const z =3D process( el, c );=20
consume ( z, x, y, a, b, c );=20
}
=20
So what do you think about it?
P.S. Please excuse my bad English.
--=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/62d6268b-990e-45b0-9aab-3c742d00d9ed%40isocpp.or=
g.
------=_Part_6132_1368108535.1479473148142
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><p class=3D"MsoNormal"><span lang=3D"EN-US">Why do I
think, that making =E2=80=9Cauto=E2=80=9D optional in =E2=80=9Cconst auto=
=E2=80=9D context is </span><span lang=3D"EN-US">a </span><span lang=3D"EN-=
US">good idea?<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Background<o:p></o:p></span></p=
>
<p class=3D"MsoNormal"><span lang=3D"EN-US">1) S.
Meyers said =E2=80=9CUse const whenever possible=E2=80=9D<o:p></o:p></span>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">2) H.
Sutter said =E2=80=9Calmost always auto=E2=80=9D <o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">3) N3853
said, that default for many programmers =E2=80=9Cfor ( auto x : something )=
=E2=80=9D is bad<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Consider
several examples of =E2=80=9Cgood=E2=80=9D code:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">a) </span></p><div class=3D"pre=
ttyprint" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(=
187, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-wo=
rd;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=
=3D"color: #008;" class=3D"styled-by-prettify">const</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #00=
8;" class=3D"styled-by-prettify">auto</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> x </span><span style=3D"color: #660;" class=3D"=
styled-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-=
by-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">=E2=80=A6;</span></div></code></div><p></p><p class=3D"MsoNormal"><span=
lang=3D"EN-US">b) </span></p><div class=3D"prettyprint" style=3D"backgroun=
d-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style=
: solid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettypr=
int"><div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"st=
yled-by-prettify">for</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: #000;" class=3D"styled-by-prettify"> </span=
><span style=3D"color: #008;" class=3D"styled-by-prettify">const</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=
=3D"color: #008;" class=3D"styled-by-prettify">auto</span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">&</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"> x </span><span style=3D"color: #660;" =
class=3D"styled-by-prettify">:</span><span style=3D"color: #000;" class=3D"=
styled-by-prettify"> something </span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">)</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">=E2=80=A6</span></div></code></div><p></p><p class=3D"MsoNormal"><span l=
ang=3D"EN-US"><br></span></p><p class=3D"MsoNormal"><span lang=3D"EN-US">Bu=
t very
often in code we face with this one instead of =E2=80=9Cgood=E2=80=9D<o:p><=
/o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">a)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p><div class=3D"pretty=
print" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187=
, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-word;=
"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"=
color: #008;" class=3D"styled-by-prettify">const</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #606;" =
class=3D"styled-by-prettify">Type</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> x </span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-by-=
prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>=E2=80=A6;</span></div></code></div><p></p><p class=3D"MsoNormal"><span la=
ng=3D"EN-US">or<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p><div class=3D"pretty=
print" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187=
, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-word;=
"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"=
color: #606;" class=3D"styled-by-prettify">Type</span><span style=3D"color:=
#000;" class=3D"styled-by-prettify"> x </span><span style=3D"color: #660;"=
class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">=E2=80=A6;</span></div></code></div><p></p><p class=3D"MsoNo=
rmal"><span lang=3D"EN-US">or<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p><div class=3D"pretty=
print" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187=
, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-word;=
"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"=
color: #008;" class=3D"styled-by-prettify">auto</span><span style=3D"color:=
#000;" class=3D"styled-by-prettify"> x </span><span style=3D"color: #660;"=
class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">=E2=80=A6</span></div></code></div><p></p><p class=3D"MsoNor=
mal"><span lang=3D"EN-US">b) </span></p><div class=3D"prettyprint" style=3D=
"background-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); bo=
rder-style: solid; border-width: 1px; word-wrap: break-word;"><code class=
=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #008;"=
class=3D"styled-by-prettify">for</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">aut=
o</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> x </span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">:</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> something </span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">=E2=80=A6</span></div></code></div>(Note t=
hat almost always when someone writes code like
this he actually want<span lang=3D"EN-US">s</span><span lang=3D"EN-US"> rea=
d-only access for x)<o:p></o:p></span><p></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=E2=80=9CNot good=E2=80=9D
example for a) lead</span><span lang=3D"EN-US">s</span><span lang=3D"EN-US"=
> to unclear code (=E2=80=9Cwhy is it not const? Where will it be modified?=
=E2=80=9D) and
sometimes to performance degradation (consider case when Type is COW-type, =
like
QVector).<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=E2=80=9CNot
good=E2=80=9D=C2=A0 example for b) lead</span><span lang=3D"EN-US">s</span>=
<span lang=3D"EN-US"> to awful performance degradation in
some cases (when</span><span lang=3D"EN-US"> each time</span><span lang=3D"=
EN-US"> =E2=80=9Csomething=E2=80=9D returns a reference on internal buffer =
and </span><span lang=3D"EN-US">each time </span><span lang=3D"EN-US">we co=
py it, see example <a href=3D"http://ericniebler.com/2013/10/13/out-paramet=
ers-vs-move-semantics/">here</a>=C2=A0).<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Why do
people write =E2=80=9Cnot good=E2=80=9D instead of =E2=80=9Cgood=E2=80=9D? =
Because=C2=A0</span></p><p class=3D"MsoNormal"><span lang=3D"EN-US"></span>=
</p><div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250=
); border-color: rgb(187, 187, 187); border-style: solid; border-width: 1px=
; word-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subpret=
typrint"><span style=3D"color: #008;" class=3D"styled-by-prettify">for</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #00=
8;" class=3D"styled-by-prettify">auto</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify"> x </span><span style=3D"color: #660;" class=3D"=
styled-by-prettify">:</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">...</span></div></code></div><p></p><p class=3D"MsoNormal"><span lang=3D"=
EN-US">is </span><span lang=3D"EN-US">mentally really more simple and
clean then</span></p><p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p=
><div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); =
border-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; w=
ord-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettyp=
rint"><span style=3D"color: #008;" class=3D"styled-by-prettify">for</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;"=
class=3D"styled-by-prettify">const</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styl=
ed-by-prettify">auto</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">&</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> x </span><span style=3D"color: #660;" class=3D"styled-by-prettify">:<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">...</span></div></co=
de></div><p></p><p class=3D"MsoNormal"><span lang=3D"EN-US">And =E2=80=9Cau=
to=E2=80=9D
in context</span></p><p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p=
><div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); =
border-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; w=
ord-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettyp=
rint"><span style=3D"color: #008;" class=3D"styled-by-prettify">const</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span st=
yle=3D"color: #008;" class=3D"styled-by-prettify">auto</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"> x </span><span style=3D"color:=
#660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;"=
class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D=
"styled-by-prettify">double</span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">{</span><span style=3D"color: #066;" class=3D"styled-by-pr=
ettify">0.</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
};</span></div></code></div><p></p><p class=3D"MsoNormal"><span lang=3D"EN-=
US">is </span><span lang=3D"EN-US">really meaningless.<o:p></o:p></span></p=
>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=E2=80=9Cconst=E2=80=9D - means=
that it will never mutate<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=E2=80=9Cx=E2=80=9D =E2=80=93 m=
eans
name<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=E2=80=9C=3D=E2=80=9D =E2=80=93=
means
assignment (ok, no assignment here, let=E2=80=99s call it =E2=80=9Cbinding=
=E2=80=9D)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=E2=80=9Cdouble{0.}=E2=80=9D =
=E2=80=93 means type and value
(expression in general case)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=E2=80=9Cauto=E2=80=9D =E2=80=
=93 means nothing<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">So is it a
bad idea </span><span lang=3D"EN-US">to let</span><span lang=3D"EN-US"> us =
write
=E2=80=9Cgood=E2=80=9D example using =E2=80=9Cnew good=E2=80=9D style?<o:p>=
</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">a) </span></p><div class=3D"pre=
ttyprint" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(=
187, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-wo=
rd;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=
=3D"color: #008;" class=3D"styled-by-prettify">const</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> x </span><span style=3D"color: #=
660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">=E2=80=A6;</span></div></code></div><p></p><p class=3D"M=
soNormal"><span lang=3D"EN-US">b)</span></p><p class=3D"MsoNormal"><span la=
ng=3D"EN-US"></span></p><div class=3D"prettyprint" style=3D"background-colo=
r: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: soli=
d; border-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><=
div class=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-b=
y-prettify">for</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span=
style=3D"color: #008;" class=3D"styled-by-prettify">const</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> x </span><span style=3D"co=
lor: #660;" class=3D"styled-by-prettify">:</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> something </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">)</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">=E2=80=A6</span></div></code></div><br><p></p><p class=3D"Ms=
oNormal"><span lang=3D"EN-US">(Note that here absolutely clear, that x is n=
ew local
variable. As I know, this was main reason why proposal like N3853 was rejec=
ted)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I think in
that case many programmers who write =E2=80=9Cgood=E2=80=9D examples will b=
e happy and many
programmers who write =E2=80=9Cbad=E2=80=9D examples will start to write co=
de in =E2=80=9Cnew good=E2=80=9D
style, because it simple like =E2=80=9Cbad=E2=80=9D style.<o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">But </span><span lang=3D"EN-US"=
>there</span><span lang=3D"EN-US"> could be several alternatives of
meaning of this syntax:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">-----------------------------<o=
:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Variant 1
(not good in my opinion)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p><div class=3D"pretty=
print" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187=
, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-word;=
"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"=
color: #008;" class=3D"styled-by-prettify">const</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> x </span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">=3D</span></div></code></div><p></p><p class=
=3D"MsoNormal"><span lang=3D"EN-US">means=C2=A0</span></p><p class=3D"MsoNo=
rmal"><span lang=3D"EN-US"></span></p><div class=3D"prettyprint" style=3D"b=
ackground-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); bord=
er-style: solid; border-width: 1px; word-wrap: break-word;"><code class=3D"=
prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #008;" cla=
ss=3D"styled-by-prettify">const</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-b=
y-prettify">auto</span><span style=3D"color: #660;" class=3D"styled-by-pret=
tify">&</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> x </span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</s=
pan></div></code></div><p></p><p class=3D"MsoNormal"><span lang=3D"EN-US">(=
reference!)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Benefits:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">1)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Popularization of =E2=80=9CAAA=E2=
=80=9D rule<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">2)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Popularization of =E2=80=9CUse cons=
t
whenever possible=E2=80=9D<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">3)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cleaning the code <o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">4)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Performance issues (especially=C2=
=A0 for =E2=80=9Cfor ( const x :=E2=80=9D instead of =E2=80=9Cfor ( auto
x :=E2=80=9D)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Problem is
that =E2=80=9Cconst x=E2=80=9D will looks like value (not reference) and it=
could lead to awful
mistakes like this<o:p></o:p></span></p>
<div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); b=
order-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; wo=
rd-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettypr=
int"><span style=3D"color: #008;" class=3D"styled-by-prettify">auto</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> cc </span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #=
008;" class=3D"styled-by-prettify">new</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify"> CC</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: #008;" class=3D"styled-by-pr=
ettify">const</span><span style=3D"color: #000;" class=3D"styled-by-prettif=
y"> x </span><span style=3D"color: #660;" class=3D"styled-by-prettify">=3D<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> cc</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">-></span><span =
style=3D"color: #000;" class=3D"styled-by-prettify">methodThatReturnsRefere=
nceOnMemeber</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: #008;" class=3D"styled-by-prettify">delete</sp=
an><span style=3D"color: #000;" class=3D"styled-by-prettify"> cc</span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> <br>std</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify">cout </span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify"><<</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> x</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> </span><span style=3D"color: #800;" class=3D"styled-by-pret=
tify">// UB here</span></div></code></div><p class=3D"MsoNormal"><span lang=
=3D"EN-US"><br><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">So this
variant is </span><span lang=3D"EN-US">given </span><span lang=3D"EN-US">on=
ly </span><span lang=3D"EN-US">to</span><span lang=3D"EN-US"> </span><span =
lang=3D"EN-US">complete</span><span lang=3D"EN-US"> </span><span lang=3D"EN=
-US">the whole </span><span lang=3D"EN-US">picture.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">-----------------------------<o=
:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Variant 2
(good in my opinion)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p><div class=3D"pretty=
print" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187=
, 187, 187); border-style: solid; border-width: 1px; word-wrap: break-word;=
"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"=
color: #008;" class=3D"styled-by-prettify">const</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> x </span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">=3D</span></div></code></div><p></p><p class=
=3D"MsoNormal"><span lang=3D"EN-US">mean</span><span lang=3D"EN-US">s</span=
><span lang=3D"EN-US">=C2=A0</span></p><p class=3D"MsoNormal"><span lang=3D=
"EN-US"></span></p><div class=3D"prettyprint" style=3D"background-color: rg=
b(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; bo=
rder-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div c=
lass=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-pre=
ttify">const</span><span style=3D"color: #000;" class=3D"styled-by-prettify=
"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">auto</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify"> x </span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span></div></co=
de></div><p></p><p class=3D"MsoNormal"><span lang=3D"EN-US">(value!). And s=
o
=E2=80=9Cconst &x=E2=80=9D is a =E2=80=9Cconst auto& x=E2=80=9D (an=
d maybe =E2=80=9Cconst * x=E2=80=9D is =E2=80=9Cconst auto *
x=E2=80=9D)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Benefits:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">1)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Popularization of =E2=80=9CAAA rule=
=E2=80=9D<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">2)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Popularization of =E2=80=9CUse cons=
t
whenever possible=E2=80=9D<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">3)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Cleaning the code<o:p></o:p></span>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">4)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Small performance issues (only from
using =E2=80=9Cconst=E2=80=9D for COW types).<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Problem: In
</span><span lang=3D"EN-US">range-based </span><span lang=3D"EN-US">for
loops many will write =E2=80=9Cfor ( const x :=E2=80=9D instead of =E2=80=
=9Cfor (const & x :=E2=80=9D which
will lead to coping=E2=80=A6 again. But maybe const keyword here will allow=
compiler
make some kind of optimizations?<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">---------------------------<o:p=
></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Variant 3
(good in my opinion)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Like 2:
=E2=80=9Cconst x=E2=80=9D means =E2=80=9Cconst auto x=E2=80=9D. But special=
rule for range-based for loops,
where =E2=80=9Cfor ( const x :=E2=80=9D will mean =E2=80=9Cfor ( const auto=
& x :=E2=80=9D.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Benefits: In
that case we will have all benefits from Variant 1.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Problem: two
sets of rules is bad=E2=80=A6 or not?<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">---------------------------<o:p=
></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Variant 4
(not good for me)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Allow
syntax of this kind ONLY in range-based for loops context =E2=80=9Cfor ( co=
nst x :=E2=80=9D
will mean =E2=80=9Cfor ( const auto& x :=E2=80=9D. <o:p></o:p></span></=
p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Benefits:
performance<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Problem: But
I really want to write =E2=80=9Cconst x =3D=E2=80=9D everywhere.<o:p></o:p>=
</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Note that
(I think) for small|primitive|built-in types (like char) compiler could mak=
e a
copy instead of reference.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">---------------------------<o:p=
></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Special
cases:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">1)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Will it be good to allow this=C2=A0=
</span></p><p class=3D"MsoNormal"><span lang=3D"EN-US"></span></p><div clas=
s=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); border-col=
or: rgb(187, 187, 187); border-style: solid; border-width: 1px; word-wrap: =
break-word;"><code class=3D"prettyprint"><div class=3D"subprettyprint"><spa=
n style=3D"color: #008;" class=3D"styled-by-prettify">template</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify"><=E2=80=A6></span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span st=
yle=3D"color: #008;" class=3D"styled-by-prettify">const</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> myFunc</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">()</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #660;" cl=
ass=3D"styled-by-prettify">{=E2=80=A6}</span></div></code></div><p></p><p c=
lass=3D"MsoNormal"><span lang=3D"EN-US">instead of=C2=A0</span></p><p class=
=3D"MsoNormal"><span lang=3D"EN-US"></span></p><div class=3D"prettyprint" s=
tyle=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 187, 1=
87); border-style: solid; border-width: 1px; word-wrap: break-word;"><code =
class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #=
008;" class=3D"styled-by-prettify">template</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify"><=E2=80=A6></span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;=
" class=3D"styled-by-prettify">const</span><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"sty=
led-by-prettify">auto</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify"> myFunc</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">(){=E2=80=A6}</span></div></code></div><p></p><p class=3D"MsoNormal=
"><span lang=3D"EN-US">?</span></p><p class=3D"MsoNormal"><span lang=3D"EN-=
US">I
think =E2=80=93 NO. <o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Here</span></p><p class=3D"MsoN=
ormal"><span lang=3D"EN-US"></span></p><div class=3D"prettyprint" style=3D"=
background-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); bor=
der-style: solid; border-width: 1px; word-wrap: break-word;"><code class=3D=
"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #008;" cl=
ass=3D"styled-by-prettify">const</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">auto</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> x </span><span style=3D"color: #660;" class=3D"styled-by-prettify=
">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #008;" class=3D"styled-by-prettify">double</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">{</span><span styl=
e=3D"color: #066;" class=3D"styled-by-prettify">0.</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">};</span></div></code></div><p></p>=
<p class=3D"MsoNormal"><span lang=3D"EN-US">keyword =E2=80=9Cauto=E2=80=9D =
means nothing. Expression conceptually
complete without =E2=80=9Cauto=E2=80=9D.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">But here</span></p><p class=3D"=
MsoNormal"><span lang=3D"EN-US"></span></p><div class=3D"prettyprint" style=
=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187);=
border-style: solid; border-width: 1px; word-wrap: break-word;"><code clas=
s=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #008;=
" class=3D"styled-by-prettify">template</span><span style=3D"color: #660;" =
class=3D"styled-by-prettify"><=E2=80=A6></span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" cl=
ass=3D"styled-by-prettify">const</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D"style=
d-by-prettify">auto</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> myFunc</span><span style=3D"color: #660;" class=3D"styled-by-pret=
tify">()</span></div></code></div><p></p><p class=3D"MsoNormal"><span lang=
=3D"EN-US">is entire describing of function interface, and =E2=80=9Cauto=E2=
=80=9D
really have meaning =E2=80=9Ctype will appeared in implementation part=E2=
=80=9D.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">This is MY
feeling.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">2)=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Will it be good to allow write=C2=
=A0</span>(Concept TS syntax)</p><p class=3D"MsoNormal"><span lang=3D"EN-US=
"></span></p><div class=3D"prettyprint" style=3D"background-color: rgb(250,=
250, 250); border-color: rgb(187, 187, 187); border-style: solid; border-w=
idth: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div class=
=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-prettif=
y">void</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> my=
Func</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span s=
tyle=3D"color: #008;" class=3D"styled-by-prettify">const</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> x</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;"=
class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D=
"styled-by-prettify">const</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> y </span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">)</span></div></code></div><p></p><p class=3D"MsoNormal"><span lan=
g=3D"EN-US">instead of=C2=A0</span></p><p class=3D"MsoNormal"><span lang=3D=
"EN-US"></span></p><div class=3D"prettyprint" style=3D"background-color: rg=
b(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; bo=
rder-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div c=
lass=3D"subprettyprint"><span style=3D"color: #008;" class=3D"styled-by-pre=
ttify">void</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> myFunc </span><span style=3D"color: #660;" class=3D"styled-by-prettify">(=
</span><span style=3D"color: #008;" class=3D"styled-by-prettify">const</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span s=
tyle=3D"color: #008;" class=3D"styled-by-prettify">auto</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> x</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;"=
class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=3D=
"styled-by-prettify">const</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-pre=
ttify">auto</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> y</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span st=
yle=3D"color: #800;" class=3D"styled-by-prettify">// Variant 2,3</span><spa=
n style=3D"color: #000;" class=3D"styled-by-prettify"><br></span><span styl=
e=3D"color: #008;" class=3D"styled-by-prettify">or</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color: #0=
08;" class=3D"styled-by-prettify">void</span><span style=3D"color: #000;" c=
lass=3D"styled-by-prettify"> myFunc </span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">(</span><span style=3D"color: #008;" class=3D"sty=
led-by-prettify">const</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettif=
y">auto</span><span style=3D"color: #660;" class=3D"styled-by-prettify">&am=
p;</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> x</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"co=
lor: #008;" class=3D"styled-by-prettify">const</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" cl=
ass=3D"styled-by-prettify">auto</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">&</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> y</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">)</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
</span><span style=3D"color: #800;" class=3D"styled-by-prettify">// Variant=
1</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br></sp=
an></div></code></div><p></p><p class=3D"MsoNormal"><span lang=3D"EN-US">?<=
/span></p><p class=3D"MsoNormal"><span lang=3D"EN-US">I think maybe, but I =
am not sure. It depends on what Variant we will choose, because if "co=
nst x" means "by value" - it's rare or often unefficient=
=C2=A0</span>case to passing arguments into function, and we shouldn't =
optimaze using of it.</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Resume
example:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Bad<o:p></o:p></span></p>
<div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); b=
order-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; wo=
rd-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettypr=
int"><span style=3D"color: #008;" class=3D"styled-by-prettify">auto</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> x </span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> calcX</span><span style=3D"colo=
r: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;"=
class=3D"styled-by-prettify"> a</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> b </span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">);</span><span style=3D"color: #000;" class=3D"styled-by-prettify">=
<br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">auto</=
span><span style=3D"color: #000;" class=3D"styled-by-prettify"> y </span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> calcY</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> a</span><span style=3D"color: #660;"=
class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> b </span><span style=3D"color: #660;" class=3D"styled=
-by-prettify">);</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"> <br></span><span style=3D"color: #008;" class=3D"styled-by-prettify"=
>for</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </spa=
n><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"c=
olor: #008;" class=3D"styled-by-prettify">auto</span><span style=3D"color: =
#000;" class=3D"styled-by-prettify"> el </span><span style=3D"color: #660;"=
class=3D"styled-by-prettify">:</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> returnsRange</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> x</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> y=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">)</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"colo=
r: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #660;"=
class=3D"styled-by-prettify">{</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> <br></span><font color=3D"#000000"><span style=3D"col=
or: #000;" class=3D"styled-by-prettify">=C2=A0 </span></font><span style=3D=
"color: #008;" class=3D"styled-by-prettify">auto</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> z </span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> process</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> el</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
c </span><span style=3D"color: #660;" class=3D"styled-by-prettify">);</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> <br>=C2=A0 cons=
ume</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"> z</span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> x</span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> y</span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"> a</span><span style=3D"color: #660;" class=3D"styled-by-prettify">=
,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> b</span>=
<span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> c </span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">);</span><span style=3D"color: #0=
00;" class=3D"styled-by-prettify"> <br></span><span style=3D"color: #660;" =
class=3D"styled-by-prettify">}</span></div></code></div><p class=3D"MsoNorm=
al" style=3D"text-indent:35.4pt"><span lang=3D"EN-US"><br><o:p></o:p></span=
></p>
<p class=3D"MsoNormal">Good<br></p>
<div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); b=
order-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; wo=
rd-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettypr=
int"><span style=3D"color: #008;" class=3D"styled-by-prettify">const</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span sty=
le=3D"color: #008;" class=3D"styled-by-prettify">auto</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> x </span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> calcX</span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> a</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
b </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: #008;" class=3D"styled-by-prettify">const</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"colo=
r: #008;" class=3D"styled-by-prettify">auto</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> y </span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> calcY</span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"> a</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> b </span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">);</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> <br></span><span style=3D=
"color: #008;" class=3D"styled-by-prettify">for</span><span style=3D"color:=
#000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #660;" c=
lass=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"s=
tyled-by-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-=
prettify">const</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">auto=
</span><span style=3D"color: #660;" class=3D"styled-by-prettify">&</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> el </span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">:</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> returnsRange</span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> x</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> y </span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">)</span><span style=3D"color: #000;" class=3D"styled-by-pr=
ettify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">)=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><s=
pan style=3D"color: #660;" class=3D"styled-by-prettify">{</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> <br>=C2=A0 </span><span sty=
le=3D"color: #008;" class=3D"styled-by-prettify">const</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #=
008;" class=3D"styled-by-prettify">auto</span><span style=3D"color: #000;" =
class=3D"styled-by-prettify"> z </span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"sty=
led-by-prettify"> process</span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">(</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"> el</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> c </span>=
<span style=3D"color: #660;" class=3D"styled-by-prettify">);</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> <br>=C2=A0 consume</span=
><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> z</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> x</span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> y</span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> =
a</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> b</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">,</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> c </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">);</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> <br></span><span style=3D"color: #660;" class=3D"=
styled-by-prettify">}</span></div></code></div><p class=3D"MsoNormal" style=
=3D"text-indent:35.4pt"><span lang=3D"EN-US"><br><o:p></o:p></span></p>
<p class=3D"MsoNormal">New<br></p>
<div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, 250); b=
order-color: rgb(187, 187, 187); border-style: solid; border-width: 1px; wo=
rd-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subprettypr=
int"><span style=3D"color: #008;" class=3D"styled-by-prettify">const</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"> x </span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify"> calcX</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> a</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> b </span><span style=3D"color: #660;" class=3D"styled-by-pr=
ettify">);</span><span style=3D"color: #000;" class=3D"styled-by-prettify">=
<br></span><span style=3D"color: #008;" class=3D"styled-by-prettify">const<=
/span><span style=3D"color: #000;" class=3D"styled-by-prettify"> y </span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">=3D</span><span st=
yle=3D"color: #000;" class=3D"styled-by-prettify"> calcY</span><span style=
=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> a</span><span style=3D"color: #660;"=
class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> b </span><span style=3D"color: #660;" class=3D"styled=
-by-prettify">);</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"> <br></span><span style=3D"color: #008;" class=3D"styled-by-prettify"=
>for</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </spa=
n><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span s=
tyle=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"c=
olor: #008;" class=3D"styled-by-prettify">const</span><span style=3D"color:=
#000;" class=3D"styled-by-prettify"> el </span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">:</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> returnsRange</span><span style=3D"color: #660;" cl=
ass=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify"> x</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-prettify"=
> y </span><span style=3D"color: #660;" class=3D"styled-by-prettify">)</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span s=
tyle=3D"color: #660;" class=3D"styled-by-prettify">)</span><span style=3D"c=
olor: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">{</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> <br>=C2=A0 </span><span style=3D"color: #008;" cla=
ss=3D"styled-by-prettify">const</span><span style=3D"color: #000;" class=3D=
"styled-by-prettify"> z </span><span style=3D"color: #660;" class=3D"styled=
-by-prettify">=3D</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> process</span><span style=3D"color: #660;" class=3D"styled-by-prett=
ify">(</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> el<=
/span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><sp=
an style=3D"color: #000;" class=3D"styled-by-prettify"> c </span><span styl=
e=3D"color: #660;" class=3D"styled-by-prettify">);</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> <br>=C2=A0 consume </span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=3D"co=
lor: #000;" class=3D"styled-by-prettify"> z</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify"> x</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> y</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> a</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">,</span><span styl=
e=3D"color: #000;" class=3D"styled-by-prettify"> b</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> c </span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">);</span><span style=3D"color: #000;" class=3D"styl=
ed-by-prettify"> <br></span><span style=3D"color: #660;" class=3D"styled-by=
-prettify">}</span></div></code></div><p class=3D"MsoNormal" style=3D"text-=
indent:35.4pt"><span lang=3D"EN-US"><br><o:p></o:p></span></p>
<p class=3D"MsoNormal">=C2=A0<br></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">So what do
you think about it?<o:p></o:p></span></p>
<span lang=3D"EN-US" style=3D"font-size:11.0pt;line-height:115%;font-family=
:"Calibri","sans-serif";
mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareas=
t-theme-font:
minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Tim=
es New Roman";
mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language=
:
EN-US;mso-bidi-language:AR-SA">P.S. </span><span lang=3D"EN-US" style=3D"fo=
nt-size:
11.0pt;line-height:115%;font-family:"Calibri","sans-serif&qu=
ot;;mso-ascii-theme-font:
minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-la=
tin;
mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman=
";
mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language=
:
KO;mso-bidi-language:AR-SA">Please e</span><span lang=3D"EN-US" style=3D"fo=
nt-size:
11.0pt;line-height:115%;font-family:"Calibri","sans-serif&qu=
ot;;mso-ascii-theme-font:
minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-la=
tin;
mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman=
";
mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language=
:
EN-US;mso-bidi-language:AR-SA">xcuse m</span><span lang=3D"EN-US" style=3D"=
font-size:
11.0pt;line-height:115%;font-family:"Calibri","sans-serif&qu=
ot;;mso-ascii-theme-font:
minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-la=
tin;
mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman=
";
mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language=
:
KO;mso-bidi-language:AR-SA">y bad English</span><span lang=3D"EN-US" style=
=3D"font-size:11.0pt;line-height:115%;font-family:"Calibri","=
;sans-serif";
mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareas=
t-theme-font:
minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Tim=
es New Roman";
mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language=
:
EN-US;mso-bidi-language:AR-SA">.</span><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/62d6268b-990e-45b0-9aab-3c742d00d9ed%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/62d6268b-990e-45b0-9aab-3c742d00d9ed=
%40isocpp.org</a>.<br />
------=_Part_6132_1368108535.1479473148142--
------=_Part_6131_1130677367.1479473148140--
.