Topic: Extension methods


Author: Sidney Congard <sidney.congard@gmail.com>
Date: Sat, 17 Mar 2018 16:27:10 -0700 (PDT)
Raw View
------=_Part_6687_2021994882.1521329230282
Content-Type: multipart/alternative;
 boundary="----=_Part_6688_2028273438.1521329230282"

------=_Part_6688_2028273438.1521329230282
Content-Type: text/plain; charset="UTF-8"


Hello, I would like to know if the extension methods proposal (such as
presented in this paper :
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0079r0.pdf) is
considered for C++20.

This proposal allows to define free functions available with the member
function syntax, for existing
classes :

struct int_array {
    int* data;
    int size;
};

// 'this' makes back an extension method
// Usage : myArray.back()
int& back(int_array array* this) {
    return *(array.data + size - 1);
}

I think there is great benefits to implement functions as not member ones :
    We get a better encapsulation because less functions can act on the
private object's state
    We can add behavior to existing classes and (optionnally constrained)
template classes without
    modifying them
But when it comes to using the function, I prefer the member function
syntax :
    It is easier to read (well, for me)
    It permit proper chaining of function calls (a.f1().f2() rather than
f2(f1(a)))
    Is what is currently widely adopted to act on an object, at the point
where the same functions
    are copyied to be added to similar classes
    It is more friendly to use with a development environment proposing
which member functions are
    available for the current object

Moreover, with concepts surely incoming with C++20,
(
https://www.reddit.com/r/cpp/comments/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/
)
we could define extension methods for concepts.

A well-known exemple is LINQ in C# : it is available for every class which
implement IEnumerable
(an equivalent of C++ iterable containers, with begin() and end()).

Here is a little exemple in C#, where 'Where' and 'Take' functions are
extension methods.

var meal = EnumerateFridge()
    .Where(food => food.HasChocolate())
    .Take(7);

--
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/097834ee-5d25-484f-8641-b64707bd53a7%40isocpp.org.

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

<div dir=3D"ltr"><br>Hello, I would like to know if the extension methods p=
roposal (such as presented in this paper :<br><a href=3D"http://www.open-st=
d.org/jtc1/sc22/wg21/docs/papers/2015/p0079r0.pdf">http://www.open-std.org/=
jtc1/sc22/wg21/docs/papers/2015/p0079r0.pdf</a>) is considered for C++20.<b=
r><br>This proposal allows to define free functions available with the memb=
er function syntax, for existing<br>classes :<br><br><div style=3D"backgrou=
nd-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-styl=
e: solid; border-width: 1px; overflow-wrap: break-word;" class=3D"prettypri=
nt"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span style=
=3D"color: #008;" class=3D"styled-by-prettify">struct</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"> int_array </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 =C2=A0 int* data</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 =C2=A0 int size</span=
><span style=3D"color: #000;" class=3D"styled-by-prettify"></span><span sty=
le=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><span style=3D"color: #000;" cla=
ss=3D"styled-by-prettify"><br><br></span><span style=3D"color: #800;" class=
=3D"styled-by-prettify">// &#39;this&#39; makes back an extension method</s=
pan><span style=3D"color: #000;" class=3D"styled-by-prettify"><code class=
=3D"prettyprint"><span style=3D"color: #000;" class=3D"styled-by-prettify">=
<br></span><span style=3D"color: #800;" class=3D"styled-by-prettify">// Usa=
ge : myArray.back()</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"><br></span></code>int&amp;</span><span style=3D"color: #008;" clas=
s=3D"styled-by-prettify"></span><span style=3D"color: #000;" class=3D"style=
d-by-prettify"> back</span><span style=3D"color: #660;" class=3D"styled-by-=
prettify">(</span><code class=3D"prettyprint"><span style=3D"color: #000;" =
class=3D"styled-by-prettify">int_array</span></code><span style=3D"color: #=
660;" class=3D"styled-by-prettify"> array*</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">this</span><span style=3D"color: #660;" class=3D"st=
yled-by-prettify">)</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> </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 =C2=A0 </span><span style=3D"color: #008;" class=3D"styled-by-prettify"=
>return</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </=
span><code class=3D"prettyprint"><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">*(array.data + size - 1)</span></code><span style=3D"color:=
 #000;" class=3D"styled-by-prettify"></span><span style=3D"color: #660;" cl=
ass=3D"styled-by-prettify">;</span><span style=3D"color: #000;" class=3D"st=
yled-by-prettify"><br></span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">}</span><span style=3D"color: #000;" class=3D"styled-by-prettif=
y"><br></span></div></code></div><br>I think there is great benefits to imp=
lement functions as not member ones :<br>=C2=A0=C2=A0=C2=A0 We get a better=
 encapsulation because less functions can act on the private object&#39;s s=
tate<br>=C2=A0=C2=A0=C2=A0 We can add behavior to existing classes and (opt=
ionnally constrained) template classes without<br>=C2=A0=C2=A0=C2=A0 modify=
ing them<br>But when it comes to using the function, I prefer the member fu=
nction syntax :<br>=C2=A0=C2=A0=C2=A0 It is easier to read (well, for me)<b=
r>=C2=A0=C2=A0=C2=A0 It permit proper chaining of function calls (a.f1().f2=
() rather than f2(f1(a)))<br>=C2=A0=C2=A0=C2=A0 Is what is currently widely=
 adopted to act on an object, at the point where the same functions<br>=C2=
=A0=C2=A0=C2=A0 are copyied to be added to similar classes<br>=C2=A0=C2=A0=
=C2=A0 It is more friendly to use with a development environment proposing =
which member functions are<br>=C2=A0=C2=A0=C2=A0 available for the current =
object<br><br>Moreover, with concepts surely incoming with C++20,<br>(<a hr=
ef=3D"https://www.reddit.com/r/cpp/comments/854mu9/2018_jacksonville_iso_c_=
committee_reddit_trip/">https://www.reddit.com/r/cpp/comments/854mu9/2018_j=
acksonville_iso_c_committee_reddit_trip/</a>)<br>we could define extension =
methods for concepts.<br><br>A well-known exemple is LINQ in C# : it is ava=
ilable for every class which implement IEnumerable<br>(an equivalent of C++=
 iterable containers, with begin() and end()).<br><br>Here is a little exem=
ple in C#, where &#39;Where&#39; and &#39;Take&#39; functions are extension=
 methods.<br><span style=3D"color: #000;" class=3D"styled-by-prettify"></sp=
an><br><span style=3D"color: #000;" class=3D"styled-by-prettify"></span><di=
v 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"subprettyp=
rint"><span style=3D"color: #008;" class=3D"styled-by-prettify">var</span><=
span style=3D"color: #000;" class=3D"styled-by-prettify"> meal </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=
: #606;" class=3D"styled-by-prettify">EnumerateFridge</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 =C2=A0 </span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">.</span><span style=3D"color: #6=
06;" class=3D"styled-by-prettify">Where</span><span style=3D"color: #660;" =
class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" class=3D"=
styled-by-prettify">food </span><span style=3D"color: #660;" class=3D"style=
d-by-prettify">=3D&gt;</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> food</span><span style=3D"color: #660;" class=3D"styled-by-pre=
ttify">.</span><span style=3D"color: #606;" class=3D"styled-by-prettify">Ha=
sChocolate</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 =C2=A0 </span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>.</span><span style=3D"color: #606;" class=3D"styled-by-prettify">Take</sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span =
style=3D"color: #066;" class=3D"styled-by-prettify">7</span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">);</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify"><br></span></div></code></div><br></div>

<p></p>

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

------=_Part_6688_2028273438.1521329230282--

------=_Part_6687_2021994882.1521329230282--

.


Author: Nicolas Lesser <blitzrakete@gmail.com>
Date: Sun, 18 Mar 2018 00:01:40 +0000
Raw View
--0000000000005d6e030567a48c0a
Content-Type: text/plain; charset="UTF-8"

They proposal is from 2015, where it was rejected in Kona from EWG. Here
are some concerns that were mentioned:

- C# people don't like this
- If a class adds a new function which happens to be the same as your
extension function, you're going to be surprised
- It's not uniform, basically just syntactic sugar some of the time


On Sat, Mar 17, 2018, 7:27 PM Sidney Congard <sidney.congard@gmail.com>
wrote:

>
> Hello, I would like to know if the extension methods proposal (such as
> presented in this paper :
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0079r0.pdf) is
> considered for C++20.
>
> This proposal allows to define free functions available with the member
> function syntax, for existing
> classes :
>
> struct int_array {
>     int* data;
>     int size;
> };
>
> // 'this' makes back an extension method
> // Usage : myArray.back()
> int& back(int_array array* this) {
>     return *(array.data + size - 1);
> }
>
> I think there is great benefits to implement functions as not member ones :
>     We get a better encapsulation because less functions can act on the
> private object's state
>     We can add behavior to existing classes and (optionnally constrained)
> template classes without
>     modifying them
> But when it comes to using the function, I prefer the member function
> syntax :
>     It is easier to read (well, for me)
>     It permit proper chaining of function calls (a.f1().f2() rather than
> f2(f1(a)))
>     Is what is currently widely adopted to act on an object, at the point
> where the same functions
>     are copyied to be added to similar classes
>     It is more friendly to use with a development environment proposing
> which member functions are
>     available for the current object
>
> Moreover, with concepts surely incoming with C++20,
> (
> https://www.reddit.com/r/cpp/comments/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/
> )
> we could define extension methods for concepts.
>
> A well-known exemple is LINQ in C# : it is available for every class which
> implement IEnumerable
> (an equivalent of C++ iterable containers, with begin() and end()).
>
> Here is a little exemple in C#, where 'Where' and 'Take' functions are
> extension methods.
>
> var meal = EnumerateFridge()
>     .Where(food => food.HasChocolate())
>     .Take(7);
>
> --
> 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/097834ee-5d25-484f-8641-b64707bd53a7%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/097834ee-5d25-484f-8641-b64707bd53a7%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/CALmDwq1Wx21HQwOhj20A%2Bm%2BSzMcekHaLqY1Qva_LiLmY%3DEPpbA%40mail.gmail.com.

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

<div dir=3D"auto"><div>They proposal is from 2015, where it was rejected in=
 Kona from EWG. Here are some concerns that were mentioned:</div><div dir=
=3D"auto"><br></div><div dir=3D"auto">- C# people don&#39;t like this</div>=
<div dir=3D"auto">- If a class adds a new function which happens to be the =
same as your extension function, you&#39;re going to be surprised</div><div=
 dir=3D"auto">- It&#39;s not uniform, basically just syntactic sugar some o=
f the time</div><div dir=3D"auto"><br></div><div dir=3D"auto"><br><div clas=
s=3D"gmail_quote" dir=3D"auto"><div dir=3D"ltr">On Sat, Mar 17, 2018, 7:27 =
PM Sidney Congard &lt;<a href=3D"mailto:sidney.congard@gmail.com" target=3D=
"_blank" rel=3D"noreferrer">sidney.congard@gmail.com</a>&gt; wrote:<br></di=
v><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>Hello, I would like t=
o know if the extension methods proposal (such as presented in this paper :=
<br><a href=3D"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p007=
9r0.pdf" rel=3D"noreferrer noreferrer" target=3D"_blank">http://www.open-st=
d.org/jtc1/sc22/wg21/docs/papers/2015/p0079r0.pdf</a>) is considered for C+=
+20.<br><br>This proposal allows to define free functions available with th=
e member function syntax, for existing<br>classes :<br><br><div style=3D"ba=
ckground-color:rgb(250,250,250);border-color:rgb(187,187,187);border-style:=
solid;border-width:1px" class=3D"m_-8582035721683849570m_-58769081906494539=
61prettyprint"><code class=3D"m_-8582035721683849570m_-5876908190649453961p=
rettyprint"><div class=3D"m_-8582035721683849570m_-5876908190649453961subpr=
ettyprint"><span style=3D"color:#008" class=3D"m_-8582035721683849570m_-587=
6908190649453961styled-by-prettify">struct</span><span style=3D"color:#000"=
 class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify"> =
int_array </span><span style=3D"color:#660" class=3D"m_-8582035721683849570=
m_-5876908190649453961styled-by-prettify">{</span><span style=3D"color:#000=
" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify">=
<br>=C2=A0 =C2=A0 int* data</span><span style=3D"color:#660" class=3D"m_-85=
82035721683849570m_-5876908190649453961styled-by-prettify">;</span><span st=
yle=3D"color:#000" class=3D"m_-8582035721683849570m_-5876908190649453961sty=
led-by-prettify"><br>=C2=A0 =C2=A0 int size</span><span style=3D"color:#000=
" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify">=
</span><span style=3D"color:#660" class=3D"m_-8582035721683849570m_-5876908=
190649453961styled-by-prettify">;</span><span style=3D"color:#000" class=3D=
"m_-8582035721683849570m_-5876908190649453961styled-by-prettify"><br></span=
><span style=3D"color:#660" class=3D"m_-8582035721683849570m_-5876908190649=
453961styled-by-prettify">};</span><span style=3D"color:#000" class=3D"m_-8=
582035721683849570m_-5876908190649453961styled-by-prettify"><br><br></span>=
<span style=3D"color:#800" class=3D"m_-8582035721683849570m_-58769081906494=
53961styled-by-prettify">// &#39;this&#39; makes back an extension method</=
span><span style=3D"color:#000" class=3D"m_-8582035721683849570m_-587690819=
0649453961styled-by-prettify"><code class=3D"m_-8582035721683849570m_-58769=
08190649453961prettyprint"><span style=3D"color:#000" class=3D"m_-858203572=
1683849570m_-5876908190649453961styled-by-prettify"><br></span><span style=
=3D"color:#800" class=3D"m_-8582035721683849570m_-5876908190649453961styled=
-by-prettify">// Usage : myArray.back()</span><span style=3D"color:#000" cl=
ass=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify"><br>=
</span></code>int&amp;</span><span style=3D"color:#008" class=3D"m_-8582035=
721683849570m_-5876908190649453961styled-by-prettify"></span><span style=3D=
"color:#000" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by=
-prettify"> back</span><span style=3D"color:#660" class=3D"m_-8582035721683=
849570m_-5876908190649453961styled-by-prettify">(</span><code class=3D"m_-8=
582035721683849570m_-5876908190649453961prettyprint"><span style=3D"color:#=
000" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettif=
y">int_array</span></code><span style=3D"color:#660" class=3D"m_-8582035721=
683849570m_-5876908190649453961styled-by-prettify"> array*</span><span styl=
e=3D"color:#000" class=3D"m_-8582035721683849570m_-5876908190649453961style=
d-by-prettify"> </span><span style=3D"color:#008" class=3D"m_-8582035721683=
849570m_-5876908190649453961styled-by-prettify">this</span><span style=3D"c=
olor:#660" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-p=
rettify">)</span><span style=3D"color:#000" class=3D"m_-8582035721683849570=
m_-5876908190649453961styled-by-prettify"> </span><span style=3D"color:#660=
" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify">=
{</span><span style=3D"color:#000" class=3D"m_-8582035721683849570m_-587690=
8190649453961styled-by-prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"co=
lor:#008" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-pr=
ettify">return</span><span style=3D"color:#000" class=3D"m_-858203572168384=
9570m_-5876908190649453961styled-by-prettify"> </span><code class=3D"m_-858=
2035721683849570m_-5876908190649453961prettyprint"><span style=3D"color:#66=
0" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify"=
>*(array.data + size - 1)</span></code><span style=3D"color:#000" class=3D"=
m_-8582035721683849570m_-5876908190649453961styled-by-prettify"></span><spa=
n style=3D"color:#660" class=3D"m_-8582035721683849570m_-587690819064945396=
1styled-by-prettify">;</span><span style=3D"color:#000" class=3D"m_-8582035=
721683849570m_-5876908190649453961styled-by-prettify"><br></span><span styl=
e=3D"color:#660" class=3D"m_-8582035721683849570m_-5876908190649453961style=
d-by-prettify">}</span><span style=3D"color:#000" class=3D"m_-8582035721683=
849570m_-5876908190649453961styled-by-prettify"><br></span></div></code></d=
iv><br>I think there is great benefits to implement functions as not member=
 ones :<br>=C2=A0=C2=A0=C2=A0 We get a better encapsulation because less fu=
nctions can act on the private object&#39;s state<br>=C2=A0=C2=A0=C2=A0 We =
can add behavior to existing classes and (optionnally constrained) template=
 classes without<br>=C2=A0=C2=A0=C2=A0 modifying them<br>But when it comes =
to using the function, I prefer the member function syntax :<br>=C2=A0=C2=
=A0=C2=A0 It is easier to read (well, for me)<br>=C2=A0=C2=A0=C2=A0 It perm=
it proper chaining of function calls (a.f1().f2() rather than f2(f1(a)))<br=
>=C2=A0=C2=A0=C2=A0 Is what is currently widely adopted to act on an object=
, at the point where the same functions<br>=C2=A0=C2=A0=C2=A0 are copyied t=
o be added to similar classes<br>=C2=A0=C2=A0=C2=A0 It is more friendly to =
use with a development environment proposing which member functions are<br>=
=C2=A0=C2=A0=C2=A0 available for the current object<br><br>Moreover, with c=
oncepts surely incoming with C++20,<br>(<a href=3D"https://www.reddit.com/r=
/cpp/comments/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/" rel=3D=
"noreferrer noreferrer" target=3D"_blank">https://www.reddit.com/r/cpp/comm=
ents/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/</a>)<br>we could=
 define extension methods for concepts.<br><br>A well-known exemple is LINQ=
 in C# : it is available for every class which implement IEnumerable<br>(an=
 equivalent of C++ iterable containers, with begin() and end()).<br><br>Her=
e is a little exemple in C#, where &#39;Where&#39; and &#39;Take&#39; funct=
ions are extension methods.<br><span style=3D"color:#000" class=3D"m_-85820=
35721683849570m_-5876908190649453961styled-by-prettify"></span><br><span st=
yle=3D"color:#000" class=3D"m_-8582035721683849570m_-5876908190649453961sty=
led-by-prettify"></span><div style=3D"background-color:rgb(250,250,250);bor=
der-color:rgb(187,187,187);border-style:solid;border-width:1px" class=3D"m_=
-8582035721683849570m_-5876908190649453961prettyprint"><code class=3D"m_-85=
82035721683849570m_-5876908190649453961prettyprint"><div class=3D"m_-858203=
5721683849570m_-5876908190649453961subprettyprint"><span style=3D"color:#00=
8" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify"=
>var</span><span style=3D"color:#000" class=3D"m_-8582035721683849570m_-587=
6908190649453961styled-by-prettify"> meal </span><span style=3D"color:#660"=
 class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify">=
=3D</span><span style=3D"color:#000" class=3D"m_-8582035721683849570m_-5876=
908190649453961styled-by-prettify"> </span><span style=3D"color:#606" class=
=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify">Enumera=
teFridge</span><span style=3D"color:#660" class=3D"m_-8582035721683849570m_=
-5876908190649453961styled-by-prettify">()</span><span style=3D"color:#000"=
 class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify"><=
br>=C2=A0 =C2=A0 </span><span style=3D"color:#660" class=3D"m_-858203572168=
3849570m_-5876908190649453961styled-by-prettify">.</span><span style=3D"col=
or:#606" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-pre=
ttify">Where</span><span style=3D"color:#660" class=3D"m_-85820357216838495=
70m_-5876908190649453961styled-by-prettify">(</span><span style=3D"color:#0=
00" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify=
">food </span><span style=3D"color:#660" class=3D"m_-8582035721683849570m_-=
5876908190649453961styled-by-prettify">=3D&gt;</span><span style=3D"color:#=
000" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettif=
y"> food</span><span style=3D"color:#660" class=3D"m_-8582035721683849570m_=
-5876908190649453961styled-by-prettify">.</span><span style=3D"color:#606" =
class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify">Ha=
sChocolate</span><span style=3D"color:#660" class=3D"m_-8582035721683849570=
m_-5876908190649453961styled-by-prettify">())</span><span style=3D"color:#0=
00" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify=
"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#660" class=3D"m_-858203572=
1683849570m_-5876908190649453961styled-by-prettify">.</span><span style=3D"=
color:#606" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-=
prettify">Take</span><span style=3D"color:#660" class=3D"m_-858203572168384=
9570m_-5876908190649453961styled-by-prettify">(</span><span style=3D"color:=
#066" class=3D"m_-8582035721683849570m_-5876908190649453961styled-by-pretti=
fy">7</span><span style=3D"color:#660" class=3D"m_-8582035721683849570m_-58=
76908190649453961styled-by-prettify">);</span><span style=3D"color:#000" cl=
ass=3D"m_-8582035721683849570m_-5876908190649453961styled-by-prettify"><br>=
</span></div></code></div><br></div>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" rel=3D"nore=
ferrer noreferrer" 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" rel=3D"noreferrer noreferrer" 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/097834ee-5d25-484f-8641-b64707bd53a7%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgi=
d/std-proposals/097834ee-5d25-484f-8641-b64707bd53a7%40isocpp.org</a>.<br>
</blockquote></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CALmDwq1Wx21HQwOhj20A%2Bm%2BSzMcekHaL=
qY1Qva_LiLmY%3DEPpbA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CALmDwq1Wx2=
1HQwOhj20A%2Bm%2BSzMcekHaLqY1Qva_LiLmY%3DEPpbA%40mail.gmail.com</a>.<br />

--0000000000005d6e030567a48c0a--

.


Author: Sidney Congard <sidney.congard@gmail.com>
Date: Sat, 17 Mar 2018 17:14:18 -0700 (PDT)
Raw View
------=_Part_6593_539263765.1521332058382
Content-Type: multipart/alternative;
 boundary="----=_Part_6594_1101655989.1521332058382"

------=_Part_6594_1101655989.1521332058382
Content-Type: text/plain; charset="UTF-8"


Thank you !

It's a little sad though, regarding the cost paid by some code to emulate
this

--
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/254a3e7b-4c23-4f90-9ce6-64608b43834a%40isocpp.org.

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

<div dir=3D"ltr"><br>Thank you !<br><br>It&#39;s a little sad though, regar=
ding the cost paid by some code to emulate this<br><br></div>

<p></p>

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

------=_Part_6594_1101655989.1521332058382--

------=_Part_6593_539263765.1521332058382--

.


Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Sun, 18 Mar 2018 00:27:33 +0000
Raw View
--000000000000fbb3200567a4e8a6
Content-Type: text/plain; charset="UTF-8"

Look at p0847 - we are going there, just not yet.

G

On Sun, Mar 18, 2018, 00:14 Sidney Congard <sidney.congard@gmail.com> wrote:

>
> Thank you !
>
> It's a little sad though, regarding the cost paid by some code to emulate
> this
>
> --
> 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/254a3e7b-4c23-4f90-9ce6-64608b43834a%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/254a3e7b-4c23-4f90-9ce6-64608b43834a%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%3DkUjianhOq9A79xrZUo0%3DWAirTzwcQtzuBYPwrnLk5NK6w%40mail.gmail.com.

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

<div dir=3D"auto">Look at p0847 - we are going there, just not yet.<div dir=
=3D"auto"><br></div><div dir=3D"auto">G</div></div><br><div class=3D"gmail_=
quote"><div dir=3D"ltr">On Sun, Mar 18, 2018, 00:14 Sidney Congard &lt;<a h=
ref=3D"mailto:sidney.congard@gmail.com">sidney.congard@gmail.com</a>&gt; wr=
ote:<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>Thank you=
 !<br><br>It&#39;s a little sad though, regarding the cost paid by some cod=
e to emulate this<br><br></div>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank" rel=3D"noreferrer">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" rel=3D"noreferrer">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/254a3e7b-4c23-4f90-9ce6-64608b43834a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank" =
rel=3D"noreferrer">https://groups.google.com/a/isocpp.org/d/msgid/std-propo=
sals/254a3e7b-4c23-4f90-9ce6-64608b43834a%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&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkUjianhOq9A79xrZUo0%3DWAirTzw=
cQtzuBYPwrnLk5NK6w%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkUjia=
nhOq9A79xrZUo0%3DWAirTzwcQtzuBYPwrnLk5NK6w%40mail.gmail.com</a>.<br />

--000000000000fbb3200567a4e8a6--

.


Author: Sidney Congard <sidney.congard@gmail.com>
Date: Sat, 17 Mar 2018 17:54:48 -0700 (PDT)
Raw View
------=_Part_6727_456017525.1521334488677
Content-Type: multipart/alternative;
 boundary="----=_Part_6728_969168584.1521334488677"

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


Le samedi 17 mars 2018 20:27:47 UTC-4, Ga=C5=A1per A=C5=BEman a =C3=A9crit =
:
>
> Look at p0847 - we are going there, just not yet.
>
> G
>

I didn't see that coming ; by this, I meant the extension method ...
But thanks for your comment, I didn't know about this (nice) proposal !

--=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/d531ffa3-e3f0-4247-b040-9aec8a725875%40isocpp.or=
g.

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

<div dir=3D"ltr"><br>Le samedi 17 mars 2018 20:27:47 UTC-4, Ga=C5=A1per A=
=C5=BEman a =C3=A9crit=C2=A0:<blockquote class=3D"gmail_quote" style=3D"mar=
gin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><=
div dir=3D"auto">Look at p0847 - we are going there, just not yet.<div dir=
=3D"auto"><br></div><div dir=3D"auto">G</div></div></blockquote><div><br>I =
didn&#39;t see that coming ; by this, I meant the extension method ...<br>B=
ut thanks for your comment, I didn&#39;t know about this (nice) proposal !<=
br></div></div>

<p></p>

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

------=_Part_6728_969168584.1521334488677--

------=_Part_6727_456017525.1521334488677--

.