Topic: Use stateless lambdas without capturing


Author: David Krauss <potswa@gmail.com>
Date: Sat, 3 Dec 2016 19:47:07 +0800
Raw View
--Apple-Mail=_0E270FA7-5D96-41CA-BA51-E99B482376E1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8

int main() {
    auto a =3D []{ return 5; };
    auto b =3D []{ +a; a(); }; // Error, =E2=80=9Ca=E2=80=9D not captured.
}

A stateless lambda object is empty, so it=E2=80=99s unfortunate that they m=
ust be captured for use by another lambda. In this case, b cannot be statel=
ess.

C++17 constexpr lambdas offer a partial workaround:

int main() {
    constexpr auto a =3D +[]{ return 5; };
    auto b =3D []{ +a; a(); }; // OK, =E2=80=9Ca=E2=80=9D is a constant id-=
expression used with L-to-R conversion.
}

This is a bit esoteric, and it can possibly cost some performance.

Perhaps it should be permissible to call, convert, and even copy a stateles=
s lambda from an enclosing scope. (Binding to a reference or taking an addr=
ess are genuinely problematic, though. Pass-by-reference would be broken, b=
ut fortunately <algorithm> and such pass by value.)

--=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/DA325640-1898-4835-844F-290FC7A482BA%40gmail.com=
..

--Apple-Mail=_0E270FA7-5D96-41CA-BA51-E99B482376E1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><div class=3D""><f=
ont face=3D"Courier" class=3D"">int main() {</font></div><div class=3D""><f=
ont face=3D"Courier" class=3D"">&nbsp; &nbsp; auto a =3D []{ return 5; };</=
font></div><div class=3D""><font face=3D"Courier" class=3D"">&nbsp; &nbsp; =
auto b =3D []{ +a; a(); }; // Error, =E2=80=9Ca=E2=80=9D not captured.</fon=
t></div><div class=3D""><font face=3D"Courier" class=3D"">}</font></div><di=
v class=3D""><br class=3D""></div>A stateless lambda object is empty, so it=
=E2=80=99s unfortunate that they must be captured for use by another lambda=
.. In this case, <font face=3D"Courier" class=3D"">b</font> cannot be statel=
ess.<div class=3D""><br class=3D""></div><div class=3D"">C++17 constexpr la=
mbdas offer a partial workaround:</div><div class=3D""><br class=3D""></div=
><div class=3D""><div class=3D""><font face=3D"Courier" class=3D"">int main=
() {</font></div><div class=3D""><font face=3D"Courier" class=3D"">&nbsp; &=
nbsp; constexpr auto a =3D +[]{ return 5; };</font></div><div class=3D""><f=
ont face=3D"Courier" class=3D"">&nbsp; &nbsp; auto b =3D []{ +a; a(); }; //=
 OK, =E2=80=9Ca=E2=80=9D is a constant id-expression used with L-to-R conve=
rsion.</font></div><div class=3D""><font face=3D"Courier" class=3D"">}</fon=
t></div></div><div class=3D""><br class=3D""></div><div class=3D"">This is =
a bit esoteric, and it can possibly cost some performance.</div><div class=
=3D""><br class=3D""></div><div class=3D"">Perhaps it should be permissible=
 to call, convert, and even copy a stateless lambda from an enclosing scope=
.. (Binding to a reference or taking an address are genuinely problematic, t=
hough. Pass-by-reference would be broken, but fortunately&nbsp;<font face=
=3D"Courier" class=3D"">&lt;algorithm&gt;</font>&nbsp;and such pass by valu=
e.)</div><div class=3D""><br class=3D""></div></body></html>

<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/DA325640-1898-4835-844F-290FC7A482BA%=
40gmail.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/DA325640-1898-4835-844F-290FC7A482BA%=
40gmail.com</a>.<br />

--Apple-Mail=_0E270FA7-5D96-41CA-BA51-E99B482376E1--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sat, 3 Dec 2016 07:46:04 -0800 (PST)
Raw View
------=_Part_1045_194412753.1480779964130
Content-Type: multipart/alternative;
 boundary="----=_Part_1046_1489039637.1480779964130"

------=_Part_1046_1489039637.1480779964130
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Saturday, December 3, 2016 at 6:47:13 AM UTC-5, David Krauss wrote:
>
> int main() {
>     auto a =3D []{ return 5; };
>     auto b =3D []{ +a; a(); }; // Error, =E2=80=9Ca=E2=80=9D not captured=
..
> }
>
> A stateless lambda object is empty, so it=E2=80=99s unfortunate that they=
 must be=20
> captured for use by another lambda. In this case, b cannot be stateless.
>
> C++17 constexpr lambdas offer a partial workaround:
>
> int main() {
>     constexpr auto a =3D +[]{ return 5; };
>     auto b =3D []{ +a; a(); }; // OK, =E2=80=9Ca=E2=80=9D is a constant i=
d-expression used=20
> with L-to-R conversion.
> }
>
> This is a bit esoteric, and it can possibly cost some performance.
>
> Perhaps it should be permissible to call, convert, and even copy a=20
> stateless lambda from an enclosing scope. (Binding to a reference or taki=
ng=20
> an address are genuinely problematic, though. Pass-by-reference would be=
=20
> broken, but fortunately <algorithm> and such pass by value.)
>

Why is this important? If it is a stateless lambda, then there's really no=
=20
reason not to just make them named functions outside of the function's=20
scope. I fail to see why encouraging people to write a plethora of=20
functions within another function is a good idea.

Lambdas are fine things, when taken in moderation. But I don't like us=20
adding features that encourage people to use them more often than is=20
strictly necessary for code-clarity and functionality purposes.

--=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/f2e7975d-3c7e-411e-8237-b60041603378%40isocpp.or=
g.

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

<div dir=3D"ltr">On Saturday, December 3, 2016 at 6:47:13 AM UTC-5, David K=
rauss wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-lef=
t: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div style=3D"word=
-wrap:break-word"><div><font face=3D"Courier">int main() {</font></div><div=
><font face=3D"Courier">=C2=A0 =C2=A0 auto a =3D []{ return 5; };</font></d=
iv><div><font face=3D"Courier">=C2=A0 =C2=A0 auto b =3D []{ +a; a(); }; // =
Error, =E2=80=9Ca=E2=80=9D not captured.</font></div><div><font face=3D"Cou=
rier">}</font></div><div><br></div>A stateless lambda object is empty, so i=
t=E2=80=99s unfortunate that they must be captured for use by another lambd=
a. In this case, <font face=3D"Courier">b</font> cannot be stateless.<div><=
br></div><div>C++17 constexpr lambdas offer a partial workaround:</div><div=
><br></div><div><div><font face=3D"Courier">int main() {</font></div><div><=
font face=3D"Courier">=C2=A0 =C2=A0 constexpr auto a =3D +[]{ return 5; };<=
/font></div><div><font face=3D"Courier">=C2=A0 =C2=A0 auto b =3D []{ +a; a(=
); }; // OK, =E2=80=9Ca=E2=80=9D is a constant id-expression used with L-to=
-R conversion.</font></div><div><font face=3D"Courier">}</font></div></div>=
<div><br></div><div>This is a bit esoteric, and it can possibly cost some p=
erformance.</div><div><br></div><div>Perhaps it should be permissible to ca=
ll, convert, and even copy a stateless lambda from an enclosing scope. (Bin=
ding to a reference or taking an address are genuinely problematic, though.=
 Pass-by-reference would be broken, but fortunately=C2=A0<font face=3D"Cour=
ier">&lt;algorithm&gt;</font>=C2=A0and such pass by value.)</div></div></bl=
ockquote><div><br>Why is this important? If it is a stateless lambda, then =
there&#39;s really no reason not to just make them named functions outside =
of the function&#39;s scope. I fail to see why encouraging people to write =
a plethora of functions within another function is a good idea.<br><br>Lamb=
das are fine things, when taken in moderation. But I don&#39;t like us addi=
ng features that encourage people to use them more often than is strictly n=
ecessary for code-clarity and functionality purposes.<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/f2e7975d-3c7e-411e-8237-b60041603378%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/f2e7975d-3c7e-411e-8237-b60041603378=
%40isocpp.org</a>.<br />

------=_Part_1046_1489039637.1480779964130--

------=_Part_1045_194412753.1480779964130--

.


Author: =?UTF-8?Q?Klaim_=2D_Jo=C3=ABl_Lamotte?= <mjklaim@gmail.com>
Date: Sat, 3 Dec 2016 20:00:53 +0100
Raw View
--001a11444ca281c0be0542c5ac41
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On 3 December 2016 at 12:47, David Krauss <potswa@gmail.com> wrote:

> int main() {
>     auto a =3D []{ return 5; };
>     auto b =3D []{ +a; a(); }; // Error, =E2=80=9Ca=E2=80=9D not captured=
..
> }
>
> A stateless lambda object is empty, so it=E2=80=99s unfortunate that they=
 must be
> captured for use by another lambda. In this case, b cannot be stateless.
>
> C++17 constexpr lambdas offer a partial workaround:
>

> int main() {
>     constexpr auto a =3D +[]{ return 5; };
>     auto b =3D []{ +a; a(); }; // OK, =E2=80=9Ca=E2=80=9D is a constant i=
d-expression used
> with L-to-R conversion.
> }
>
> This is a bit esoteric, and it can possibly cost some performance.
>

I tend to just make `a` static const in these cases. Not esoteric and makes
perfect sense and don't need to capture.


>
> Perhaps it should be permissible to call, convert, and even copy a
> stateless lambda from an enclosing scope. (Binding to a reference or taki=
ng
> an address are genuinely problematic, though. Pass-by-reference would be
> broken, but fortunately <algorithm> and such pass by value.)
>
> --
> 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/is
> ocpp.org/d/msgid/std-proposals/DA325640-1898-4835-844F-
> 290FC7A482BA%40gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/DA325640-18=
98-4835-844F-290FC7A482BA%40gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r>
> .
>

--=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/CAOU91OP2Udh_K7Rx%3DGUBUNoA_XPVh4izddF-VOcyBnQuR=
sbDkQ%40mail.gmail.com.

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

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On 3 December 2016 at 12:47, David Krauss <span dir=3D"ltr">&lt;<a href=
=3D"mailto:potswa@gmail.com" target=3D"_blank">potswa@gmail.com</a>&gt;</sp=
an> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div style=3D"word-wrap:break-=
word"><div><font face=3D"Courier">int main() {</font></div><div><font face=
=3D"Courier">=C2=A0 =C2=A0 auto a =3D []{ return 5; };</font></div><div><fo=
nt face=3D"Courier">=C2=A0 =C2=A0 auto b =3D []{ +a; a(); }; // Error, =E2=
=80=9Ca=E2=80=9D not captured.</font></div><div><font face=3D"Courier">}</f=
ont></div><div><br></div>A stateless lambda object is empty, so it=E2=80=99=
s unfortunate that they must be captured for use by another lambda. In this=
 case, <font face=3D"Courier">b</font> cannot be stateless.<div><br></div><=
div>C++17 constexpr lambdas offer a partial workaround:</div></div></blockq=
uote><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div style=3D"word-wrap:break-word"><di=
v><br></div><div><div><font face=3D"Courier">int main() {</font></div><div>=
<font face=3D"Courier">=C2=A0 =C2=A0 constexpr auto a =3D +[]{ return 5; };=
</font></div><div><font face=3D"Courier">=C2=A0 =C2=A0 auto b =3D []{ +a; a=
(); }; // OK, =E2=80=9Ca=E2=80=9D is a constant id-expression used with L-t=
o-R conversion.</font></div><div><font face=3D"Courier">}</font></div></div=
><div><br></div><div>This is a bit esoteric, and it can possibly cost some =
performance.</div></div></blockquote><div><br></div><div>I tend to just mak=
e `a` static const in these cases. Not esoteric and makes perfect sense and=
 don&#39;t need to capture.</div><div>=C2=A0</div><blockquote class=3D"gmai=
l_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left=
:1ex"><div style=3D"word-wrap:break-word"><div><br></div><div>Perhaps it sh=
ould be permissible to call, convert, and even copy a stateless lambda from=
 an enclosing scope. (Binding to a reference or taking an address are genui=
nely problematic, though. Pass-by-reference would be broken, but fortunatel=
y=C2=A0<font face=3D"Courier">&lt;algorithm&gt;</font>=C2=A0and such pass b=
y value.)</div><span class=3D"m_-2456078572343567953HOEnZb"><font color=3D"=
#888888"><div><br></div></font></span></div><span class=3D"m_-2456078572343=
567953HOEnZb"><font color=3D"#888888">

<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">std-proposals+unsubscribe@isoc<wbr>pp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/DA325640-1898-4835-844F-290FC7A482BA%=
40gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">h=
ttps://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/DA325=
640-1898-4835-844F-<wbr>290FC7A482BA%40gmail.com</a>.<br>
</font></span></blockquote></div><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/CAOU91OP2Udh_K7Rx%3DGUBUNoA_XPVh4izdd=
F-VOcyBnQuRsbDkQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOU91OP2Udh_K7=
Rx%3DGUBUNoA_XPVh4izddF-VOcyBnQuRsbDkQ%40mail.gmail.com</a>.<br />

--001a11444ca281c0be0542c5ac41--

.


Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date: Sat, 3 Dec 2016 16:07:40 -0800 (PST)
Raw View
------=_Part_2802_1009465092.1480810060129
Content-Type: multipart/alternative;
 boundary="----=_Part_2803_1225758799.1480810060129"

------=_Part_2803_1225758799.1480810060129
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Saturday, December 3, 2016 at 11:01:02 AM UTC-8, Klaim - Jo=C3=ABl Lamot=
te=20
wrote:
>
> On 3 December 2016 at 12:47, David Krauss <pot...@gmail.com <javascript:>=
>=20
> wrote:
>
>> int main() {
>>     auto a =3D []{ return 5; };
>>     auto b =3D []{ +a; a(); }; // Error, =E2=80=9Ca=E2=80=9D not capture=
d.
>> }
>>
>
> I tend to just make `a` static const in these cases. Not esoteric and=20
> makes perfect sense and don't need to capture.
>

Right. In fact, you shouldn't even need "const", since the compiler is=20
perfectly capable of seeing that "a" is unused except for its operator().
GCC 4.9.0+ get it exactly right <https://godbolt.org/g/LGGaMI>: it realizes=
=20
that "a" and "b" both have trivial constructors, so no code need be=20
generated at all.
Clang 3.9 currently does a *terrible* job of optimizing here; it fails to=
=20
omit the guard variable even for "static const auto a" =E2=80=94 so not onl=
y does=20
Clang generate a non-zero amount of code for this example, the code it=20
*does* generate is full of function calls and atomic memory accesses!
Intel ICC 17 performs equivalently to Clang: *terrible* codegen.

Anyway, this seems like a Quality of Implementation issue, not a defect in=
=20
the language.

HTH,
=E2=80=93Arthur

--=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/5e1a340a-ba02-4b4e-8ea4-4017f946c443%40isocpp.or=
g.

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

<div dir=3D"ltr">On Saturday, December 3, 2016 at 11:01:02 AM UTC-8, Klaim =
- Jo=C3=ABl Lamotte wrote:<blockquote class=3D"gmail_quote" style=3D"margin=
: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div=
 dir=3D"ltr">On 3 December 2016 at 12:47, David Krauss <span dir=3D"ltr">&l=
t;<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"64vdFs=
R5BgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;r=
eturn true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">pot=
....@gmail.com</a>&gt;</span> wrote:<br><div><div class=3D"gmail_quote"><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div style=3D"word-wrap:break-word"><div><font f=
ace=3D"Courier">int main() {</font></div><div><font face=3D"Courier">=C2=A0=
 =C2=A0 auto a =3D []{ return 5; };</font></div><div><font face=3D"Courier"=
>=C2=A0 =C2=A0 auto b =3D []{ +a; a(); }; // Error, =E2=80=9Ca=E2=80=9D not=
 captured.</font></div><div><font face=3D"Courier">}</font></div></div></bl=
ockquote><div><br></div><div>I tend to just make `a` static const in these =
cases. Not esoteric and makes perfect sense and don&#39;t need to capture.<=
/div></div></div></div></blockquote><div><br></div><div>Right. In fact, you=
 shouldn&#39;t even need &quot;const&quot;, since the compiler is perfectly=
 capable of seeing that &quot;a&quot; is unused except for its operator().<=
/div><div>GCC 4.9.0+=C2=A0<a href=3D"https://godbolt.org/g/LGGaMI">get it e=
xactly right</a>: it realizes that &quot;a&quot; and &quot;b&quot; both hav=
e trivial constructors, so no code need be generated at all.</div><div>Clan=
g 3.9 currently does a <b><i>terrible</i></b> job of optimizing here; it fa=
ils to omit the guard variable even for &quot;static const auto a&quot; =E2=
=80=94 so not only does Clang generate a non-zero amount of code for this e=
xample, the code it <i>does</i> generate is full of function calls and atom=
ic memory accesses!<br></div><div>Intel ICC 17 performs equivalently to Cla=
ng: <i><b>terrible</b></i> codegen.</div><div><br></div><div>Anyway, this s=
eems like a Quality of Implementation issue, not a defect in the language.<=
/div><div><br></div><div>HTH,</div><div>=E2=80=93Arthur</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/5e1a340a-ba02-4b4e-8ea4-4017f946c443%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/5e1a340a-ba02-4b4e-8ea4-4017f946c443=
%40isocpp.org</a>.<br />

------=_Part_2803_1225758799.1480810060129--

------=_Part_2802_1009465092.1480810060129--

.