Topic: std::any augumentation


Author: janezz55@gmail.com
Date: Thu, 2 Mar 2017 10:26:01 -0800 (PST)
Raw View
------=_Part_341_856949786.1488479161228
Content-Type: multipart/alternative;
 boundary="----=_Part_342_1639448471.1488479161228"

------=_Part_342_1639448471.1488479161228
Content-Type: text/plain; charset=UTF-8

I believe that std::any should be made invokable, if an invokable object is
stored into it, such as a function pointer, method pointer, or a functor
(such as std::function<> and others). This would raise the level of
abstraction C++ offers to one comparable to scripting languages, where you
can often invoke an arbitrary variable. I've prepared 2 examples:

https://github.com/user1095108/generic/blob/master/anyfunction.hpp
https://github.com/user1095108/generic/blob/master/anyfunction.cpp

These examples are built around a std::any lookalike, but their
functionality could be easily merged into a std.:any, asserts could be
substituted for exception throwing and other changes made to make it more
std:: palatable.

--
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/c6fbbdcd-b9fb-475e-863b-0582a771ed2c%40isocpp.org.

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

<div dir=3D"ltr">I believe that std::any should be made invokable, if an in=
vokable object is stored into it, such as a function pointer, method pointe=
r, or a functor (such as std::function&lt;&gt; and others). This would rais=
e the level of abstraction C++ offers to one comparable to scripting langua=
ges, where you can often invoke an arbitrary variable. I&#39;ve prepared 2 =
examples:<div><br></div><div>https://github.com/user1095108/generic/blob/ma=
ster/anyfunction.hpp<br></div><div><div>https://github.com/user1095108/gene=
ric/blob/master/anyfunction.cpp<br></div></div><div><br></div><div>These ex=
amples are built around a std::any lookalike, but their functionality could=
 be easily merged into a std.:any, asserts could be substituted for excepti=
on throwing and other changes made to make it more std:: palatable.</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/c6fbbdcd-b9fb-475e-863b-0582a771ed2c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/c6fbbdcd-b9fb-475e-863b-0582a771ed2c=
%40isocpp.org</a>.<br />

------=_Part_342_1639448471.1488479161228--

------=_Part_341_856949786.1488479161228--

.


Author: =?UTF-8?Q?Klaim_=2D_Jo=C3=ABl_Lamotte?= <mjklaim@gmail.com>
Date: Thu, 2 Mar 2017 19:31:21 +0100
Raw View
--001a1146b264c81dc80549c3a2df
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Interesting. How would that be compared to recent unique_function and
function modification proposals?

Jo=C3=ABl Lamotte


On 2 March 2017 at 19:26, <janezz55@gmail.com> wrote:

> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a funct=
or
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where yo=
u
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
> https://github.com/user1095108/generic/blob/master/anyfunction.hpp
> https://github.com/user1095108/generic/blob/master/anyfunction.cpp
>
> These examples are built around a std::any lookalike, but their
> functionality could be easily merged into a std.:any, asserts could be
> substituted for exception throwing and other changes made to make it more
> std:: palatable.
>
> --
> 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/c6fbbdcd-b9fb-475e-
> 863b-0582a771ed2c%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c6fbbdcd-b9=
fb-475e-863b-0582a771ed2c%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAOU91ONHzuSP3CWpS7yRa54sRwcZi6BOus-qp6GhYgxFc1C=
ZjQ%40mail.gmail.com.

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

<div dir=3D"ltr">Interesting. How would that be compared to recent unique_f=
unction and function modification proposals?<div><br></div><div>Jo=C3=ABl L=
amotte</div><div><br></div></div><div class=3D"gmail_extra"><br><div class=
=3D"gmail_quote">On 2 March 2017 at 19:26,  <span dir=3D"ltr">&lt;<a href=
=3D"mailto:janezz55@gmail.com" target=3D"_blank">janezz55@gmail.com</a>&gt;=
</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .=
8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I believe=
 that std::any should be made invokable, if an invokable object is stored i=
nto it, such as a function pointer, method pointer, or a functor (such as s=
td::function&lt;&gt; and others). This would raise the level of abstraction=
 C++ offers to one comparable to scripting languages, where you can often i=
nvoke an arbitrary variable. I&#39;ve prepared 2 examples:<div><br></div><d=
iv><a href=3D"https://github.com/user1095108/generic/blob/master/anyfunctio=
n.hpp" target=3D"_blank">https://github.com/<wbr>user1095108/generic/blob/<=
wbr>master/anyfunction.hpp</a><br></div><div><div><a href=3D"https://github=
..com/user1095108/generic/blob/master/anyfunction.cpp" target=3D"_blank">htt=
ps://github.com/<wbr>user1095108/generic/blob/<wbr>master/anyfunction.cpp</=
a><br></div></div><div><br></div><div>These examples are built around a std=
::any lookalike, but their functionality could be easily merged into a std.=
:any, asserts could be substituted for exception throwing and other changes=
 made to make it more std:: palatable.</div></div><span class=3D"HOEnZb"><f=
ont 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@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/c6fbbdcd-b9fb-475e-863b-0582a771ed2c%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/c6fb=
bdcd-b9fb-475e-<wbr>863b-0582a771ed2c%40isocpp.org</a><wbr>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAOU91ONHzuSP3CWpS7yRa54sRwcZi6BOus-q=
p6GhYgxFc1CZjQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOU91ONHzuSP3CWp=
S7yRa54sRwcZi6BOus-qp6GhYgxFc1CZjQ%40mail.gmail.com</a>.<br />

--001a1146b264c81dc80549c3a2df--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Thu, 2 Mar 2017 19:37:49 +0100
Raw View
--001a11437ed2ea34a90549c3b956
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

I don't think the proposals would affect mine in any way. My goal is to
raise the level of abstraction, not provide a solution to some problem.

2017-03-02 19:31 GMT+01:00 Klaim - Jo=C3=ABl Lamotte <mjklaim@gmail.com>:

> Interesting. How would that be compared to recent unique_function and
> function modification proposals?
>
> Jo=C3=ABl Lamotte
>
>
> On 2 March 2017 at 19:26, <janezz55@gmail.com> wrote:
>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>> https://github.com/user1095108/generic/blob/master/anyfunction.hpp
>> https://github.com/user1095108/generic/blob/master/anyfunction.cpp
>>
>> These examples are built around a std::any lookalike, but their
>> functionality could be easily merged into a std.:any, asserts could be
>> substituted for exception throwing and other changes made to make it mor=
e
>> std:: palatable.
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/is
>> ocpp.org/d/msgid/std-proposals/c6fbbdcd-b9fb-475e-863b-
>> 0582a771ed2c%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c6fbbdcd-b=
9fb-475e-863b-0582a771ed2c%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAOU91ONHzuSP3CWpS7yRa54sRwcZi
> 6BOus-qp6GhYgxFc1CZjQ%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOU91ONHzu=
SP3CWpS7yRa54sRwcZi6BOus-qp6GhYgxFc1CZjQ%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GER7yzNkTHpVvo5e_TM_%2B5veQbGOLTtgY%3D3yNz=
%3Du70JXg%40mail.gmail.com.

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

<div dir=3D"ltr">I don&#39;t think the proposals would affect mine in any w=
ay. My goal is to raise the level of abstraction, not provide a solution to=
 some problem.</div><div class=3D"gmail_extra"><br><div class=3D"gmail_quot=
e">2017-03-02 19:31 GMT+01:00 Klaim - Jo=C3=ABl Lamotte <span dir=3D"ltr">&=
lt;<a href=3D"mailto:mjklaim@gmail.com" target=3D"_blank">mjklaim@gmail.com=
</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0=
 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Interes=
ting. How would that be compared to recent unique_function and function mod=
ification proposals?<div><br></div><div>Jo=C3=ABl Lamotte</div><div><br></d=
iv></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On 2 Mar=
ch 2017 at 19:26,  <span dir=3D"ltr">&lt;<a href=3D"mailto:janezz55@gmail.c=
om" target=3D"_blank">janezz55@gmail.com</a>&gt;</span> wrote:<br><blockquo=
te class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc so=
lid;padding-left:1ex"><div dir=3D"ltr">I believe that std::any should be ma=
de invokable, if an invokable object is stored into it, such as a function =
pointer, method pointer, or a functor (such as std::function&lt;&gt; and ot=
hers). This would raise the level of abstraction C++ offers to one comparab=
le to scripting languages, where you can often invoke an arbitrary variable=
.. I&#39;ve prepared 2 examples:<div><br></div><div><a href=3D"https://githu=
b.com/user1095108/generic/blob/master/anyfunction.hpp" target=3D"_blank">ht=
tps://github.com/user1095108<wbr>/generic/blob/master/<wbr>anyfunction.hpp<=
/a><br></div><div><div><a href=3D"https://github.com/user1095108/generic/bl=
ob/master/anyfunction.cpp" target=3D"_blank">https://github.com/user1095108=
<wbr>/generic/blob/master/<wbr>anyfunction.cpp</a><br></div></div><div><br>=
</div><div>These examples are built around a std::any lookalike, but their =
functionality could be easily merged into a std.:any, asserts could be subs=
tituted for exception throwing and other changes made to make it more std::=
 palatable.</div></div><span class=3D"HOEnZb"><font color=3D"#888888"><span=
 class=3D"m_7185318244183404928HOEnZb"><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/c6fbbdcd-b9fb-475e-863b-0582a771ed2c%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/c6fb=
bdcd-b9fb-475e-863b-<wbr>0582a771ed2c%40isocpp.org</a>.<br>
</font></span></font></span></blockquote></div><span class=3D"HOEnZb"><font=
 color=3D"#888888"><br></font></span></div><span class=3D"HOEnZb"><font col=
or=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAOU91ONHzuSP3CWpS7yRa54sRwcZi6BOus-q=
p6GhYgxFc1CZjQ%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/<wbr>CAOU91ONHzuSP3CWpS7yRa54sRwcZi<wbr>6BOus-qp6GhYgxFc1CZj=
Q%40mail.<wbr>gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GER7yzNkTHpVvo5e_TM_%2B5veQbGOL=
TtgY%3D3yNz%3Du70JXg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GER7y=
zNkTHpVvo5e_TM_%2B5veQbGOLTtgY%3D3yNz%3Du70JXg%40mail.gmail.com</a>.<br />

--001a11437ed2ea34a90549c3b956--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 2 Mar 2017 11:41:33 -0800 (PST)
Raw View
------=_Part_300_1048098855.1488483693307
Content-Type: multipart/alternative;
 boundary="----=_Part_301_124449083.1488483693307"

------=_Part_301_124449083.1488483693307
Content-Type: text/plain; charset=UTF-8

On Thursday, March 2, 2017 at 1:26:01 PM UTC-5, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a functor
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where you
> can often invoke an arbitrary variable.
>

But the purpose of `any` isn't to be "comparable to scripting languages".
It's for being able to store an object of any (copyable) type and be able
to retrieve it in a type-safe way. It's a type-safe `void*` with value
semantics.

Adding a function interface to it doesn't help `any` achieve the goal it's
setting out to achieve.

If you want to suggest a type that can store any callable and attempt to
call it with any arbitrary sequence of parameters and return types
(throwing an exception if the given params/return value doesn't match),
that's a different type from `any`.

--
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/c138266b-9523-41ce-a601-3579a675eab2%40isocpp.org.

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

<div dir=3D"ltr">On Thursday, March 2, 2017 at 1:26:01 PM UTC-5, jane...@gm=
ail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-l=
eft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"=
>I believe that std::any should be made invokable, if an invokable object i=
s stored into it, such as a function pointer, method pointer, or a functor =
(such as std::function&lt;&gt; and others). This would raise the level of a=
bstraction C++ offers to one comparable to scripting languages, where you c=
an often invoke an arbitrary variable.</div></blockquote><div><br>But the p=
urpose of `any` isn&#39;t to be &quot;comparable to scripting languages&quo=
t;. It&#39;s for being able to store an object of any (copyable) type and b=
e able to retrieve it in a type-safe way. It&#39;s a type-safe `void*` with=
 value semantics.<br><br>Adding a function interface to it doesn&#39;t help=
 `any` achieve the goal it&#39;s setting out to achieve.<br><br>If you want=
 to suggest a type that can store any callable and attempt to call it with =
any arbitrary sequence of parameters and return types (throwing an exceptio=
n if the given params/return value doesn&#39;t match), that&#39;s a differe=
nt type from `any`.</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/c138266b-9523-41ce-a601-3579a675eab2%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/c138266b-9523-41ce-a601-3579a675eab2=
%40isocpp.org</a>.<br />

------=_Part_301_124449083.1488483693307--

------=_Part_300_1048098855.1488483693307--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Thu, 2 Mar 2017 21:15:00 +0100
Raw View
--001a1146f2b47af9af0549c515ed
Content-Type: text/plain; charset=UTF-8

From my perspective, the user could easily ignore, that std::any is
invokable. I believe that adding a separate class, which would duplicate a
lot of what std::any does, would not reflect well on the STL.

2017-03-02 20:41 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

> On Thursday, March 2, 2017 at 1:26:01 PM UTC-5, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a functor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where you
>> can often invoke an arbitrary variable.
>>
>
> But the purpose of `any` isn't to be "comparable to scripting languages".
> It's for being able to store an object of any (copyable) type and be able
> to retrieve it in a type-safe way. It's a type-safe `void*` with value
> semantics.
>
> Adding a function interface to it doesn't help `any` achieve the goal it's
> setting out to achieve.
>
> If you want to suggest a type that can store any callable and attempt to
> call it with any arbitrary sequence of parameters and return types
> (throwing an exception if the given params/return value doesn't match),
> that's a different type from `any`.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/c138266b-9523-41ce-
> a601-3579a675eab2%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c138266b-9523-41ce-a601-3579a675eab2%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/CAO9E8GE%3DvpUcB11fSLVS46T0ErB0gOPeYphYSqUvYS7uMknjbA%40mail.gmail.com.

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

<div dir=3D"ltr">From my perspective, the user could easily ignore, that st=
d::any is invokable. I believe that adding a separate class, which would du=
plicate a lot of what std::any does, would not reflect well on the STL.</di=
v><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-02 20:4=
1 GMT+01:00 Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson@g=
mail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;</span>:<br><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc s=
olid;padding-left:1ex"><div dir=3D"ltr">On Thursday, March 2, 2017 at 1:26:=
01 PM UTC-5, <a href=3D"mailto:jane...@gmail.com" target=3D"_blank">jane...=
@gmail.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;ma=
rgin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r">I believe that std::any should be made invokable, if an invokable object=
 is stored into it, such as a function pointer, method pointer, or a functo=
r (such as std::function&lt;&gt; and others). This would raise the level of=
 abstraction C++ offers to one comparable to scripting languages, where you=
 can often invoke an arbitrary variable.</div></blockquote><div><br>But the=
 purpose of `any` isn&#39;t to be &quot;comparable to scripting languages&q=
uot;. It&#39;s for being able to store an object of any (copyable) type and=
 be able to retrieve it in a type-safe way. It&#39;s a type-safe `void*` wi=
th value semantics.<br><br>Adding a function interface to it doesn&#39;t he=
lp `any` achieve the goal it&#39;s setting out to achieve.<br><br>If you wa=
nt to suggest a type that can store any callable and attempt to call it wit=
h any arbitrary sequence of parameters and return types (throwing an except=
ion if the given params/return value doesn&#39;t match), that&#39;s a diffe=
rent type from `any`.</div></div><span class=3D"HOEnZb"><font color=3D"#888=
888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/c138266b-9523-41ce-a601-3579a675eab2%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/c138=
266b-9523-41ce-<wbr>a601-3579a675eab2%40isocpp.org</a><wbr>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GE%3DvpUcB11fSLVS46T0ErB0gOPeYp=
hYSqUvYS7uMknjbA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE%3DvpUc=
B11fSLVS46T0ErB0gOPeYphYSqUvYS7uMknjbA%40mail.gmail.com</a>.<br />

--001a1146f2b47af9af0549c515ed--

.


Author: Brian Bi <bbi5291@gmail.com>
Date: Thu, 2 Mar 2017 12:29:11 -0800
Raw View
--001a114acbf0297e8a0549c54801
Content-Type: text/plain; charset=UTF-8

On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <janezz55@gmail.com> wrote:

> From my perspective, the user could easily ignore, that std::any is
> invokable. I believe that adding a separate class, which would duplicate a
> lot of what std::any does, would not reflect well on the STL.
>

It's all a question of your attitude toward C++. Do you want C++ to be like
a scripting language or do you want it to be a language where the type
system catches mistakes for you at compile time?

In my opinion, making a class that either does or doesn't do something when
called, depending on what you put inside it, without any way for the
compiler to check, would not reflect well on C++.


>
> 2017-03-02 20:41 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:
>
>> On Thursday, March 2, 2017 at 1:26:01 PM UTC-5, jane...@gmail.com wrote:
>>>
>>> I believe that std::any should be made invokable, if an invokable object
>>> is stored into it, such as a function pointer, method pointer, or a functor
>>> (such as std::function<> and others). This would raise the level of
>>> abstraction C++ offers to one comparable to scripting languages, where you
>>> can often invoke an arbitrary variable.
>>>
>>
>> But the purpose of `any` isn't to be "comparable to scripting languages".
>> It's for being able to store an object of any (copyable) type and be able
>> to retrieve it in a type-safe way. It's a type-safe `void*` with value
>> semantics.
>>
>> Adding a function interface to it doesn't help `any` achieve the goal
>> it's setting out to achieve.
>>
>> If you want to suggest a type that can store any callable and attempt to
>> call it with any arbitrary sequence of parameters and return types
>> (throwing an exception if the given params/return value doesn't match),
>> that's a different type from `any`.
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/c138266b-9523-41ce-a601-
>> 3579a675eab2%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/c138266b-9523-41ce-a601-3579a675eab2%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/CAO9E8GE%3DvpUcB11fSLVS46T0ErB0gOPeYphY
> SqUvYS7uMknjbA%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE%3DvpUcB11fSLVS46T0ErB0gOPeYphYSqUvYS7uMknjbA%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>



--
*Brian Bi*

--
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/CAMmfjbOXWOW6nn0wsmoDnTRCQLw8tiPogS4RvWMSBFps4qqh9g%40mail.gmail.com.

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On T=
hu, Mar 2, 2017 at 12:15 PM, janezz55 . <span dir=3D"ltr">&lt;<a href=3D"ma=
ilto:janezz55@gmail.com" target=3D"_blank">janezz55@gmail.com</a>&gt;</span=
> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">From my perspec=
tive, the user could easily ignore, that std::any is invokable. I believe t=
hat adding a separate class, which would duplicate a lot of what std::any d=
oes, would not reflect well on the STL.</div></blockquote><div><br></div><d=
iv>It&#39;s all a question of your attitude toward C++. Do you want C++ to =
be like a scripting language or do you want it to be a language where the t=
ype system catches mistakes for you at compile time?<br><br></div><div>In m=
y opinion, making a class that either does or doesn&#39;t do something when=
 called, depending on what you put inside it, without any way for the compi=
ler to check, would not reflect well on C++.<br></div><div>=C2=A0</div><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div class=3D"gmail_extra"><br><div class=3D"gma=
il_quote"><span class=3D"">2017-03-02 20:41 GMT+01:00 Nicol Bolas <span dir=
=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmcke=
sson@gmail.com</a>&gt;</span>:<br></span><blockquote class=3D"gmail_quote" =
style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><sp=
an class=3D""><div dir=3D"ltr">On Thursday, March 2, 2017 at 1:26:01 PM UTC=
-5, <a href=3D"mailto:jane...@gmail.com" target=3D"_blank">jane...@gmail.co=
m</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left=
:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I beli=
eve that std::any should be made invokable, if an invokable object is store=
d into it, such as a function pointer, method pointer, or a functor (such a=
s std::function&lt;&gt; and others). This would raise the level of abstract=
ion C++ offers to one comparable to scripting languages, where you can ofte=
n invoke an arbitrary variable.</div></blockquote><div><br>But the purpose =
of `any` isn&#39;t to be &quot;comparable to scripting languages&quot;. It&=
#39;s for being able to store an object of any (copyable) type and be able =
to retrieve it in a type-safe way. It&#39;s a type-safe `void*` with value =
semantics.<br><br>Adding a function interface to it doesn&#39;t help `any` =
achieve the goal it&#39;s setting out to achieve.<br><br>If you want to sug=
gest a type that can store any callable and attempt to call it with any arb=
itrary sequence of parameters and return types (throwing an exception if th=
e given params/return value doesn&#39;t match), that&#39;s a different type=
 from `any`.</div></div></span><span class=3D"m_-5387884707781030071HOEnZb"=
><font color=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<wbr>/c=
JD8urBWN7c/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@isoc<wbr>pp.org</a>.<span class=3D""><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/c138266b-9523-41ce-a601-3579a675eab2%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/c138=
266b-9523-41ce-a601-<wbr>3579a675eab2%40isocpp.org</a>.<br>
</span></font></span></blockquote></div><br></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE%3DvpUcB11fSLVS46T0ErB0gOPeYp=
hYSqUvYS7uMknjbA%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/st=
d-<wbr>proposals/CAO9E8GE%<wbr>3DvpUcB11fSLVS46T0ErB0gOPeYphY<wbr>SqUvYS7uM=
knjbA%40mail.gmail.<wbr>com</a>.<br>
</blockquote></div><br><br clear=3D"all"><br>-- <br><div class=3D"gmail_sig=
nature" data-smartmail=3D"gmail_signature"><div dir=3D"ltr"><div><div dir=
=3D"ltr"><font color=3D"#c0c0c0"><i>Brian Bi</i></font><br><div></div><div>=
</div><div></div></div></div></div></div>
</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAMmfjbOXWOW6nn0wsmoDnTRCQLw8tiPogS4R=
vWMSBFps4qqh9g%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAMmfjbOXWOW6nn0w=
smoDnTRCQLw8tiPogS4RvWMSBFps4qqh9g%40mail.gmail.com</a>.<br />

--001a114acbf0297e8a0549c54801--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 2 Mar 2017 12:40:29 -0800 (PST)
Raw View
------=_Part_334_1819167120.1488487230032
Content-Type: multipart/alternative;
 boundary="----=_Part_335_715582478.1488487230032"

------=_Part_335_715582478.1488487230032
Content-Type: text/plain; charset=UTF-8



On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:
>
> On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <jane...@gmail.com
> <javascript:>> wrote:
>
>> From my perspective, the user could easily ignore, that std::any is
>> invokable. I believe that adding a separate class, which would duplicate a
>> lot of what std::any does, would not reflect well on the STL.
>>
>
> It's all a question of your attitude toward C++. Do you want C++ to be
> like a scripting language or do you want it to be a language where the type
> system catches mistakes for you at compile time?
>
> In my opinion, making a class that either does or doesn't do something
> when called, depending on what you put inside it, without any way for the
> compiler to check, would not reflect well on C++.
>

But... that's *what `any` is*.

If you do an `any_cast`, the compiler doesn't check if it's right. Because
it *cannot* check to see if the `any` is the right type. That's *the entire
point* of the class: it does a runtime check.

He's asking that `any` extend this runtime type checking to function calls,
presumably throwing if the parameter list/return value is inappropriate.
I'm saying that we should have a type specifically intended for that
purpose.

>

--
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/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%40isocpp.org.

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

<div dir=3D"ltr"><br><br>On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, Br=
ian Bi wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">=
<div><div class=3D"gmail_quote">On Thu, Mar 2, 2017 at 12:15 PM, janezz55 .=
 <span dir=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gdf-obfusc=
ated-mailto=3D"7VYVdCQSCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#=
39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#=
39;;return true;">jane...@gmail.com</a>&gt;</span> wrote:<br><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><div dir=3D"ltr">From my perspective, the user could easil=
y ignore, that std::any is invokable. I believe that adding a separate clas=
s, which would duplicate a lot of what std::any does, would not reflect wel=
l on the STL.</div></blockquote><div><br></div><div>It&#39;s all a question=
 of your attitude toward C++. Do you want C++ to be like a scripting langua=
ge or do you want it to be a language where the type system catches mistake=
s for you at compile time?<br><br></div><div>In my opinion, making a class =
that either does or doesn&#39;t do something when called, depending on what=
 you put inside it, without any way for the compiler to check, would not re=
flect well on C++.<br></div></div></div></div></blockquote><div dir=3D"ltr"=
><br>But... that&#39;s <i>what `any` is</i>.<br><br>If you do an `any_cast`=
, the compiler doesn&#39;t check if it&#39;s right. Because it <i>cannot</i=
> check to see if the `any` is the right type. That&#39;s <i>the entire poi=
nt</i> of the class: it does a runtime check.<br><br>He&#39;s asking that `=
any` extend this runtime type checking to function calls, presumably throwi=
ng if the parameter list/return value is inappropriate. I&#39;m saying that=
 we should have a type specifically intended for that purpose.<br></div><bl=
ockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border=
-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div>
</div></div>
</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/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a=
%40isocpp.org</a>.<br />

------=_Part_335_715582478.1488487230032--

------=_Part_334_1819167120.1488487230032--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Thu, 2 Mar 2017 21:57:43 +0100
Raw View
--94eb2c06146a392aaa0549c5aec3
Content-Type: text/plain; charset=UTF-8

Exactly, the throwing can happen at runtime with the unaugmented std::any
as well. The abstraction level of C++ has been increasing steadily,
reaching the abstraction levels of scripting languages is only a question
of time. You must have noticed that ever more scripting languages have
compilers nowadays as well?

2017-03-02 21:40 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

>
>
> On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:
>>
>> On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <jane...@gmail.com> wrote:
>>
>>> From my perspective, the user could easily ignore, that std::any is
>>> invokable. I believe that adding a separate class, which would duplicate a
>>> lot of what std::any does, would not reflect well on the STL.
>>>
>>
>> It's all a question of your attitude toward C++. Do you want C++ to be
>> like a scripting language or do you want it to be a language where the type
>> system catches mistakes for you at compile time?
>>
>> In my opinion, making a class that either does or doesn't do something
>> when called, depending on what you put inside it, without any way for the
>> compiler to check, would not reflect well on C++.
>>
>
> But... that's *what `any` is*.
>
> If you do an `any_cast`, the compiler doesn't check if it's right. Because
> it *cannot* check to see if the `any` is the right type. That's *the
> entire point* of the class: it does a runtime check.
>
> He's asking that `any` extend this runtime type checking to function
> calls, presumably throwing if the parameter list/return value is
> inappropriate. I'm saying that we should have a type specifically intended
> for that purpose.
>
>> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/9c85aaa8-6ace-45f6-
> a8fa-b12b1209a53a%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%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/CAO9E8GF7rHnN8%3DQvouYb1HR0KYbdtu0-gQOe5nwp%2BWxMXKzGLQ%40mail.gmail.com.

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

<div dir=3D"ltr">Exactly, the throwing can happen at runtime with the unaug=
mented std::any as well. The abstraction level of C++ has been increasing s=
teadily, reaching the abstraction levels of scripting languages is only a q=
uestion of time. You must have noticed that ever more scripting languages h=
ave compilers nowadays as well?</div><div class=3D"gmail_extra"><br><div cl=
ass=3D"gmail_quote">2017-03-02 21:40 GMT+01:00 Nicol Bolas <span dir=3D"ltr=
">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gm=
ail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margi=
n:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">=
<br><br>On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:<spa=
n class=3D""><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-lef=
t:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>=
<div class=3D"gmail_quote">On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <spa=
n dir=3D"ltr">&lt;<a rel=3D"nofollow">jane...@gmail.com</a>&gt;</span> wrot=
e:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">From my perspective, =
the user could easily ignore, that std::any is invokable. I believe that ad=
ding a separate class, which would duplicate a lot of what std::any does, w=
ould not reflect well on the STL.</div></blockquote><div><br></div><div>It&=
#39;s all a question of your attitude toward C++. Do you want C++ to be lik=
e a scripting language or do you want it to be a language where the type sy=
stem catches mistakes for you at compile time?<br><br></div><div>In my opin=
ion, making a class that either does or doesn&#39;t do something when calle=
d, depending on what you put inside it, without any way for the compiler to=
 check, would not reflect well on C++.<br></div></div></div></div></blockqu=
ote></span><div dir=3D"ltr"><br>But... that&#39;s <i>what `any` is</i>.<br>=
<br>If you do an `any_cast`, the compiler doesn&#39;t check if it&#39;s rig=
ht. Because it <i>cannot</i> check to see if the `any` is the right type. T=
hat&#39;s <i>the entire point</i> of the class: it does a runtime check.<br=
><br>He&#39;s asking that `any` extend this runtime type checking to functi=
on calls, presumably throwing if the parameter list/return value is inappro=
priate. I&#39;m saying that we should have a type specifically intended for=
 that purpose.<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr"><div>
</div></div>
</blockquote></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/9c85=
aaa8-6ace-45f6-<wbr>a8fa-b12b1209a53a%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GF7rHnN8%3DQvouYb1HR0KYbdtu0-gQ=
Oe5nwp%2BWxMXKzGLQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GF7rHnN=
8%3DQvouYb1HR0KYbdtu0-gQOe5nwp%2BWxMXKzGLQ%40mail.gmail.com</a>.<br />

--94eb2c06146a392aaa0549c5aec3--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 2 Mar 2017 13:01:50 -0800 (PST)
Raw View
------=_Part_376_1435814726.1488488510645
Content-Type: multipart/alternative;
 boundary="----=_Part_377_204687906.1488488510645"

------=_Part_377_204687906.1488488510645
Content-Type: text/plain; charset=UTF-8

On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:
>
> From my perspective, the user could easily ignore, that std::any is
> invokable.
>

Can they? Can you provide an implementation of an invokable `any` which has
the exact same overhead as a non-invokable one, so long as you don't
actually use the invoking interface?

I'm not saying you're wrong, but as someone who is not an expert on `any`
implementations, I have my doubts about this statement.

I believe that adding a separate class, which would duplicate a lot of what
> std::any does, would not reflect well on the STL.
>

It would duplicate some of the the internals of `any`. But being a
different type woudl demonstrate a different semantic *meaning* to code.

Let's rename `any` to `any_object`. Now let's talk about `any_object` in
relation to what you want, which is `any_function`.

What does `any_object` represent, semantically? It represents an implicit
agreement between the writer of the function taking the `any` and the
person providing the value. Both sides must agree on what type(s) that
`any_object` will store, and if there is a disagreement or if one side does
the wrong thing, exceptions will fly.

What does your conceptual `any_function` represent, semantically? It
represents, not the type-erasure of a value, but the type-erausre of a
function call *signature*. And therefore, if you see a function that takes
a parameter of type `any_function`, you *immediately* know that this
function will call the given object.

And therefore, the agreement between us is different. The agreement is not
that I will provide one or more implicitly-defined types that you will
eventually `any_cast` to. The agreement is that I will provide objects that
can be called with one or more implicitly-defined function call signatures,
that you will eventually call.

If they represent different agreements, then they clearly should be
different types. Even if 99% of the code implementation between them is
identical, they still need to be separate. Because the code that takes an
`any_function` does not *want* to perform `any_cast` on the value it takes.
It will perform `any_call` instead. And vice-versa: code that takes
`any_object` will not perform `any_call` on it.

I wouldn't mind having this in the `<any>` header. But I don't like the
idea of grafting such a substantially different use case into an existing
object.

Also, a pedantic note. "STL" does not mean "standard library."

--
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/376001c3-5ead-4856-aa95-75bdcf6aea92%40isocpp.org.

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

<div dir=3D"ltr">On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 .=
 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">From m=
y perspective, the user could easily ignore, that std::any is invokable.</d=
iv></blockquote><div><br>Can they? Can you provide an implementation of an =
invokable `any` which has the exact same overhead as a non-invokable one, s=
o long as you don&#39;t actually use the invoking interface?<br><br>I&#39;m=
 not saying you&#39;re wrong, but as someone who is not an expert on `any` =
implementations, I have my doubts about this statement.<br><br></div><block=
quote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-le=
ft: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I believe that addi=
ng a separate class, which would duplicate a lot of what std::any does, wou=
ld not reflect well on the STL.</div></blockquote><div><br>It would duplica=
te some of the the internals of `any`. But being a different type woudl dem=
onstrate a different semantic <i>meaning</i> to code.<br><br>Let&#39;s rena=
me `any` to `any_object`. Now let&#39;s talk about `any_object` in relation=
 to what you want, which is `any_function`.<br><br>What does `any_object` r=
epresent, semantically? It represents an implicit agreement between the wri=
ter of the function taking the `any` and the person providing the value. Bo=
th sides must agree on what type(s) that `any_object` will store, and if th=
ere is a disagreement or if one side does the wrong thing, exceptions will =
fly.<br><br>What does your conceptual `any_function` represent, semanticall=
y? It represents, not the type-erasure of a value, but the type-erausre of =
a function call <i>signature</i>. And therefore, if you see a function that=
 takes a parameter of type `any_function`, you <i>immediately</i> know that=
 this function will call the given object.<br><br>And therefore, the agreem=
ent between us is different. The agreement is not that I will provide one o=
r more implicitly-defined types that you will eventually `any_cast` to. The=
 agreement is that I will provide objects that can be called with one or mo=
re implicitly-defined function call signatures, that you will eventually ca=
ll.<br><br>If they represent different agreements, then they clearly should=
 be different types. Even if 99% of the code implementation between them is=
 identical, they still need to be separate. Because the code that takes an =
`any_function` does not <i>want</i> to perform `any_cast` on the value it t=
akes. It will perform `any_call` instead. And vice-versa: code that takes `=
any_object` will not perform `any_call` on it.<br><br>I wouldn&#39;t mind h=
aving this in the `&lt;any&gt;` header. But I don&#39;t like the idea of gr=
afting such a substantially different use case into an existing object.<br>=
<br>Also, a pedantic note. &quot;STL&quot; does not mean &quot;standard lib=
rary.&quot;<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/376001c3-5ead-4856-aa95-75bdcf6aea92%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/376001c3-5ead-4856-aa95-75bdcf6aea92=
%40isocpp.org</a>.<br />

------=_Part_377_204687906.1488488510645--

------=_Part_376_1435814726.1488488510645--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Thu, 2 Mar 2017 22:13:07 +0100
Raw View
--001a114a8d344816130549c5e59b
Content-Type: text/plain; charset=UTF-8

I can tell you as an any semi-expert, that std::any, such as it is, is a
resource hog. It mostly allocates from the heap to copy or move an object
into it, of course small object optimizations are possible ..., but let's
leave that on the side. The only argument to merge this functionality into
std::any is because I think invocations of std::any are a "natural"
extension of what std::any does, as you can see in almost any scripting
language, like lus, python, perl... Using SFINAE and perhaps other
techniques you can easily morph a std::any into std::any_function and vice
versa. You can have 2 separate types, essentially, without the user knowing
anything about it.

2017-03-02 22:01 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

> On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:
>>
>> From my perspective, the user could easily ignore, that std::any is
>> invokable.
>>
>
> Can they? Can you provide an implementation of an invokable `any` which
> has the exact same overhead as a non-invokable one, so long as you don't
> actually use the invoking interface?
>
> I'm not saying you're wrong, but as someone who is not an expert on `any`
> implementations, I have my doubts about this statement.
>
> I believe that adding a separate class, which would duplicate a lot of
>> what std::any does, would not reflect well on the STL.
>>
>
> It would duplicate some of the the internals of `any`. But being a
> different type woudl demonstrate a different semantic *meaning* to code.
>
> Let's rename `any` to `any_object`. Now let's talk about `any_object` in
> relation to what you want, which is `any_function`.
>
> What does `any_object` represent, semantically? It represents an implicit
> agreement between the writer of the function taking the `any` and the
> person providing the value. Both sides must agree on what type(s) that
> `any_object` will store, and if there is a disagreement or if one side does
> the wrong thing, exceptions will fly.
>
> What does your conceptual `any_function` represent, semantically? It
> represents, not the type-erasure of a value, but the type-erausre of a
> function call *signature*. And therefore, if you see a function that
> takes a parameter of type `any_function`, you *immediately* know that
> this function will call the given object.
>
> And therefore, the agreement between us is different. The agreement is not
> that I will provide one or more implicitly-defined types that you will
> eventually `any_cast` to. The agreement is that I will provide objects that
> can be called with one or more implicitly-defined function call signatures,
> that you will eventually call.
>
> If they represent different agreements, then they clearly should be
> different types. Even if 99% of the code implementation between them is
> identical, they still need to be separate. Because the code that takes an
> `any_function` does not *want* to perform `any_cast` on the value it
> takes. It will perform `any_call` instead. And vice-versa: code that takes
> `any_object` will not perform `any_call` on it.
>
> I wouldn't mind having this in the `<any>` header. But I don't like the
> idea of grafting such a substantially different use case into an existing
> object.
>
> Also, a pedantic note. "STL" does not mean "standard library."
>

--
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/CAO9E8GGG%2BypHdSD69tOrfsF5SQZvHPUD4ecASPVx6ifma42DdQ%40mail.gmail.com.

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

<div dir=3D"ltr">I can tell you as an any semi-expert, that std::any, such =
as it is, is a resource hog. It mostly allocates from the heap to copy or m=
ove an object into it, of course small object optimizations are possible ..=
.., but let&#39;s leave that on the side. The only argument to merge this fu=
nctionality into std::any is because I think invocations of std::any are a =
&quot;natural&quot; extension of what std::any does, as you can see in almo=
st any scripting language, like lus, python, perl... Using SFINAE and perha=
ps other techniques you can easily morph a std::any into std::any_function =
and vice versa. You can have 2 separate types, essentially, without the use=
r knowing anything about it.</div><div class=3D"gmail_extra"><br><div class=
=3D"gmail_quote">2017-03-02 22:01 GMT+01:00 Nicol Bolas <span dir=3D"ltr">&=
lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail=
..com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><sp=
an class=3D"">On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wr=
ote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">From my perspe=
ctive, the user could easily ignore, that std::any is invokable.</div></blo=
ckquote></span><div><br>Can they? Can you provide an implementation of an i=
nvokable `any` which has the exact same overhead as a non-invokable one, so=
 long as you don&#39;t actually use the invoking interface?<br><br>I&#39;m =
not saying you&#39;re wrong, but as someone who is not an expert on `any` i=
mplementations, I have my doubts about this statement.<br><br></div><span c=
lass=3D""><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0=
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I believ=
e that adding a separate class, which would duplicate a lot of what std::an=
y does, would not reflect well on the STL.</div></blockquote></span><div><b=
r>It would duplicate some of the the internals of `any`. But being a differ=
ent type woudl demonstrate a different semantic <i>meaning</i> to code.<br>=
<br>Let&#39;s rename `any` to `any_object`. Now let&#39;s talk about `any_o=
bject` in relation to what you want, which is `any_function`.<br><br>What d=
oes `any_object` represent, semantically? It represents an implicit agreeme=
nt between the writer of the function taking the `any` and the person provi=
ding the value. Both sides must agree on what type(s) that `any_object` wil=
l store, and if there is a disagreement or if one side does the wrong thing=
, exceptions will fly.<br><br>What does your conceptual `any_function` repr=
esent, semantically? It represents, not the type-erasure of a value, but th=
e type-erausre of a function call <i>signature</i>. And therefore, if you s=
ee a function that takes a parameter of type `any_function`, you <i>immedia=
tely</i> know that this function will call the given object.<br><br>And the=
refore, the agreement between us is different. The agreement is not that I =
will provide one or more implicitly-defined types that you will eventually =
`any_cast` to. The agreement is that I will provide objects that can be cal=
led with one or more implicitly-defined function call signatures, that you =
will eventually call.<br><br>If they represent different agreements, then t=
hey clearly should be different types. Even if 99% of the code implementati=
on between them is identical, they still need to be separate. Because the c=
ode that takes an `any_function` does not <i>want</i> to perform `any_cast`=
 on the value it takes. It will perform `any_call` instead. And vice-versa:=
 code that takes `any_object` will not perform `any_call` on it.<br><br>I w=
ouldn&#39;t mind having this in the `&lt;any&gt;` header. But I don&#39;t l=
ike the idea of grafting such a substantially different use case into an ex=
isting object.<br><br>Also, a pedantic note. &quot;STL&quot; does not mean =
&quot;standard library.&quot;<br></div></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GGG%2BypHdSD69tOrfsF5SQZvHPUD4e=
cASPVx6ifma42DdQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGG%2BypH=
dSD69tOrfsF5SQZvHPUD4ecASPVx6ifma42DdQ%40mail.gmail.com</a>.<br />

--001a114a8d344816130549c5e59b--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 2 Mar 2017 13:38:25 -0800 (PST)
Raw View
------=_Part_317_272562607.1488490705687
Content-Type: multipart/alternative;
 boundary="----=_Part_318_382069661.1488490705687"

------=_Part_318_382069661.1488490705687
Content-Type: text/plain; charset=UTF-8

On Thursday, March 2, 2017 at 4:13:12 PM UTC-5, janezz55 . wrote:
>
> I can tell you as an any semi-expert, that std::any, such as it is, is a
> resource hog. It mostly allocates from the heap to copy or move an object
> into it, of course small object optimizations are possible ..., but let's
> leave that on the side. The only argument to merge this functionality into
> std::any is because I think invocations of std::any are a "natural"
> extension of what std::any does, as you can see in almost any scripting
> language, like lus, python, perl...
>

But they're only a "natural extension" if you're making a type which is
trying to mimic the behavior of scripting language types. And that's not
really the purpose of `any`.

If you want to have more comprehensive support for duck typing in C++, then
that's something which should happen in another way.

Using SFINAE and perhaps other techniques you can easily morph a std::any
> into std::any_function and vice versa. You can have 2 separate types,
> essentially, without the user knowing anything about it.
>

And why is it a good thing to not have the user know what they're doing?

C++ has plenty of places where the meaning of a piece of syntax is
indeterminate. Is it legal to pass NULL for a particular `T*` parameter, or
are you just passing a pointer because its convenient? Are you transferring
ownership with a `T*` parameter, or is it just viewing the object? Is it a
pointer to a single object or an array of some size?

We shouldn't add more of these cases where the semantic meaning of a
parameter is indeterminate. There is a semantic difference between
functions that take `any_object` and `any_function`, so they should be
distinct types.

--
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/0ed9d281-3402-42ea-8d40-171af033340b%40isocpp.org.

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

<div dir=3D"ltr">On Thursday, March 2, 2017 at 4:13:12 PM UTC-5, janezz55 .=
 wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.=
8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I can =
tell you as an any semi-expert, that std::any, such as it is, is a resource=
 hog. It mostly allocates from the heap to copy or move an object into it, =
of course small object optimizations are possible ..., but let&#39;s leave =
that on the side. The only argument to merge this functionality into std::a=
ny is because I think invocations of std::any are a &quot;natural&quot; ext=
ension of what std::any does, as you can see in almost any scripting langua=
ge, like lus, python, perl...</div></blockquote><div><br>But they&#39;re on=
ly a &quot;natural extension&quot; if you&#39;re making a type which is try=
ing to mimic the behavior of scripting language types. And that&#39;s not r=
eally the purpose of `any`.<br><br>If you want to have more comprehensive s=
upport for duck typing in C++, then that&#39;s something which should happe=
n in another way.<br><br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"=
><div dir=3D"ltr">Using SFINAE and perhaps other techniques you can easily =
morph a std::any into std::any_function and vice versa. You can have 2 sepa=
rate types, essentially, without the user knowing anything about it.</div><=
/blockquote><div><br>And why is it a good thing to not have the user know w=
hat they&#39;re doing?</div><br>C++ has plenty of places where the meaning =
of a piece of syntax is indeterminate. Is it legal to pass NULL for a parti=
cular `T*` parameter, or are you just passing a pointer because its conveni=
ent? Are you transferring ownership with a `T*` parameter, or is it just vi=
ewing the object? Is it a pointer to a single object or an array of some si=
ze?<br><br>We shouldn&#39;t add more of these cases where the semantic mean=
ing of a parameter is indeterminate. There is a semantic difference between=
 functions that take `any_object` and `any_function`, so they should be dis=
tinct types.<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/0ed9d281-3402-42ea-8d40-171af033340b%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/0ed9d281-3402-42ea-8d40-171af033340b=
%40isocpp.org</a>.<br />

------=_Part_318_382069661.1488490705687--

------=_Part_317_272562607.1488490705687--

.


Author: Brian Bi <bbi5291@gmail.com>
Date: Thu, 2 Mar 2017 13:38:36 -0800
Raw View
--001a11440d5c72c1a10549c6400b
Content-Type: text/plain; charset=UTF-8

On Thu, Mar 2, 2017 at 12:40 PM, Nicol Bolas <jmckesson@gmail.com> wrote:

>
>
> On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:
>>
>> On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <jane...@gmail.com> wrote:
>>
>>> From my perspective, the user could easily ignore, that std::any is
>>> invokable. I believe that adding a separate class, which would duplicate a
>>> lot of what std::any does, would not reflect well on the STL.
>>>
>>
>> It's all a question of your attitude toward C++. Do you want C++ to be
>> like a scripting language or do you want it to be a language where the type
>> system catches mistakes for you at compile time?
>>
>> In my opinion, making a class that either does or doesn't do something
>> when called, depending on what you put inside it, without any way for the
>> compiler to check, would not reflect well on C++.
>>
>
> But... that's *what `any` is*.
>
> If you do an `any_cast`, the compiler doesn't check if it's right. Because
> it *cannot* check to see if the `any` is the right type. That's *the
> entire point* of the class: it does a runtime check.
>
> He's asking that `any` extend this runtime type checking to function
> calls, presumably throwing if the parameter list/return value is
> inappropriate. I'm saying that we should have a type specifically intended
> for that purpose.
>

Right---std::any_cast represents the "ugly" aspect of std::any. But
std::any is provided for those few users who really do need it. But we
should avoid making it any more ugly than it already is. I agree that there
should be a separate type. Users should not be forced to use std::any if it
provides more ugliness than they actually need. :-)

> --
> 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/9c85aaa8-6ace-45f6-
> a8fa-b12b1209a53a%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>



--
*Brian Bi*

--
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/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-bbo5-iFj_-pOMU2c0dPyng%40mail.gmail.com.

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On T=
hu, Mar 2, 2017 at 12:40 PM, Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"m=
ailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;</s=
pan> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex=
;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><br>On T=
hursday, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:<span class=3D""=
><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><div class=
=3D"gmail_quote">On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <span dir=3D"l=
tr">&lt;<a rel=3D"nofollow">jane...@gmail.com</a>&gt;</span> wrote:<br><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div dir=3D"ltr">From my perspective, the user c=
ould easily ignore, that std::any is invokable. I believe that adding a sep=
arate class, which would duplicate a lot of what std::any does, would not r=
eflect well on the STL.</div></blockquote><div><br></div><div>It&#39;s all =
a question of your attitude toward C++. Do you want C++ to be like a script=
ing language or do you want it to be a language where the type system catch=
es mistakes for you at compile time?<br><br></div><div>In my opinion, makin=
g a class that either does or doesn&#39;t do something when called, dependi=
ng on what you put inside it, without any way for the compiler to check, wo=
uld not reflect well on C++.<br></div></div></div></div></blockquote></span=
><div dir=3D"ltr"><br>But... that&#39;s <i>what `any` is</i>.<br><br>If you=
 do an `any_cast`, the compiler doesn&#39;t check if it&#39;s right. Becaus=
e it <i>cannot</i> check to see if the `any` is the right type. That&#39;s =
<i>the entire point</i> of the class: it does a runtime check.<br><br>He&#3=
9;s asking that `any` extend this runtime type checking to function calls, =
presumably throwing if the parameter list/return value is inappropriate. I&=
#39;m saying that we should have a type specifically intended for that purp=
ose.<br></div></div></blockquote><div><br></div><div>Right---std::any_cast =
represents the &quot;ugly&quot; aspect of std::any. But std::any is provide=
d for those few users who really do need it. But we should avoid making it =
any more ugly than it already is. I agree that there should be a separate t=
ype. Users should not be forced to use std::any if it provides more uglines=
s than they actually need. :-)<br></div><blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
 dir=3D"ltr"><div dir=3D"ltr"></div><blockquote class=3D"gmail_quote" style=
=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div dir=3D"ltr"><div>
</div></div>
</blockquote></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/9c85=
aaa8-6ace-45f6-<wbr>a8fa-b12b1209a53a%40isocpp.org</a><wbr>.<br>
</blockquote></div><br><br clear=3D"all"><br>-- <br><div class=3D"gmail_sig=
nature" data-smartmail=3D"gmail_signature"><div dir=3D"ltr"><div><div dir=
=3D"ltr"><font color=3D"#c0c0c0"><i>Brian Bi</i></font><br><div></div><div>=
</div><div></div></div></div></div></div>
</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-bbo5-iFj=
_-pOMU2c0dPyng%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAMmfjbM5ZdmBPKo4=
tN80UnwbkfL-bbo5-iFj_-pOMU2c0dPyng%40mail.gmail.com</a>.<br />

--001a11440d5c72c1a10549c6400b--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Thu, 2 Mar 2017 22:50:43 +0100
Raw View
--001a1144b3fac2adb50549c66b08
Content-Type: text/plain; charset=UTF-8

I think that perhaps the strongest argument in favor of a single type is
the stored function's return value. It has to be stored in a std::any
itself. I would consider invoking a std::any_function and getting a
std::any as a return value very confusing.

2017-03-02 22:38 GMT+01:00 Brian Bi <bbi5291@gmail.com>:

> On Thu, Mar 2, 2017 at 12:40 PM, Nicol Bolas <jmckesson@gmail.com> wrote:
>
>>
>>
>> On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:
>>>
>>> On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <jane...@gmail.com> wrote:
>>>
>>>> From my perspective, the user could easily ignore, that std::any is
>>>> invokable. I believe that adding a separate class, which would duplicate a
>>>> lot of what std::any does, would not reflect well on the STL.
>>>>
>>>
>>> It's all a question of your attitude toward C++. Do you want C++ to be
>>> like a scripting language or do you want it to be a language where the type
>>> system catches mistakes for you at compile time?
>>>
>>> In my opinion, making a class that either does or doesn't do something
>>> when called, depending on what you put inside it, without any way for the
>>> compiler to check, would not reflect well on C++.
>>>
>>
>> But... that's *what `any` is*.
>>
>> If you do an `any_cast`, the compiler doesn't check if it's right.
>> Because it *cannot* check to see if the `any` is the right type. That's *the
>> entire point* of the class: it does a runtime check.
>>
>> He's asking that `any` extend this runtime type checking to function
>> calls, presumably throwing if the parameter list/return value is
>> inappropriate. I'm saying that we should have a type specifically intended
>> for that purpose.
>>
>
> Right---std::any_cast represents the "ugly" aspect of std::any. But
> std::any is provided for those few users who really do need it. But we
> should avoid making it any more ugly than it already is. I agree that there
> should be a separate type. Users should not be forced to use std::any if it
> provides more ugliness than they actually need. :-)
>
>> --
>> 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/9c85aaa8-6ace-45f6-a8fa-
>> b12b1209a53a%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%40isocpp.org?utm_medium=email&utm_source=footer>
>> .
>>
>
>
>
> --
> *Brian Bi*
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-
> bbo5-iFj_-pOMU2c0dPyng%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-bbo5-iFj_-pOMU2c0dPyng%40mail.gmail.com?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/CAO9E8GEj8hjctR_AGiJVWHCM_Gt6n1czbo04tH86xUzmuta7iw%40mail.gmail.com.

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

<div dir=3D"ltr">I think that perhaps the strongest argument in favor of a =
single type is the stored function&#39;s return value. It has to be stored =
in a std::any itself. I would consider invoking a std::any_function and get=
ting a std::any as a return value very confusing.</div><div class=3D"gmail_=
extra"><br><div class=3D"gmail_quote">2017-03-02 22:38 GMT+01:00 Brian Bi <=
span dir=3D"ltr">&lt;<a href=3D"mailto:bbi5291@gmail.com" target=3D"_blank"=
>bbi5291@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On Thu, Ma=
r 2, 2017 at 12:40 PM, Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"mailto:=
jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;</span> w=
rote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><br>On Thursda=
y, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:<span><blockquote clas=
s=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc =
solid;padding-left:1ex"><div dir=3D"ltr"><div><div class=3D"gmail_quote">On=
 Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <span dir=3D"ltr">&lt;<a rel=3D"n=
ofollow">jane...@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gm=
ail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div dir=3D"ltr">From my perspective, the user could easily ignore,=
 that std::any is invokable. I believe that adding a separate class, which =
would duplicate a lot of what std::any does, would not reflect well on the =
STL.</div></blockquote><div><br></div><div>It&#39;s all a question of your =
attitude toward C++. Do you want C++ to be like a scripting language or do =
you want it to be a language where the type system catches mistakes for you=
 at compile time?<br><br></div><div>In my opinion, making a class that eith=
er does or doesn&#39;t do something when called, depending on what you put =
inside it, without any way for the compiler to check, would not reflect wel=
l on C++.<br></div></div></div></div></blockquote></span><div dir=3D"ltr"><=
br>But... that&#39;s <i>what `any` is</i>.<br><br>If you do an `any_cast`, =
the compiler doesn&#39;t check if it&#39;s right. Because it <i>cannot</i> =
check to see if the `any` is the right type. That&#39;s <i>the entire point=
</i> of the class: it does a runtime check.<br><br>He&#39;s asking that `an=
y` extend this runtime type checking to function calls, presumably throwing=
 if the parameter list/return value is inappropriate. I&#39;m saying that w=
e should have a type specifically intended for that purpose.<br></div></div=
></blockquote><div><br></div><div>Right---std::any_cast represents the &quo=
t;ugly&quot; aspect of std::any. But std::any is provided for those few use=
rs who really do need it. But we should avoid making it any more ugly than =
it already is. I agree that there should be a separate type. Users should n=
ot be forced to use std::any if it provides more ugliness than they actuall=
y need. :-)<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"><div d=
ir=3D"ltr"></div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin=
-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><=
div>
</div></div>
</blockquote></div><span>

<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></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/9c85=
aaa8-6ace-45f6-a8fa-<wbr>b12b1209a53a%40isocpp.org</a>.<span class=3D"HOEnZ=
b"><font color=3D"#888888"><br>
</font></span></blockquote></div><span class=3D"HOEnZb"><font color=3D"#888=
888"><br><br clear=3D"all"><br>-- <br><div class=3D"m_-4401222177187938902g=
mail_signature" data-smartmail=3D"gmail_signature"><div dir=3D"ltr"><div><d=
iv dir=3D"ltr"><font color=3D"#c0c0c0"><i>Brian Bi</i></font><br><div></div=
><div></div><div></div></div></div></div></div>
</font></span></div></div><span class=3D"HOEnZb"><font color=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-bbo5-iFj=
_-pOMU2c0dPyng%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/<wbr>CAMmfjbM5ZdmBPKo4tN80UnwbkfL-<wbr>bbo5-iFj_-pOMU2c0dPyn=
g%40mail.<wbr>gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEj8hjctR_AGiJVWHCM_Gt6n1czbo04=
tH86xUzmuta7iw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEj8hjctR_A=
GiJVWHCM_Gt6n1czbo04tH86xUzmuta7iw%40mail.gmail.com</a>.<br />

--001a1144b3fac2adb50549c66b08--

.


Author: Ren Industries <renindustries@gmail.com>
Date: Thu, 2 Mar 2017 17:43:01 -0500
Raw View
--001a114d8a42c9979d0549c7263c
Content-Type: text/plain; charset=UTF-8

I wouldn't.

On Thu, Mar 2, 2017 at 4:50 PM, janezz55 . <janezz55@gmail.com> wrote:

> I think that perhaps the strongest argument in favor of a single type is
> the stored function's return value. It has to be stored in a std::any
> itself. I would consider invoking a std::any_function and getting a
> std::any as a return value very confusing.
>
> 2017-03-02 22:38 GMT+01:00 Brian Bi <bbi5291@gmail.com>:
>
>> On Thu, Mar 2, 2017 at 12:40 PM, Nicol Bolas <jmckesson@gmail.com> wrote:
>>
>>>
>>>
>>> On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, Brian Bi wrote:
>>>>
>>>> On Thu, Mar 2, 2017 at 12:15 PM, janezz55 . <jane...@gmail.com> wrote:
>>>>
>>>>> From my perspective, the user could easily ignore, that std::any is
>>>>> invokable. I believe that adding a separate class, which would duplicate a
>>>>> lot of what std::any does, would not reflect well on the STL.
>>>>>
>>>>
>>>> It's all a question of your attitude toward C++. Do you want C++ to be
>>>> like a scripting language or do you want it to be a language where the type
>>>> system catches mistakes for you at compile time?
>>>>
>>>> In my opinion, making a class that either does or doesn't do something
>>>> when called, depending on what you put inside it, without any way for the
>>>> compiler to check, would not reflect well on C++.
>>>>
>>>
>>> But... that's *what `any` is*.
>>>
>>> If you do an `any_cast`, the compiler doesn't check if it's right.
>>> Because it *cannot* check to see if the `any` is the right type. That's *the
>>> entire point* of the class: it does a runtime check.
>>>
>>> He's asking that `any` extend this runtime type checking to function
>>> calls, presumably throwing if the parameter list/return value is
>>> inappropriate. I'm saying that we should have a type specifically intended
>>> for that purpose.
>>>
>>
>> Right---std::any_cast represents the "ugly" aspect of std::any. But
>> std::any is provided for those few users who really do need it. But we
>> should avoid making it any more ugly than it already is. I agree that there
>> should be a separate type. Users should not be forced to use std::any if it
>> provides more ugliness than they actually need. :-)
>>
>>> --
>>> 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/9c85aaa8-6ace-45f6-a8fa-b12b1
>>> 209a53a%40isocpp.org
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%40isocpp.org?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>>
>> --
>> *Brian Bi*
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-
>> bbo5-iFj_-pOMU2c0dPyng%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-bbo5-iFj_-pOMU2c0dPyng%40mail.gmail.com?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/CAO9E8GEj8hjctR_AGiJVWHCM_
> Gt6n1czbo04tH86xUzmuta7iw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEj8hjctR_AGiJVWHCM_Gt6n1czbo04tH86xUzmuta7iw%40mail.gmail.com?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/CAMD6iD-TcfrBn7iK3652fGQJSeaenzBmuiWwXxikNd7coU9FHw%40mail.gmail.com.

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

<div dir=3D"ltr">I wouldn&#39;t.</div><div class=3D"gmail_extra"><br><div c=
lass=3D"gmail_quote">On Thu, Mar 2, 2017 at 4:50 PM, janezz55 . <span dir=
=3D"ltr">&lt;<a href=3D"mailto:janezz55@gmail.com" target=3D"_blank">janezz=
55@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">I think that perhaps the strongest argument in favor of a single=
 type is the stored function&#39;s return value. It has to be stored in a s=
td::any itself. I would consider invoking a std::any_function and getting a=
 std::any as a return value very confusing.</div><div class=3D"gmail_extra"=
><br><div class=3D"gmail_quote"><span class=3D"">2017-03-02 22:38 GMT+01:00=
 Brian Bi <span dir=3D"ltr">&lt;<a href=3D"mailto:bbi5291@gmail.com" target=
=3D"_blank">bbi5291@gmail.com</a>&gt;</span>:<br></span><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><span class=3D""><div dir=3D"ltr"><div class=3D"gmail_extra">=
<div class=3D"gmail_quote">On Thu, Mar 2, 2017 at 12:40 PM, Nicol Bolas <sp=
an dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank"=
>jmckesson@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
"><div dir=3D"ltr"><br><br>On Thursday, March 2, 2017 at 3:29:13 PM UTC-5, =
Brian Bi wrote:<span><blockquote class=3D"gmail_quote" style=3D"margin:0;ma=
rgin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r"><div><div class=3D"gmail_quote">On Thu, Mar 2, 2017 at 12:15 PM, janezz5=
5 . <span dir=3D"ltr">&lt;<a rel=3D"nofollow">jane...@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 dir=3D"ltr">From my persp=
ective, the user could easily ignore, that std::any is invokable. I believe=
 that adding a separate class, which would duplicate a lot of what std::any=
 does, would not reflect well on the STL.</div></blockquote><div><br></div>=
<div>It&#39;s all a question of your attitude toward C++. Do you want C++ t=
o be like a scripting language or do you want it to be a language where the=
 type system catches mistakes for you at compile time?<br><br></div><div>In=
 my opinion, making a class that either does or doesn&#39;t do something wh=
en called, depending on what you put inside it, without any way for the com=
piler to check, would not reflect well on C++.<br></div></div></div></div><=
/blockquote></span><div dir=3D"ltr"><br>But... that&#39;s <i>what `any` is<=
/i>.<br><br>If you do an `any_cast`, the compiler doesn&#39;t check if it&#=
39;s right. Because it <i>cannot</i> check to see if the `any` is the right=
 type. That&#39;s <i>the entire point</i> of the class: it does a runtime c=
heck.<br><br>He&#39;s asking that `any` extend this runtime type checking t=
o function calls, presumably throwing if the parameter list/return value is=
 inappropriate. I&#39;m saying that we should have a type specifically inte=
nded for that purpose.<br></div></div></blockquote><div><br></div><div>Righ=
t---std::any_cast represents the &quot;ugly&quot; aspect of std::any. But s=
td::any is provided for those few users who really do need it. But we shoul=
d avoid making it any more ugly than it already is. I agree that there shou=
ld be a separate type. Users should not be forced to use std::any if it pro=
vides more ugliness than they actually need. :-)<br></div><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"></div><blockquote class=3D"=
gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div dir=3D"ltr"><div>
</div></div>
</blockquote></div><span>

<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></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/9c85aaa8-6ace-45f6-a8fa-b12b1209a53a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/9c85=
aaa8-6ace-45f6-a8fa-b12b1<wbr>209a53a%40isocpp.org</a>.<span class=3D"m_853=
0486906252743452HOEnZb"><font color=3D"#888888"><br>
</font></span></blockquote></div><span class=3D"m_8530486906252743452HOEnZb=
"><font color=3D"#888888"><br><br clear=3D"all"><br>-- <br><div class=3D"m_=
8530486906252743452m_-4401222177187938902gmail_signature" data-smartmail=3D=
"gmail_signature"><div dir=3D"ltr"><div><div dir=3D"ltr"><font color=3D"#c0=
c0c0"><i>Brian Bi</i></font><br><div></div><div></div><div></div></div></di=
v></div></div>
</font></span></div></div></span><span class=3D"m_8530486906252743452HOEnZb=
"><font color=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<wbr>/c=
JD8urBWN7c/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@isoc<wbr>pp.org</a>.<span class=3D""><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/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-bbo5-iFj=
_-pOMU2c0dPyng%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-=
proposals<wbr>/CAMmfjbM5ZdmBPKo4tN80UnwbkfL-<wbr>bbo5-iFj_-pOMU2c0dPyng%40m=
ail.<wbr>gmail.com</a>.<br>
</span></font></span></blockquote></div><br></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEj8hjctR_AGiJVWHCM_Gt6n1czbo04=
tH86xUzmuta7iw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/CAO9E8GEj8hjctR_<wbr>AGiJVWHCM_<wbr>Gt6n1czbo04tH86xUzmuta7i=
w%<wbr>40mail.gmail.com</a>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAMD6iD-TcfrBn7iK3652fGQJSeaenzBmuiWw=
XxikNd7coU9FHw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAMD6iD-TcfrBn7iK=
3652fGQJSeaenzBmuiWwXxikNd7coU9FHw%40mail.gmail.com</a>.<br />

--001a114d8a42c9979d0549c7263c--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 2 Mar 2017 22:15:04 -0800 (PST)
Raw View
------=_Part_429_1958447134.1488521704735
Content-Type: multipart/alternative;
 boundary="----=_Part_430_1159951911.1488521704735"

------=_Part_430_1159951911.1488521704735
Content-Type: text/plain; charset=UTF-8

On Thursday, March 2, 2017 at 4:50:46 PM UTC-5, janezz55 . wrote:
>
> I think that perhaps the strongest argument in favor of a single type is
> the stored function's return value. It has to be stored in a std::any
> itself.
>

Nonsense:

template<typename ReturnType, typename ...Args>
ReturnType any_call(any_function, Args &&...params);

Just as you specify the parameter types to use, you must also specify the
return type. And just as with `any`, if the parameters and return type
aren't valid for the stored object, you get an exception.

--
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/22c2128d-3999-403c-973c-89cc01c48e7c%40isocpp.org.

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

<div dir=3D"ltr">On Thursday, March 2, 2017 at 4:50:46 PM UTC-5, janezz55 .=
 wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.=
8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I thin=
k that perhaps the strongest argument in favor of a single type is the stor=
ed function&#39;s return value. It has to be stored in a std::any itself.</=
div></blockquote><div><br>Nonsense:<br><br><div style=3D"background-color: =
rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; =
border-width: 1px; overflow-wrap: break-word;" class=3D"prettyprint"><code =
class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color: #=
008;" class=3D"styled-by-prettify">template</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">&lt;</span><span style=3D"color: #008;" cl=
ass=3D"styled-by-prettify">typename</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styl=
ed-by-prettify">ReturnType</span><span style=3D"color: #660;" class=3D"styl=
ed-by-prettify">,</span><span style=3D"color: #000;" class=3D"styled-by-pre=
ttify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettify">ty=
pename</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">...</span><sp=
an style=3D"color: #606;" class=3D"styled-by-prettify">Args</span><span sty=
le=3D"color: #660;" class=3D"styled-by-prettify">&gt;</span><span style=3D"=
color: #000;" class=3D"styled-by-prettify"><br></span><span style=3D"color:=
 #606;" class=3D"styled-by-prettify">ReturnType</span><span style=3D"color:=
 #000;" class=3D"styled-by-prettify"> any_call</span><span style=3D"color: =
#660;" class=3D"styled-by-prettify">(</span><span style=3D"color: #000;" cl=
ass=3D"styled-by-prettify">any_function</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: #606;" class=3D"styled-by=
-prettify">Args</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> </span><span style=3D"color: #660;" class=3D"styled-by-prettify">&amp=
;&amp;...</span><span style=3D"color: #008;" class=3D"styled-by-prettify">p=
arams</span><span style=3D"color: #660;" class=3D"styled-by-prettify">);</s=
pan></div></code></div><br>Just as you specify the parameter types to use, =
you must also specify the return type. And just as with `any`, if the param=
eters and return type aren&#39;t valid for the stored object, you get an ex=
ception.<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/22c2128d-3999-403c-973c-89cc01c48e7c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/22c2128d-3999-403c-973c-89cc01c48e7c=
%40isocpp.org</a>.<br />

------=_Part_430_1159951911.1488521704735--

------=_Part_429_1958447134.1488521704735--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 07:24:03 +0100
Raw View
--001a11449ffc96e8900549cd9768
Content-Type: text/plain; charset=UTF-8

It could be done like that, but returning a std:any makes the class more
user friendly, if the result is discarded, for example. There also won't be
any need to specify a return type. Exceptions can be thrown later if the
returned any is cast to an invalid type.

On Mar 3, 2017 7:15 AM, "Nicol Bolas" <jmckesson@gmail.com> wrote:

> On Thursday, March 2, 2017 at 4:50:46 PM UTC-5, janezz55 . wrote:
>>
>> I think that perhaps the strongest argument in favor of a single type is
>> the stored function's return value. It has to be stored in a std::any
>> itself.
>>
>
> Nonsense:
>
> template<typename ReturnType, typename ...Args>
> ReturnType any_call(any_function, Args &&...params);
>
> Just as you specify the parameter types to use, you must also specify the
> return type. And just as with `any`, if the parameters and return type
> aren't valid for the stored object, you get an exception.
>

--
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/CAO9E8GGw7qBFzVOOn0JCWKvyVLt%2BavY7QDx0A%3DSmCJvBiUtCPg%40mail.gmail.com.

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

<div dir=3D"auto">It could be done like that, but returning a std:any makes=
 the class more user friendly, if the result is discarded, for example. The=
re also won&#39;t be any need to specify a return type. Exceptions can be t=
hrown later if the returned any is cast to an invalid type.</div><div class=
=3D"gmail_extra"><br><div class=3D"gmail_quote">On Mar 3, 2017 7:15 AM, &qu=
ot;Nicol Bolas&quot; &lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_=
blank">jmckesson@gmail.com</a>&gt; wrote:<br type=3D"attribution"><blockquo=
te class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc so=
lid;padding-left:1ex"><div dir=3D"ltr">On Thursday, March 2, 2017 at 4:50:4=
6 PM UTC-5, janezz55 . wrote:<blockquote class=3D"gmail_quote" style=3D"mar=
gin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">I think that perhaps the strongest argument in favor of a single=
 type is the stored function&#39;s return value. It has to be stored in a s=
td::any itself.</div></blockquote><div><br>Nonsense:<br><br><div style=3D"b=
ackground-color:rgb(250,250,250);border-color:rgb(187,187,187);border-style=
:solid;border-width:1px" class=3D"m_5387352613269506640prettyprint"><code c=
lass=3D"m_5387352613269506640prettyprint"><div class=3D"m_53873526132695066=
40subprettyprint"><span style=3D"color:#008" class=3D"m_5387352613269506640=
styled-by-prettify">template</span><span style=3D"color:#660" class=3D"m_53=
87352613269506640styled-by-prettify">&lt;</span><span style=3D"color:#008" =
class=3D"m_5387352613269506640styled-by-prettify">typename</span><span styl=
e=3D"color:#000" class=3D"m_5387352613269506640styled-by-prettify"> </span>=
<span style=3D"color:#606" class=3D"m_5387352613269506640styled-by-prettify=
">ReturnType</span><span style=3D"color:#660" class=3D"m_538735261326950664=
0styled-by-prettify">,</span><span style=3D"color:#000" class=3D"m_53873526=
13269506640styled-by-prettify"> </span><span style=3D"color:#008" class=3D"=
m_5387352613269506640styled-by-prettify">typename</span><span style=3D"colo=
r:#000" class=3D"m_5387352613269506640styled-by-prettify"> </span><span sty=
le=3D"color:#660" class=3D"m_5387352613269506640styled-by-prettify">...</sp=
an><span style=3D"color:#606" class=3D"m_5387352613269506640styled-by-prett=
ify">Args</span><span style=3D"color:#660" class=3D"m_5387352613269506640st=
yled-by-prettify">&gt;</span><span style=3D"color:#000" class=3D"m_53873526=
13269506640styled-by-prettify"><br></span><span style=3D"color:#606" class=
=3D"m_5387352613269506640styled-by-prettify">ReturnType</span><span style=
=3D"color:#000" class=3D"m_5387352613269506640styled-by-prettify"> any_call=
</span><span style=3D"color:#660" class=3D"m_5387352613269506640styled-by-p=
rettify">(</span><span style=3D"color:#000" class=3D"m_5387352613269506640s=
tyled-by-prettify">any_function</span><span style=3D"color:#660" class=3D"m=
_5387352613269506640styled-by-prettify">,</span><span style=3D"color:#000" =
class=3D"m_5387352613269506640styled-by-prettify"> </span><span style=3D"co=
lor:#606" class=3D"m_5387352613269506640styled-by-prettify">Args</span><spa=
n style=3D"color:#000" class=3D"m_5387352613269506640styled-by-prettify"> <=
/span><span style=3D"color:#660" class=3D"m_5387352613269506640styled-by-pr=
ettify">&amp;&amp;...</span><span style=3D"color:#008" class=3D"m_538735261=
3269506640styled-by-prettify">params</span><span style=3D"color:#660" class=
=3D"m_5387352613269506640styled-by-prettify">);</span></div></code></div><b=
r>Just as you specify the parameter types to use, you must also specify the=
 return type. And just as with `any`, if the parameters and return type are=
n&#39;t valid for the stored object, you get an exception.<br></div></div><=
/blockquote></div></div>

<p></p>

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

--001a11449ffc96e8900549cd9768--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Thu, 2 Mar 2017 23:16:23 -0800 (PST)
Raw View
------=_Part_437_787502539.1488525383233
Content-Type: multipart/alternative;
 boundary="----=_Part_438_389606820.1488525383233"

------=_Part_438_389606820.1488525383233
Content-Type: text/plain; charset=UTF-8

On Friday, March 3, 2017 at 1:24:06 AM UTC-5, janezz55 . wrote:
>
> It could be done like that, but returning a std:any makes the class more
> user friendly, if the result is discarded, for example. There also won't be
> any need to specify a return type. Exceptions can be thrown later if the
> returned any is cast to an invalid type.
>

This is a very confused view of `any`.

`any_cast` doesn't convert things to a type like the given one. It converts
to exactly and only one type: the exact type it was given. If you give it a
class D, and you `any_cast` it to a B which is a base class, you get an
exception. If you cast it to a class that's implicitly convertible from
`D`, you get an exception. The only legal thing you can do is `any_cast<D>`.

Under this logic, a function call operator should behave the same way. When
making an `any_call`, the user should be required to provide the *exact*
signature of the function. No implicit conversions, no derived-to-base,
nada: you call it exactly as it is, and if the signature doesn't match, you
get an exception.

This is yet another reason to make it a different type. Because you
probably want `any_function`'s call behavior to allow implicit conversions.
But `any` *doesn't* allow implicit conversions. So you want different
semantics, and therefore a different type.

--
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/799babef-4e9b-4341-b22e-7dc0d701f5ae%40isocpp.org.

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

<div dir=3D"ltr">On Friday, March 3, 2017 at 1:24:06 AM UTC-5, janezz55 . w=
rote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8e=
x;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"auto">It coul=
d be done like that, but returning a std:any makes the class more user frie=
ndly, if the result is discarded, for example. There also won&#39;t be any =
need to specify a return type. Exceptions can be thrown later if the return=
ed any is cast to an invalid type.</div></blockquote><div><br>This is a ver=
y confused view of `any`.<br><br>`any_cast` doesn&#39;t convert things to a=
 type like the given one. It converts to exactly and only one type: the exa=
ct type it was given. If you give it a class D, and you `any_cast` it to a =
B which is a base class, you get an exception. If you cast it to a class th=
at&#39;s implicitly convertible from `D`, you get an exception. The only le=
gal thing you can do is `any_cast&lt;D&gt;`.<br><br>Under this logic, a fun=
ction call operator should behave the same way. When making an `any_call`, =
the user should be required to provide the <i>exact</i> signature of the fu=
nction. No implicit conversions, no derived-to-base, nada: you call it exac=
tly as it is, and if the signature doesn&#39;t match, you get an exception.=
<br><br>This is yet another reason to make it a different type. Because you=
 probably want `any_function`&#39;s call behavior to allow implicit convers=
ions. But `any` <i>doesn&#39;t</i> allow implicit conversions. So you want =
different semantics, and therefore a different type.</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/799babef-4e9b-4341-b22e-7dc0d701f5ae%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/799babef-4e9b-4341-b22e-7dc0d701f5ae=
%40isocpp.org</a>.<br />

------=_Part_438_389606820.1488525383233--

------=_Part_437_787502539.1488525383233--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 08:54:29 +0100
Raw View
--001a1146f2b40255f80549cedbe9
Content-Type: text/plain; charset=UTF-8

I didn't dispute this behavior of std::any in any way. The std::any I
propose would know the return type, as it would deduce it at compile time.
The user, on the other hand, might not know or even care. The
implementation should not force him to know or care.

2017-03-03 8:16 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

> On Friday, March 3, 2017 at 1:24:06 AM UTC-5, janezz55 . wrote:
>>
>> It could be done like that, but returning a std:any makes the class more
>> user friendly, if the result is discarded, for example. There also won't be
>> any need to specify a return type. Exceptions can be thrown later if the
>> returned any is cast to an invalid type.
>>
>
> This is a very confused view of `any`.
>
> `any_cast` doesn't convert things to a type like the given one. It
> converts to exactly and only one type: the exact type it was given. If you
> give it a class D, and you `any_cast` it to a B which is a base class, you
> get an exception. If you cast it to a class that's implicitly convertible
> from `D`, you get an exception. The only legal thing you can do is
> `any_cast<D>`.
>
> Under this logic, a function call operator should behave the same way.
> When making an `any_call`, the user should be required to provide the
> *exact* signature of the function. No implicit conversions, no
> derived-to-base, nada: you call it exactly as it is, and if the signature
> doesn't match, you get an exception.
>
> This is yet another reason to make it a different type. Because you
> probably want `any_function`'s call behavior to allow implicit conversions.
> But `any` *doesn't* allow implicit conversions. So you want different
> semantics, and therefore a different type.
>
>

--
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/CAO9E8GFc4oqwUGUk%2BaXVd6h9ZmovDDwE2GyB5nOOKwuA8k7adw%40mail.gmail.com.

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

<div dir=3D"ltr">I didn&#39;t dispute this behavior of std::any in any way.=
 The std::any I propose would know the return type, as it would deduce it a=
t compile time. The user, on the other hand, might not know or even care. T=
he implementation should not force him to know or care.</div><div class=3D"=
gmail_extra"><br><div class=3D"gmail_quote">2017-03-03 8:16 GMT+01:00 Nicol=
 Bolas <span dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=
=3D"_blank">jmckesson@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gma=
il_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex"><div dir=3D"ltr"><span class=3D"">On Friday, March 3, 2017 at 1:24:0=
6 AM UTC-5, janezz55 . wrote:<blockquote class=3D"gmail_quote" style=3D"mar=
gin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"auto">It could be done like that, but returning a std:any makes the c=
lass more user friendly, if the result is discarded, for example. There als=
o won&#39;t be any need to specify a return type. Exceptions can be thrown =
later if the returned any is cast to an invalid type.</div></blockquote></s=
pan><div><br>This is a very confused view of `any`.<br><br>`any_cast` doesn=
&#39;t convert things to a type like the given one. It converts to exactly =
and only one type: the exact type it was given. If you give it a class D, a=
nd you `any_cast` it to a B which is a base class, you get an exception. If=
 you cast it to a class that&#39;s implicitly convertible from `D`, you get=
 an exception. The only legal thing you can do is `any_cast&lt;D&gt;`.<br><=
br>Under this logic, a function call operator should behave the same way. W=
hen making an `any_call`, the user should be required to provide the <i>exa=
ct</i> signature of the function. No implicit conversions, no derived-to-ba=
se, nada: you call it exactly as it is, and if the signature doesn&#39;t ma=
tch, you get an exception.<br><br>This is yet another reason to make it a d=
ifferent type. Because you probably want `any_function`&#39;s call behavior=
 to allow implicit conversions. But `any` <i>doesn&#39;t</i> allow implicit=
 conversions. So you want different semantics, and therefore a different ty=
pe.</div><br></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GFc4oqwUGUk%2BaXVd6h9ZmovDDwE2G=
yB5nOOKwuA8k7adw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFc4oqwUG=
Uk%2BaXVd6h9ZmovDDwE2GyB5nOOKwuA8k7adw%40mail.gmail.com</a>.<br />

--001a1146f2b40255f80549cedbe9--

.


Author: Giovanni Piero Deretta <gpderetta@gmail.com>
Date: Fri, 3 Mar 2017 02:09:35 -0800 (PST)
Raw View
------=_Part_609_1138844619.1488535775681
Content-Type: multipart/alternative;
 boundary="----=_Part_610_677057456.1488535775681"

------=_Part_610_677057456.1488535775681
Content-Type: text/plain; charset=UTF-8

On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a functor
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where you
> can often invoke an arbitrary variable. I've prepared 2 examples:
>

Any is a polymorphic wrapper for any object modeling the CopyConstructible
concept. Anything beyond that is out of scope. In fact any doesn't even
provide equality or ordering, which would seem very basic.

What you want is std::function (another polymorphic wrapper for types
modeling the FunctionObject concept) . If you want fully dynamic behavior
(including runtime type checking of parameters), use
function<any(std::vector<any>)> and wrap the stored function in an adaptor
that does the unboxing of the parameters.

--
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/d7a965ad-b3aa-4acf-8009-d6514087a796%40isocpp.org.

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

<div dir=3D"ltr">On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmai=
l.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-lef=
t: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I=
 believe that std::any should be made invokable, if an invokable object is =
stored into it, such as a function pointer, method pointer, or a functor (s=
uch as std::function&lt;&gt; and others). This would raise the level of abs=
traction C++ offers to one comparable to scripting languages, where you can=
 often invoke an arbitrary variable. I&#39;ve prepared 2 examples:</div></b=
lockquote><div><br>Any is a polymorphic wrapper for any object modeling the=
 CopyConstructible concept. Anything beyond that is out of scope. In fact a=
ny doesn&#39;t even provide equality or ordering, which would seem very bas=
ic. <br><br>What you want is std::function (another polymorphic wrapper for=
 types modeling the FunctionObject concept) . If you want fully dynamic beh=
avior (including runtime type checking of parameters), use function&lt;any(=
std::vector&lt;any&gt;)&gt; and wrap the stored function in an adaptor that=
 does the unboxing of the parameters.<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/d7a965ad-b3aa-4acf-8009-d6514087a796%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/d7a965ad-b3aa-4acf-8009-d6514087a796=
%40isocpp.org</a>.<br />

------=_Part_610_677057456.1488535775681--

------=_Part_609_1138844619.1488535775681--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 11:15:11 +0100
Raw View
--001a11407f6e2fc8320549d0d273
Content-Type: text/plain; charset=UTF-8

I already wrote what I needed :) function<any(std::vector<any>)> is simply
blasphemous.

2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:

> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a functor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where you
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructible
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an
> adaptor that does the unboxing of the parameters.
>

--
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/CAO9E8GFkHwh5-vp6hgt7QtTt-24sJA8ORENf50ha4P%2ByXETRzA%40mail.gmail.com.

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

<div dir=3D"ltr">I already wrote what I needed :) function&lt;any(std::vect=
or&lt;any&gt;)&gt; is simply blasphemous.</div><div class=3D"gmail_extra"><=
br><div class=3D"gmail_quote">2017-03-03 11:09 GMT+01:00 Giovanni Piero Der=
etta <span dir=3D"ltr">&lt;<a href=3D"mailto:gpderetta@gmail.com" target=3D=
"_blank">gpderetta@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_=
quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1=
ex"><div dir=3D"ltr">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a href=
=3D"mailto:jane...@gmail.com" target=3D"_blank">jane...@gmail.com</a> wrote=
:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I believe that st=
d::any should be made invokable, if an invokable object is stored into it, =
such as a function pointer, method pointer, or a functor (such as std::func=
tion&lt;&gt; and others). This would raise the level of abstraction C++ off=
ers to one comparable to scripting languages, where you can often invoke an=
 arbitrary variable. I&#39;ve prepared 2 examples:</div></blockquote><div><=
br>Any is a polymorphic wrapper for any object modeling the CopyConstructib=
le concept. Anything beyond that is out of scope. In fact any doesn&#39;t e=
ven provide equality or ordering, which would seem very basic. <br><br>What=
 you want is std::function (another polymorphic wrapper for types modeling =
the FunctionObject concept) . If you want fully dynamic behavior (including=
 runtime type checking of parameters), use function&lt;any(std::vector&lt;a=
ny&gt;)<wbr>&gt; and wrap the stored function in an adaptor that does the u=
nboxing of the parameters.<br></div></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GFkHwh5-vp6hgt7QtTt-24sJA8ORENf=
50ha4P%2ByXETRzA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFkHwh5-v=
p6hgt7QtTt-24sJA8ORENf50ha4P%2ByXETRzA%40mail.gmail.com</a>.<br />

--001a11407f6e2fc8320549d0d273--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 10:48:49 +0000
Raw View
--f403045e648412ee650549d14b2c
Content-Type: text/plain; charset=UTF-8

Please refrain from comments that are not technologically sound and at the
same make you sound like a fanatic.

If you want full duck typing on your type system, then please consider
using a language that is *not* C++. And `function<any (vector<any>)>` is
exactly what you're asking for, so I don't know why you're so angry at it.

On Fri, Mar 3, 2017 at 11:15 AM janezz55 . <janezz55@gmail.com> wrote:

> I already wrote what I needed :) function<any(std::vector<any>)> is simply
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a functor
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where you
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructible
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adaptor
> that does the unboxing of the parameters.
>
>
> --
> 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/CAO9E8GFkHwh5-vp6hgt7QtTt-24sJA8ORENf50ha4P%2ByXETRzA%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFkHwh5-vp6hgt7QtTt-24sJA8ORENf50ha4P%2ByXETRzA%40mail.gmail.com?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/CAPCFJdRYm-e3bartR%2BbNppVa9%3DZYEJB0zua9O1vAz1i4htTaMQ%40mail.gmail.com.

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

<div dir=3D"ltr">Please refrain from comments that are not technologically =
sound and at the same make you sound like a fanatic.<div><br></div><div>If =
you want full duck typing on your type system, then please consider using a=
 language that is <i>not</i>=C2=A0C++. And `function&lt;any (vector&lt;any&=
gt;)&gt;` is exactly what you&#39;re asking for, so I don&#39;t know why yo=
u&#39;re so angry at it.</div></div><br><div class=3D"gmail_quote"><div dir=
=3D"ltr">On Fri, Mar 3, 2017 at 11:15 AM janezz55 . &lt;<a href=3D"mailto:j=
anezz55@gmail.com">janezz55@gmail.com</a>&gt; wrote:<br></div><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">I already wrote what=
 I needed :) function&lt;any(std::vector&lt;any&gt;)&gt; is simply blasphem=
ous.</div><div class=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div=
 class=3D"gmail_quote gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero =
Deretta <span dir=3D"ltr" class=3D"gmail_msg">&lt;<a href=3D"mailto:gpderet=
ta@gmail.com" class=3D"gmail_msg" target=3D"_blank">gpderetta@gmail.com</a>=
&gt;</span>:<br class=3D"gmail_msg"><blockquote class=3D"gmail_quote gmail_=
msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
"><div dir=3D"ltr" class=3D"gmail_msg">On Thursday, March 2, 2017 at 6:26:0=
1 PM UTC, <a href=3D"mailto:jane...@gmail.com" class=3D"gmail_msg" target=
=3D"_blank">jane...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote gm=
ail_msg" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;pad=
ding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">I believe that std::any=
 should be made invokable, if an invokable object is stored into it, such a=
s a function pointer, method pointer, or a functor (such as std::function&l=
t;&gt; and others). This would raise the level of abstraction C++ offers to=
 one comparable to scripting languages, where you can often invoke an arbit=
rary variable. I&#39;ve prepared 2 examples:</div></blockquote><div class=
=3D"gmail_msg"><br class=3D"gmail_msg">Any is a polymorphic wrapper for any=
 object modeling the CopyConstructible concept. Anything beyond that is out=
 of scope. In fact any doesn&#39;t even provide equality or ordering, which=
 would seem very basic. <br class=3D"gmail_msg"><br class=3D"gmail_msg">Wha=
t you want is std::function (another polymorphic wrapper for types modeling=
 the FunctionObject concept) . If you want fully dynamic behavior (includin=
g runtime type checking of parameters), use function&lt;any(std::vector&lt;=
any&gt;)&gt; and wrap the stored function in an adaptor that does the unbox=
ing of the parameters.<br class=3D"gmail_msg"></div></div></blockquote></di=
v><br class=3D"gmail_msg"></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFkHwh5-vp6hgt7QtTt-24sJA8ORENf=
50ha4P%2ByXETRzA%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GFkHwh5-vp6hgt7QtTt-24sJA8ORENf50ha4P%2ByX=
ETRzA%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdRYm-e3bartR%2BbNppVa9%3DZYEJB0=
zua9O1vAz1i4htTaMQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdRYm-e3=
bartR%2BbNppVa9%3DZYEJB0zua9O1vAz1i4htTaMQ%40mail.gmail.com</a>.<br />

--f403045e648412ee650549d14b2c--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 11:55:14 +0100
Raw View
--001a11407f6e723ce00549d161c3
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Again, I am not asking for anything. I even wrote an example illustrating
what I had in mind.

2017-03-03 11:48 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> Please refrain from comments that are not technologically sound and at th=
e
> same make you sound like a fanatic.
>
> If you want full duck typing on your type system, then please consider
> using a language that is *not* C++. And `function<any (vector<any>)>` is
> exactly what you're asking for, so I don't know why you're so angry at it=
..
>
> On Fri, Mar 3, 2017 at 11:15 AM janezz55 . <janezz55@gmail.com> wrote:
>
>> I already wrote what I needed :) function<any(std::vector<any>)> is
>> simply blasphemous.
>>
>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very bas=
ic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavio=
r
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GFkHwh5-
>> vp6hgt7QtTt-24sJA8ORENf50ha4P%2ByXETRzA%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFkH=
wh5-vp6hgt7QtTt-24sJA8ORENf50ha4P%2ByXETRzA%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAPCFJdRYm-e3bartR%2BbNppVa9%
> 3DZYEJB0zua9O1vAz1i4htTaMQ%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdRYm-=
e3bartR%2BbNppVa9%3DZYEJB0zua9O1vAz1i4htTaMQ%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GEKSf4YixRrkTyqbXvO-UVrQDK8wbVa-UNyHeWhGmm=
Ecw%40mail.gmail.com.

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

<div dir=3D"ltr">Again, I am not asking for anything. I even wrote an examp=
le illustrating what I had in mind.</div><div class=3D"gmail_extra"><br><di=
v class=3D"gmail_quote">2017-03-03 11:48 GMT+01:00 Micha=C5=82 Dominiak <sp=
an dir=3D"ltr">&lt;<a href=3D"mailto:griwes@griwes.info" target=3D"_blank">=
griwes@griwes.info</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">Please refrain from comments that are not technologically sound =
and at the same make you sound like a fanatic.<div><br></div><div>If you wa=
nt full duck typing on your type system, then please consider using a langu=
age that is <i>not</i>=C2=A0C++. And `function&lt;any (vector&lt;any&gt;)&g=
t;` is exactly what you&#39;re asking for, so I don&#39;t know why you&#39;=
re so angry at it.</div></div><br><div class=3D"gmail_quote"><div dir=3D"lt=
r">On Fri, Mar 3, 2017 at 11:15 AM janezz55 . &lt;<a href=3D"mailto:janezz5=
5@gmail.com" target=3D"_blank">janezz55@gmail.com</a>&gt; wrote:<br></div><=
blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px=
 #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_-7752477808592265=
583gmail_msg">I already wrote what I needed :) function&lt;any(std::vector&=
lt;any&gt;)<wbr>&gt; is simply blasphemous.</div><div class=3D"gmail_extra =
m_-7752477808592265583gmail_msg"><br class=3D"m_-7752477808592265583gmail_m=
sg"><div class=3D"gmail_quote m_-7752477808592265583gmail_msg">2017-03-03 1=
1:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"m_-7752477=
808592265583gmail_msg">&lt;<a href=3D"mailto:gpderetta@gmail.com" class=3D"=
m_-7752477808592265583gmail_msg" target=3D"_blank">gpderetta@gmail.com</a>&=
gt;</span>:<br class=3D"m_-7752477808592265583gmail_msg"><blockquote class=
=3D"gmail_quote m_-7752477808592265583gmail_msg" style=3D"margin:0 0 0 .8ex=
;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_-=
7752477808592265583gmail_msg">On Thursday, March 2, 2017 at 6:26:01 PM UTC,=
 <a href=3D"mailto:jane...@gmail.com" class=3D"m_-7752477808592265583gmail_=
msg" target=3D"_blank">jane...@gmail.com</a> wrote:<blockquote class=3D"gma=
il_quote m_-7752477808592265583gmail_msg" style=3D"margin:0;margin-left:0.8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m=
_-7752477808592265583gmail_msg">I believe that std::any should be made invo=
kable, if an invokable object is stored into it, such as a function pointer=
, method pointer, or a functor (such as std::function&lt;&gt; and others). =
This would raise the level of abstraction C++ offers to one comparable to s=
cripting languages, where you can often invoke an arbitrary variable. I&#39=
;ve prepared 2 examples:</div></blockquote><div class=3D"m_-775247780859226=
5583gmail_msg"><br class=3D"m_-7752477808592265583gmail_msg">Any is a polym=
orphic wrapper for any object modeling the CopyConstructible concept. Anyth=
ing beyond that is out of scope. In fact any doesn&#39;t even provide equal=
ity or ordering, which would seem very basic. <br class=3D"m_-7752477808592=
265583gmail_msg"><br class=3D"m_-7752477808592265583gmail_msg">What you wan=
t is std::function (another polymorphic wrapper for types modeling the Func=
tionObject concept) . If you want fully dynamic behavior (including runtime=
 type checking of parameters), use function&lt;any(std::vector&lt;any&gt;)<=
wbr>&gt; and wrap the stored function in an adaptor that does the unboxing =
of the parameters.<br class=3D"m_-7752477808592265583gmail_msg"></div></div=
></blockquote></div><br class=3D"m_-7752477808592265583gmail_msg"></div><sp=
an class=3D"HOEnZb"><font color=3D"#888888">

<p class=3D"m_-7752477808592265583gmail_msg"></p>

-- <br class=3D"m_-7752477808592265583gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-775247=
7808592265583gmail_msg">
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" class=3D"m_=
-7752477808592265583gmail_msg" target=3D"_blank">std-proposals+unsubscribe@=
<wbr>isocpp.org</a>.<br class=3D"m_-7752477808592265583gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-7752477808592265583gmail_msg" target=3D"_blank">std-propo=
sals@isocpp.org</a>.<br class=3D"m_-7752477808592265583gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFkHwh5-vp6hgt7QtTt-24sJA8ORENf=
50ha4P%2ByXETRzA%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"m_-7752477808592265583gmail_msg" target=3D"_blank">https://grou=
ps.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GFkHwh5-<w=
br>vp6hgt7QtTt-24sJA8ORENf50ha4P%<wbr>2ByXETRzA%40mail.gmail.com</a>.<br cl=
ass=3D"m_-7752477808592265583gmail_msg">
</font></span></blockquote></div><span class=3D"HOEnZb"><font color=3D"#888=
888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdRYm-e3bartR%2BbNppVa9%3DZYEJB0=
zua9O1vAz1i4htTaMQ%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/=
std-<wbr>proposals/CAPCFJdRYm-e3bartR%<wbr>2BbNppVa9%<wbr>3DZYEJB0zua9O1vAz=
1i4htTaMQ%<wbr>40mail.gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEKSf4YixRrkTyqbXvO-UVrQDK8wbVa=
-UNyHeWhGmmEcw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEKSf4YixRr=
kTyqbXvO-UVrQDK8wbVa-UNyHeWhGmmEcw%40mail.gmail.com</a>.<br />

--001a11407f6e723ce00549d161c3--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 12:10:28 +0100
Raw View
--001a1144b3faee99660549d1976c
Content-Type: text/plain; charset=UTF-8

Let's say you store a lambda object into std::any

std::any a = [](){};

How are you going to obtain the lambda object back? AFAIK it's locked
inside the any instance. If std::any had a mechanism of invoking the stored
object you could still "reach" it.

2017-03-03 11:15 GMT+01:00 janezz55 . <janezz55@gmail.com>:

> I already wrote what I needed :) function<any(std::vector<any>)> is
> simply blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>>
>>> I believe that std::any should be made invokable, if an invokable object
>>> is stored into it, such as a function pointer, method pointer, or a functor
>>> (such as std::function<> and others). This would raise the level of
>>> abstraction C++ offers to one comparable to scripting languages, where you
>>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very basic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavior
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>
>

--
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/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com.

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

<div dir=3D"ltr">Let&#39;s say you store a lambda object into std::any<div>=
<br></div><div>std::any a =3D [](){};</div><div><br></div><div>How are you =
going to obtain the lambda object back? AFAIK it&#39;s locked inside the an=
y instance. If std::any had a mechanism of invoking the stored object you c=
ould still &quot;reach&quot; it.</div></div><div class=3D"gmail_extra"><br>=
<div class=3D"gmail_quote">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=
=3D"ltr">&lt;<a href=3D"mailto:janezz55@gmail.com" target=3D"_blank">janezz=
55@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"=
margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"=
ltr">I already wrote what I needed :) function&lt;any(std::vector&lt;any&gt=
;)<wbr>&gt; is simply blasphemous.</div><div class=3D"HOEnZb"><div class=3D=
"h5"><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-03 1=
1:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr">&lt;<a href=3D"mail=
to:gpderetta@gmail.com" target=3D"_blank">gpderetta@gmail.com</a>&gt;</span=
>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Thursday, March 2,=
 2017 at 6:26:01 PM UTC, <a href=3D"mailto:jane...@gmail.com" target=3D"_bl=
ank">jane...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D=
"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><d=
iv dir=3D"ltr">I believe that std::any should be made invokable, if an invo=
kable object is stored into it, such as a function pointer, method pointer,=
 or a functor (such as std::function&lt;&gt; and others). This would raise =
the level of abstraction C++ offers to one comparable to scripting language=
s, where you can often invoke an arbitrary variable. I&#39;ve prepared 2 ex=
amples:</div></blockquote><div><br>Any is a polymorphic wrapper for any obj=
ect modeling the CopyConstructible concept. Anything beyond that is out of =
scope. In fact any doesn&#39;t even provide equality or ordering, which wou=
ld seem very basic. <br><br>What you want is std::function (another polymor=
phic wrapper for types modeling the FunctionObject concept) . If you want f=
ully dynamic behavior (including runtime type checking of parameters), use =
function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored functi=
on in an adaptor that does the unboxing of the parameters.<br></div></div><=
/blockquote></div><br></div>
</div></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos=
5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com</a>.<br />

--001a1144b3faee99660549d1976c--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 11:12:50 +0000
Raw View
--001a114e5288f102b80549d1a03f
Content-Type: text/plain; charset=UTF-8

Show us the actual (i.e. complete) example of why that be useful (and why
you wouldn't just use `std::function<void ()>`, or the somewhat proposed
function_ref, for that).

On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <janezz55@gmail.com> wrote:

> Let's say you store a lambda object into std::any
>
> std::any a = [](){};
>
> How are you going to obtain the lambda object back? AFAIK it's locked
> inside the any instance. If std::any had a mechanism of invoking the stored
> object you could still "reach" it.
>
> 2017-03-03 11:15 GMT+01:00 janezz55 . <janezz55@gmail.com>:
>
> I already wrote what I needed :) function<any(std::vector<any>)> is simply
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a functor
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where you
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructible
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adaptor
> that does the unboxing of the parameters.
>
>
>
> --
> 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/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?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/CAPCFJdTh6k94-FoSYBVBnohxj8eXM2_NHxAgThxZttzqkWjErA%40mail.gmail.com.

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

<div dir=3D"ltr">Show us the actual (i.e. complete) example of why that be =
useful (and why you wouldn&#39;t just use `std::function&lt;void ()&gt;`, o=
r the somewhat proposed function_ref, for that).</div><br><div class=3D"gma=
il_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<=
a href=3D"mailto:janezz55@gmail.com">janezz55@gmail.com</a>&gt; wrote:<br><=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">Le=
t&#39;s say you store a lambda object into std::any<div class=3D"gmail_msg"=
><br class=3D"gmail_msg"></div><div class=3D"gmail_msg">std::any a =3D []()=
{};</div><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div class=
=3D"gmail_msg">How are you going to obtain the lambda object back? AFAIK it=
&#39;s locked inside the any instance. If std::any had a mechanism of invok=
ing the stored object you could still &quot;reach&quot; it.</div></div><div=
 class=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div class=3D"gmai=
l_quote gmail_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" =
class=3D"gmail_msg">&lt;<a href=3D"mailto:janezz55@gmail.com" class=3D"gmai=
l_msg" target=3D"_blank">janezz55@gmail.com</a>&gt;</span>:<br class=3D"gma=
il_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .=
8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"=
gmail_msg">I already wrote what I needed :) function&lt;any(std::vector&lt;=
any&gt;)&gt; is simply blasphemous.</div><div class=3D"m_-82974793823773986=
58HOEnZb gmail_msg"><div class=3D"m_-8297479382377398658h5 gmail_msg"><div =
class=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div class=3D"gmail=
_quote gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <span d=
ir=3D"ltr" class=3D"gmail_msg">&lt;<a href=3D"mailto:gpderetta@gmail.com" c=
lass=3D"gmail_msg" target=3D"_blank">gpderetta@gmail.com</a>&gt;</span>:<br=
 class=3D"gmail_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"m=
argin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"l=
tr" class=3D"gmail_msg">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a hr=
ef=3D"mailto:jane...@gmail.com" class=3D"gmail_msg" target=3D"_blank">jane.=
...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote gmail_msg" style=3D=
"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><d=
iv dir=3D"ltr" class=3D"gmail_msg">I believe that std::any should be made i=
nvokable, if an invokable object is stored into it, such as a function poin=
ter, method pointer, or a functor (such as std::function&lt;&gt; and others=
). This would raise the level of abstraction C++ offers to one comparable t=
o scripting languages, where you can often invoke an arbitrary variable. I&=
#39;ve prepared 2 examples:</div></blockquote><div class=3D"gmail_msg"><br =
class=3D"gmail_msg">Any is a polymorphic wrapper for any object modeling th=
e CopyConstructible concept. Anything beyond that is out of scope. In fact =
any doesn&#39;t even provide equality or ordering, which would seem very ba=
sic. <br class=3D"gmail_msg"><br class=3D"gmail_msg">What you want is std::=
function (another polymorphic wrapper for types modeling the FunctionObject=
 concept) . If you want fully dynamic behavior (including runtime type chec=
king of parameters), use function&lt;any(std::vector&lt;any&gt;)&gt; and wr=
ap the stored function in an adaptor that does the unboxing of the paramete=
rs.<br class=3D"gmail_msg"></div></div></blockquote></div><br class=3D"gmai=
l_msg"></div>
</div></div></blockquote></div><br class=3D"gmail_msg"></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.o=
rg/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBj=
g%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdTh6k94-FoSYBVBnohxj8eXM2_NHxAg=
ThxZttzqkWjErA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdTh6k94-FoS=
YBVBnohxj8eXM2_NHxAgThxZttzqkWjErA%40mail.gmail.com</a>.<br />

--001a114e5288f102b80549d1a03f--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 12:24:40 +0100
Raw View
--94eb2c06146aab16ed0549d1cac8
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

it's just an example of std::any swallowing an object and not giving it
back, it's a deficiency.

2017-03-03 12:12 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> Show us the actual (i.e. complete) example of why that be useful (and why
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <janezz55@gmail.com> wrote:
>
>> Let's say you store a lambda object into std::any
>>
>> std::any a =3D [](){};
>>
>> How are you going to obtain the lambda object back? AFAIK it's locked
>> inside the any instance. If std::any had a mechanism of invoking the sto=
red
>> object you could still "reach" it.
>>
>> 2017-03-03 11:15 GMT+01:00 janezz55 . <janezz55@gmail.com>:
>>
>> I already wrote what I needed :) function<any(std::vector<any>)> is
>> simply blasphemous.
>>
>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very bas=
ic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavio=
r
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYu
>> p5XegKF253kwet6TFZBjg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2G=
R1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAPCFJdTh6k94-FoSYBVBnohxj8eXM2_
> NHxAgThxZttzqkWjErA%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdTh6k=
94-FoSYBVBnohxj8eXM2_NHxAgThxZttzqkWjErA%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GHL19VtsZWPQA3MfJqgVR_CVRSbRhNOzcmmcBOgAVk=
WhQ%40mail.gmail.com.

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

<div dir=3D"ltr">it&#39;s just an example of std::any swallowing an object =
and not giving it back, it&#39;s a deficiency.</div><div class=3D"gmail_ext=
ra"><br><div class=3D"gmail_quote">2017-03-03 12:12 GMT+01:00 Micha=C5=82 D=
ominiak <span dir=3D"ltr">&lt;<a href=3D"mailto:griwes@griwes.info" target=
=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br><blockquote class=3D"gmai=
l_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left=
:1ex"><div dir=3D"ltr">Show us the actual (i.e. complete) example of why th=
at be useful (and why you wouldn&#39;t just use `std::function&lt;void ()&g=
t;`, or the somewhat proposed function_ref, for that).</div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 12:10 PM janezz55 =
.. &lt;<a href=3D"mailto:janezz55@gmail.com" target=3D"_blank">janezz55@gmai=
l.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r" class=3D"m_-5732969856314394779gmail_msg">Let&#39;s say you store a lamb=
da object into std::any<div class=3D"m_-5732969856314394779gmail_msg"><br c=
lass=3D"m_-5732969856314394779gmail_msg"></div><div class=3D"m_-57329698563=
14394779gmail_msg">std::any a =3D [](){};</div><div class=3D"m_-57329698563=
14394779gmail_msg"><br class=3D"m_-5732969856314394779gmail_msg"></div><div=
 class=3D"m_-5732969856314394779gmail_msg">How are you going to obtain the =
lambda object back? AFAIK it&#39;s locked inside the any instance. If std::=
any had a mechanism of invoking the stored object you could still &quot;rea=
ch&quot; it.</div></div><span class=3D""><div class=3D"gmail_extra m_-57329=
69856314394779gmail_msg"><br class=3D"m_-5732969856314394779gmail_msg"><div=
 class=3D"gmail_quote m_-5732969856314394779gmail_msg">2017-03-03 11:15 GMT=
+01:00 janezz55 . <span dir=3D"ltr" class=3D"m_-5732969856314394779gmail_ms=
g">&lt;<a href=3D"mailto:janezz55@gmail.com" class=3D"m_-573296985631439477=
9gmail_msg" target=3D"_blank">janezz55@gmail.com</a>&gt;</span>:<br class=
=3D"m_-5732969856314394779gmail_msg"><blockquote class=3D"gmail_quote m_-57=
32969856314394779gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_-5732969856314394779gm=
ail_msg">I already wrote what I needed :) function&lt;any(std::vector&lt;an=
y&gt;)<wbr>&gt; is simply blasphemous.</div><div class=3D"m_-57329698563143=
94779m_-8297479382377398658HOEnZb m_-5732969856314394779gmail_msg"><div cla=
ss=3D"m_-5732969856314394779m_-8297479382377398658h5 m_-5732969856314394779=
gmail_msg"><div class=3D"gmail_extra m_-5732969856314394779gmail_msg"><br c=
lass=3D"m_-5732969856314394779gmail_msg"><div class=3D"gmail_quote m_-57329=
69856314394779gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta =
<span dir=3D"ltr" class=3D"m_-5732969856314394779gmail_msg">&lt;<a href=3D"=
mailto:gpderetta@gmail.com" class=3D"m_-5732969856314394779gmail_msg" targe=
t=3D"_blank">gpderetta@gmail.com</a>&gt;</span>:<br class=3D"m_-57329698563=
14394779gmail_msg"><blockquote class=3D"gmail_quote m_-5732969856314394779g=
mail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex"><div dir=3D"ltr" class=3D"m_-5732969856314394779gmail_msg">On Thursd=
ay, March 2, 2017 at 6:26:01 PM UTC, <a href=3D"mailto:jane...@gmail.com" c=
lass=3D"m_-5732969856314394779gmail_msg" target=3D"_blank">jane...@gmail.co=
m</a> wrote:<blockquote class=3D"gmail_quote m_-5732969856314394779gmail_ms=
g" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-l=
eft:1ex"><div dir=3D"ltr" class=3D"m_-5732969856314394779gmail_msg">I belie=
ve that std::any should be made invokable, if an invokable object is stored=
 into it, such as a function pointer, method pointer, or a functor (such as=
 std::function&lt;&gt; and others). This would raise the level of abstracti=
on C++ offers to one comparable to scripting languages, where you can often=
 invoke an arbitrary variable. I&#39;ve prepared 2 examples:</div></blockqu=
ote><div class=3D"m_-5732969856314394779gmail_msg"><br class=3D"m_-57329698=
56314394779gmail_msg">Any is a polymorphic wrapper for any object modeling =
the CopyConstructible concept. Anything beyond that is out of scope. In fac=
t any doesn&#39;t even provide equality or ordering, which would seem very =
basic. <br class=3D"m_-5732969856314394779gmail_msg"><br class=3D"m_-573296=
9856314394779gmail_msg">What you want is std::function (another polymorphic=
 wrapper for types modeling the FunctionObject concept) . If you want fully=
 dynamic behavior (including runtime type checking of parameters), use func=
tion&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored function i=
n an adaptor that does the unboxing of the parameters.<br class=3D"m_-57329=
69856314394779gmail_msg"></div></div></blockquote></div><br class=3D"m_-573=
2969856314394779gmail_msg"></div>
</div></div></blockquote></div><br class=3D"m_-5732969856314394779gmail_msg=
"></div>

<p class=3D"m_-5732969856314394779gmail_msg"></p>

-- <br class=3D"m_-5732969856314394779gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-573296=
9856314394779gmail_msg">
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" class=3D"m_=
-5732969856314394779gmail_msg" target=3D"_blank">std-proposals+unsubscribe@=
<wbr>isocpp.org</a>.<br class=3D"m_-5732969856314394779gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-5732969856314394779gmail_msg" target=3D"_blank">std-propo=
sals@isocpp.org</a>.<br class=3D"m_-5732969856314394779gmail_msg"></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"m_-5732969856314394779gmail_msg" target=3D"_blank">https://groups=
..google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GE2GR1G=
QRos5BCUJzLi5yaYu<wbr>p5XegKF253kwet6TFZBjg%40mail.<wbr>gmail.com</a>.<br c=
lass=3D"m_-5732969856314394779gmail_msg">
</blockquote></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdTh6k94-FoSYBVBnohxj8eXM2_NHxAg=
ThxZttzqkWjErA%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/CAPCFJdTh6k94-<wbr>FoSYBVBnohxj8eXM2_<wbr>NHxAgThxZttzqkWjEr=
A%40mail.<wbr>gmail.com</a>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GHL19VtsZWPQA3MfJqgVR_CVRSbRhNO=
zcmmcBOgAVkWhQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHL19VtsZWP=
QA3MfJqgVR_CVRSbRhNOzcmmcBOgAVkWhQ%40mail.gmail.com</a>.<br />

--94eb2c06146aab16ed0549d1cac8--

.


Author: Giovanni Piero Deretta <gpderetta@gmail.com>
Date: Fri, 3 Mar 2017 03:44:04 -0800 (PST)
Raw View
------=_Part_603_1205805886.1488541444435
Content-Type: multipart/alternative;
 boundary="----=_Part_604_606839744.1488541444435"

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

On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>
> Show us the actual (i.e. complete) example of why that be useful (and why=
=20
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed=
=20
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com=20
> <javascript:>> wrote:
>
>> Let's say you store a lambda object into std::any
>>
>> std::any a =3D [](){};
>>
>> How are you going to obtain the lambda object back? AFAIK it's locked=20
>> inside the any instance. If std::any had a mechanism of invoking the sto=
red=20
>> object you could still "reach" it.
>>
>
any_cast. You have to keep the lambda type around of course. If you don't=
=20
want to, wrap the lambda in a std::function first before putting it in an=
=20
std::any.
=20

>
>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com <javascript:>>:
>>
>>> I already wrote what I needed :) function<any(std::vector<any>)> is=20
>>> simply blasphemous.
>>>
>>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com=20
>>> <javascript:>>:
>>>
>>>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>>>>
>>>>> I believe that std::any should be made invokable, if an invokable=20
>>>>> object is stored into it, such as a function pointer, method pointer,=
 or a=20
>>>>> functor (such as std::function<> and others). This would raise the le=
vel of=20
>>>>> abstraction C++ offers to one comparable to scripting languages, wher=
e you=20
>>>>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>>>>
>>>>
>>>> Any is a polymorphic wrapper for any object modeling the=20
>>>> CopyConstructible concept. Anything beyond that is out of scope. In fa=
ct=20
>>>> any doesn't even provide equality or ordering, which would seem very b=
asic.=20
>>>>
>>>> What you want is std::function (another polymorphic wrapper for types=
=20
>>>> modeling the FunctionObject concept) . If you want fully dynamic behav=
ior=20
>>>> (including runtime type checking of parameters), use=20
>>>> function<any(std::vector<any>)> and wrap the stored function in an ada=
ptor=20
>>>> that does the unboxing of the parameters.
>>>>
>>>
>>>
>> --=20
>> You received this message because you are subscribed to the Google Group=
s=20
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n=20
>> email to std-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit=20
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR=
1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com=20
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2G=
R1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.or=
g.

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

<div dir=3D"ltr">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 D=
ominiak wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-l=
eft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"=
>Show us the actual (i.e. complete) example of why that be useful (and why =
you wouldn&#39;t just use `std::function&lt;void ()&gt;`, or the somewhat p=
roposed function_ref, for that).</div><br><div class=3D"gmail_quote"><div d=
ir=3D"ltr">On Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a href=3D"javasc=
ript:" target=3D"_blank" gdf-obfuscated-mailto=3D"bKesJF9CCgAJ" rel=3D"nofo=
llow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return true;" onclic=
k=3D"this.href=3D&#39;javascript:&#39;;return true;">jane...@gmail.com</a>&=
gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0=
 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Let&#39=
;s say you store a lambda object into std::any<div><br></div><div>std::any =
a =3D [](){};</div><div><br></div><div>How are you going to obtain the lamb=
da object back? AFAIK it&#39;s locked inside the any instance. If std::any =
had a mechanism of invoking the stored object you could still &quot;reach&q=
uot; it.</div></div></blockquote></div></blockquote><div><br>any_cast. You =
have to keep the lambda type around of course. If you don&#39;t want to, wr=
ap the lambda in a std::function first before putting it in an std::any.<br=
>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div class=3D"gma=
il_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div><br><div class=3D"gmail_quote=
">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr">&lt;<a href=3D"ja=
vascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"bKesJF9CCgAJ" rel=3D"=
nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return true;" on=
click=3D"this.href=3D&#39;javascript:&#39;;return true;">jane...@gmail.com<=
/a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I alread=
y wrote what I needed :) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; i=
s simply blasphemous.</div><div><div><div><br><div class=3D"gmail_quote">20=
17-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr">&lt;<a hr=
ef=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"bKesJF9CCgAJ"=
 rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return t=
rue;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">gpde...@gm=
ail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margi=
n:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">=
On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a>jane...@gmail.com</a> wrot=
e:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I believe that s=
td::any should be made invokable, if an invokable object is stored into it,=
 such as a function pointer, method pointer, or a functor (such as std::fun=
ction&lt;&gt; and others). This would raise the level of abstraction C++ of=
fers to one comparable to scripting languages, where you can often invoke a=
n arbitrary variable. I&#39;ve prepared 2 examples:</div></blockquote><div>=
<br>Any is a polymorphic wrapper for any object modeling the CopyConstructi=
ble concept. Anything beyond that is out of scope. In fact any doesn&#39;t =
even provide equality or ordering, which would seem very basic. <br><br>Wha=
t you want is std::function (another polymorphic wrapper for types modeling=
 the FunctionObject concept) . If you want fully dynamic behavior (includin=
g runtime type checking of parameters), use function&lt;any(std::vector&lt;=
any&gt;)<wbr>&gt; and wrap the stored function in an adaptor that does the =
unboxing of the parameters.<br></div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"=
bKesJF9CCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&=
#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true=
;">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"bKesJF9CCgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@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/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https:/=
/groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCU=
JzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium\x3demail\x26utm_=
source\x3dfooter&#39;;return true;" onclick=3D"this.href=3D&#39;https://gro=
ups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi=
5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium\x3demail\x26utm_sour=
ce\x3dfooter&#39;;return true;">https://groups.google.com/a/<wbr>isocpp.org=
/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GE2GR1GQRos5BCUJzLi5yaYu<wbr>p5XegKF=
253kwet6TFZBjg%40mail.<wbr>gmail.com</a>.<br>
</blockquote></div>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e=
%40isocpp.org</a>.<br />

------=_Part_604_606839744.1488541444435--

------=_Part_603_1205805886.1488541444435--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 12:47:21 +0100
Raw View
--001a11449ffcc898700549d21b92
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

What you describe are workarounds. If you want to use a temporary lambda,
you won't be able to keep the type around. Maybe you don't want to specify
the function signature and so std::function is not appropriate.

2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:

> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>>
>> Show us the actual (i.e. complete) example of why that be useful (and wh=
y
>> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
>> function_ref, for that).
>>
>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>
>>> Let's say you store a lambda object into std::any
>>>
>>> std::any a =3D [](){};
>>>
>>> How are you going to obtain the lambda object back? AFAIK it's locked
>>> inside the any instance. If std::any had a mechanism of invoking the st=
ored
>>> object you could still "reach" it.
>>>
>>
> any_cast. You have to keep the lambda type around of course. If you don't
> want to, wrap the lambda in a std::function first before putting it in an
> std::any.
>
>
>>
>>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>
>>>> I already wrote what I needed :) function<any(std::vector<any>)> is
>>>> simply blasphemous.
>>>>
>>>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>>>
>>>>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote=
:
>>>>>>
>>>>>> I believe that std::any should be made invokable, if an invokable
>>>>>> object is stored into it, such as a function pointer, method pointer=
, or a
>>>>>> functor (such as std::function<> and others). This would raise the l=
evel of
>>>>>> abstraction C++ offers to one comparable to scripting languages, whe=
re you
>>>>>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>>>>>
>>>>>
>>>>> Any is a polymorphic wrapper for any object modeling the
>>>>> CopyConstructible concept. Anything beyond that is out of scope. In f=
act
>>>>> any doesn't even provide equality or ordering, which would seem very =
basic.
>>>>>
>>>>> What you want is std::function (another polymorphic wrapper for types
>>>>> modeling the FunctionObject concept) . If you want fully dynamic beha=
vior
>>>>> (including runtime type checking of parameters), use
>>>>> function<any(std::vector<any>)> and wrap the stored function in an
>>>>> adaptor that does the unboxing of the parameters.
>>>>>
>>>>
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaY
>>> up5XegKF253kwet6TFZBjg%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2=
GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
>>> .
>>>
>> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/a6013d8d-73a6-4f40-
> bbc9-77e57123f68e%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73=
a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GF11CJTYNaKzZoLaoVv%2Bjo4NnaNWR7KXree-g-7o=
7%2BZbQ%40mail.gmail.com.

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

<div dir=3D"ltr">What you describe are workarounds. If you want to use a te=
mporary lambda, you won&#39;t be able to keep the type around. Maybe you do=
n&#39;t want to specify the function signature and so std::function is not =
appropriate.</div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"=
>2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr">&lt;<a=
 href=3D"mailto:gpderetta@gmail.com" target=3D"_blank">gpderetta@gmail.com<=
/a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span cl=
ass=3D"">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak =
wrote:</span><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-lef=
t:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D""><div =
dir=3D"ltr">Show us the actual (i.e. complete) example of why that be usefu=
l (and why you wouldn&#39;t just use `std::function&lt;void ()&gt;`, or the=
 somewhat proposed function_ref, for that).</div><br></span><span class=3D"=
"><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 12:10 =
PM janezz55 . &lt;<a rel=3D"nofollow">jane...@gmail.com</a>&gt; wrote:<br><=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Let&#39;s say you stor=
e a lambda object into std::any<div><br></div><div>std::any a =3D [](){};</=
div><div><br></div><div>How are you going to obtain the lambda object back?=
 AFAIK it&#39;s locked inside the any instance. If std::any had a mechanism=
 of invoking the stored object you could still &quot;reach&quot; it.</div><=
/div></blockquote></div></span></blockquote><div><br>any_cast. You have to =
keep the lambda type around of course. If you don&#39;t want to, wrap the l=
ambda in a std::function first before putting it in an std::any.<br>=C2=A0<=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div class=3D"gmail_quote"><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #=
ccc solid;padding-left:1ex"><div><br><div class=3D"gmail_quote"><span class=
=3D"">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr">&lt;<a rel=3D=
"nofollow">jane...@gmail.com</a>&gt;</span>:<br></span><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><span class=3D""><div dir=3D"ltr">I already wrote what I needed =
:) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; is simply blasphemous.<=
/div></span><span class=3D""><div><div><div><br><div class=3D"gmail_quote">=
2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr">&lt;<a =
rel=3D"nofollow">gpde...@gmail.com</a>&gt;</span>:<br><blockquote class=3D"=
gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-=
left:1ex"><div dir=3D"ltr">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a=
>jane...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote" style=3D"mar=
gin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">I believe that std::any should be made invokable, if an invokabl=
e object is stored into it, such as a function pointer, method pointer, or =
a functor (such as std::function&lt;&gt; and others). This would raise the =
level of abstraction C++ offers to one comparable to scripting languages, w=
here you can often invoke an arbitrary variable. I&#39;ve prepared 2 exampl=
es:</div></blockquote><div><br>Any is a polymorphic wrapper for any object =
modeling the CopyConstructible concept. Anything beyond that is out of scop=
e. In fact any doesn&#39;t even provide equality or ordering, which would s=
eem very basic. <br><br>What you want is std::function (another polymorphic=
 wrapper for types modeling the FunctionObject concept) . If you want fully=
 dynamic behavior (including runtime type checking of parameters), use func=
tion&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored function i=
n an adaptor that does the unboxing of the parameters.<br></div></div></blo=
ckquote></div><br></div>
</div></div></span></blockquote></div><br></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<span class=3D""><br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp=
..org/d/msgid/std-proposals<wbr>/CAO9E8GE2GR1GQRos5BCUJzLi5yaY<wbr>up5XegKF2=
53kwet6TFZBjg%40mail.<wbr>gmail.com</a>.<br>
</span></blockquote></div>
</blockquote></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/a601=
3d8d-73a6-4f40-<wbr>bbc9-77e57123f68e%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GF11CJTYNaKzZoLaoVv%2Bjo4NnaNWR=
7KXree-g-7o7%2BZbQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GF11CJT=
YNaKzZoLaoVv%2Bjo4NnaNWR7KXree-g-7o7%2BZbQ%40mail.gmail.com</a>.<br />

--001a11449ffcc898700549d21b92--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 12:59:34 +0100
Raw View
--001a11407f6e832e380549d24787
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

As for me being a type ducking proponent... std::any in various forms has
been around since 2001, I think. All the while until now you could assign a
function pointer or a member function pointer to it as well as copyable
function objects. It's nothing new. Adding the invocation feature would
simply be a natural development in my opinion.

2017-03-03 12:47 GMT+01:00 janezz55 . <janezz55@gmail.com>:

> What you describe are workarounds. If you want to use a temporary lambda,
> you won't be able to keep the type around. Maybe you don't want to specif=
y
> the function signature and so std::function is not appropriate.
>
> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>
>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>>>
>>> Show us the actual (i.e. complete) example of why that be useful (and
>>> why you wouldn't just use `std::function<void ()>`, or the somewhat
>>> proposed function_ref, for that).
>>>
>>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>>
>>>> Let's say you store a lambda object into std::any
>>>>
>>>> std::any a =3D [](){};
>>>>
>>>> How are you going to obtain the lambda object back? AFAIK it's locked
>>>> inside the any instance. If std::any had a mechanism of invoking the s=
tored
>>>> object you could still "reach" it.
>>>>
>>>
>> any_cast. You have to keep the lambda type around of course. If you don'=
t
>> want to, wrap the lambda in a std::function first before putting it in a=
n
>> std::any.
>>
>>
>>>
>>>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>>
>>>>> I already wrote what I needed :) function<any(std::vector<any>)> is
>>>>> simply blasphemous.
>>>>>
>>>>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>=
:
>>>>>
>>>>>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com
>>>>>> wrote:
>>>>>>>
>>>>>>> I believe that std::any should be made invokable, if an invokable
>>>>>>> object is stored into it, such as a function pointer, method pointe=
r, or a
>>>>>>> functor (such as std::function<> and others). This would raise the =
level of
>>>>>>> abstraction C++ offers to one comparable to scripting languages, wh=
ere you
>>>>>>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>>>>>>
>>>>>>
>>>>>> Any is a polymorphic wrapper for any object modeling the
>>>>>> CopyConstructible concept. Anything beyond that is out of scope. In =
fact
>>>>>> any doesn't even provide equality or ordering, which would seem very=
 basic.
>>>>>>
>>>>>> What you want is std::function (another polymorphic wrapper for type=
s
>>>>>> modeling the FunctionObject concept) . If you want fully dynamic beh=
avior
>>>>>> (including runtime type checking of parameters), use
>>>>>> function<any(std::vector<any>)> and wrap the stored function in an
>>>>>> adaptor that does the unboxing of the parameters.
>>>>>>
>>>>>
>>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "ISO C++ Standard - Future Proposals" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to std-proposal...@isocpp.org.
>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>> To view this discussion on the web visit https://groups.google.com/a/i=
s
>>>> ocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaY
>>>> up5XegKF253kwet6TFZBjg%40mail.gmail.com
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE=
2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>>>> .
>>>>
>>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/a6013d8d-73a6-4f40-bbc9-
>> 77e57123f68e%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-7=
3a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMT=
RwqPFAw%40mail.gmail.com.

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

<div dir=3D"ltr">As for me being a type ducking proponent... std::any in va=
rious forms has been around since 2001, I think. All the while until now yo=
u could assign a function pointer or a member function pointer to it as wel=
l as copyable function objects. It&#39;s nothing new. Adding the invocation=
 feature would simply be a natural development in my opinion.</div><div cla=
ss=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-03 12:47 GMT+01:0=
0 janezz55 . <span dir=3D"ltr">&lt;<a href=3D"mailto:janezz55@gmail.com" ta=
rget=3D"_blank">janezz55@gmail.com</a>&gt;</span>:<br><blockquote class=3D"=
gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-=
left:1ex"><div dir=3D"ltr">What you describe are workarounds. If you want t=
o use a temporary lambda, you won&#39;t be able to keep the type around. Ma=
ybe you don&#39;t want to specify the function signature and so std::functi=
on is not appropriate.</div><div class=3D"HOEnZb"><div class=3D"h5"><div cl=
ass=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-03 12:44 GMT+01:=
00 Giovanni Piero Deretta <span dir=3D"ltr">&lt;<a href=3D"mailto:gpderetta=
@gmail.com" target=3D"_blank">gpderetta@gmail.com</a>&gt;</span>:<br><block=
quote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><div dir=3D"ltr"><span>On Friday, March 3, 2017 at=
 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:</span><blockquote class=3D"gm=
ail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><span><div dir=3D"ltr">Show us the actual (i.e. complete) =
example of why that be useful (and why you wouldn&#39;t just use `std::func=
tion&lt;void ()&gt;`, or the somewhat proposed function_ref, for that).</di=
v><br></span><span><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar =
3, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow">jane...@gmail.com</a=
>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0=
 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Let&#=
39;s say you store a lambda object into std::any<div><br></div><div>std::an=
y a =3D [](){};</div><div><br></div><div>How are you going to obtain the la=
mbda object back? AFAIK it&#39;s locked inside the any instance. If std::an=
y had a mechanism of invoking the stored object you could still &quot;reach=
&quot; it.</div></div></blockquote></div></span></blockquote><div><br>any_c=
ast. You have to keep the lambda type around of course. If you don&#39;t wa=
nt to, wrap the lambda in a std::function first before putting it in an std=
::any.<br>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0;m=
argin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=3D=
"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div><br><div class=3D"gmail_q=
uote"><span>2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr">&lt;<a =
rel=3D"nofollow">jane...@gmail.com</a>&gt;</span>:<br></span><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><span><div dir=3D"ltr">I already wrote what I needed :) fu=
nction&lt;any(std::vector&lt;any&gt;)<wbr>&gt; is simply blasphemous.</div>=
</span><span><div><div><div><br><div class=3D"gmail_quote">2017-03-03 11:09=
 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr">&lt;<a rel=3D"nofollow"=
>gpde...@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a>jane...@gmail.c=
om</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-lef=
t:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I bel=
ieve that std::any should be made invokable, if an invokable object is stor=
ed into it, such as a function pointer, method pointer, or a functor (such =
as std::function&lt;&gt; and others). This would raise the level of abstrac=
tion C++ offers to one comparable to scripting languages, where you can oft=
en invoke an arbitrary variable. I&#39;ve prepared 2 examples:</div></block=
quote><div><br>Any is a polymorphic wrapper for any object modeling the Cop=
yConstructible concept. Anything beyond that is out of scope. In fact any d=
oesn&#39;t even provide equality or ordering, which would seem very basic. =
<br><br>What you want is std::function (another polymorphic wrapper for typ=
es modeling the FunctionObject concept) . If you want fully dynamic behavio=
r (including runtime type checking of parameters), use function&lt;any(std:=
:vector&lt;any&gt;)<wbr>&gt; and wrap the stored function in an adaptor tha=
t does the unboxing of the parameters.<br></div></div></blockquote></div><b=
r></div>
</div></div></span></blockquote></div><br></div><span>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<span><br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp=
..org/d/msgid/std-proposals<wbr>/CAO9E8GE2GR1GQRos5BCUJzLi5yaY<wbr>up5XegKF2=
53kwet6TFZBjg%40mail.<wbr>gmail.com</a>.<br>
</span></blockquote></div>
</blockquote></div><span>

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<wbr>/c=
JD8urBWN7c/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@isoc<wbr>pp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/a601=
3d8d-73a6-4f40-bbc9-<wbr>77e57123f68e%40isocpp.org</a>.<br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2B=
mqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com</a>.<br />

--001a11407f6e832e380549d24787--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 13:25:05 +0000
Raw View
--f403045e64840ab6d60549d37ca1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

You're proposing a feature for the sake of having a feature. Give us actual
use cases if you think that is not true.

Having a feature that no-one will use is not beneficial.

On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <janezz55@gmail.com> wrote:

> As for me being a type ducking proponent... std::any in various forms has
> been around since 2001, I think. All the while until now you could assign=
 a
> function pointer or a member function pointer to it as well as copyable
> function objects. It's nothing new. Adding the invocation feature would
> simply be a natural development in my opinion.
>
> 2017-03-03 12:47 GMT+01:00 janezz55 . <janezz55@gmail.com>:
>
> What you describe are workarounds. If you want to use a temporary lambda,
> you won't be able to keep the type around. Maybe you don't want to specif=
y
> the function signature and so std::function is not appropriate.
>
> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>
> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>
> Show us the actual (i.e. complete) example of why that be useful (and why
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>
> Let's say you store a lambda object into std::any
>
> std::any a =3D [](){};
>
> How are you going to obtain the lambda object back? AFAIK it's locked
> inside the any instance. If std::any had a mechanism of invoking the stor=
ed
> object you could still "reach" it.
>
>
> any_cast. You have to keep the lambda type around of course. If you don't
> want to, wrap the lambda in a std::function first before putting it in an
> std::any.
>
>
>
> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> I already wrote what I needed :) function<any(std::vector<any>)> is simpl=
y
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a funct=
or
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where yo=
u
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructibl=
e
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adapto=
r
> that does the unboxing of the parameters.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1=
GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR=
1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, 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/a6013d8d-73a=
6-4f40-bbc9-77e57123f68e%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73=
a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
>
>
> --
> 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/CAO9E8GEDs%2=
BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%=
2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLk=
M5Dqg%40mail.gmail.com.

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

<div dir=3D"ltr">You&#39;re proposing a feature for the sake of having a fe=
ature. Give us actual use cases if you think that is not true.<div><br></di=
v><div>Having a feature that no-one will use is not beneficial.</div></div>=
<br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 12:5=
9 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com">janezz55@gmail.co=
m</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin=
:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" c=
lass=3D"gmail_msg">As for me being a type ducking proponent... std::any in =
various forms has been around since 2001, I think. All the while until now =
you could assign a function pointer or a member function pointer to it as w=
ell as copyable function objects. It&#39;s nothing new. Adding the invocati=
on feature would simply be a natural development in my opinion.</div><div c=
lass=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div class=3D"gmail_=
quote gmail_msg">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=3D"ltr" cl=
ass=3D"gmail_msg">&lt;<a href=3D"mailto:janezz55@gmail.com" class=3D"gmail_=
msg" target=3D"_blank">janezz55@gmail.com</a>&gt;</span>:<br class=3D"gmail=
_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8e=
x;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"gm=
ail_msg">What you describe are workarounds. If you want to use a temporary =
lambda, you won&#39;t be able to keep the type around. Maybe you don&#39;t =
want to specify the function signature and so std::function is not appropri=
ate.</div><div class=3D"m_-3164430639174122232HOEnZb gmail_msg"><div class=
=3D"m_-3164430639174122232h5 gmail_msg"><div class=3D"gmail_extra gmail_msg=
"><br class=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg">2017-03-03 1=
2:44 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"gmail_msg"=
>&lt;<a href=3D"mailto:gpderetta@gmail.com" class=3D"gmail_msg" target=3D"_=
blank">gpderetta@gmail.com</a>&gt;</span>:<br class=3D"gmail_msg"><blockquo=
te class=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1=
px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg"><span =
class=3D"gmail_msg">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=
=82 Dominiak wrote:</span><blockquote class=3D"gmail_quote gmail_msg" style=
=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"=
><span class=3D"gmail_msg"><div dir=3D"ltr" class=3D"gmail_msg">Show us the=
 actual (i.e. complete) example of why that be useful (and why you wouldn&#=
39;t just use `std::function&lt;void ()&gt;`, or the somewhat proposed func=
tion_ref, for that).</div><br class=3D"gmail_msg"></span><span class=3D"gma=
il_msg"><div class=3D"gmail_quote gmail_msg"><div dir=3D"ltr" class=3D"gmai=
l_msg">On Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" c=
lass=3D"gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D"gmail_msg">=
</div><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8e=
x;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"gm=
ail_msg">Let&#39;s say you store a lambda object into std::any<div class=3D=
"gmail_msg"><br class=3D"gmail_msg"></div><div class=3D"gmail_msg">std::any=
 a =3D [](){};</div><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div>=
<div class=3D"gmail_msg">How are you going to obtain the lambda object back=
? AFAIK it&#39;s locked inside the any instance. If std::any had a mechanis=
m of invoking the stored object you could still &quot;reach&quot; it.</div>=
</div></blockquote></div></span></blockquote><div class=3D"gmail_msg"><br c=
lass=3D"gmail_msg">any_cast. You have to keep the lambda type around of cou=
rse. If you don&#39;t want to, wrap the lambda in a std::function first bef=
ore putting it in an std::any.<br class=3D"gmail_msg">=C2=A0</div><blockquo=
te class=3D"gmail_quote gmail_msg" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div class=3D"gmail_quote gmail_ms=
g"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div class=3D"gmail_msg"><br cl=
ass=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg"><span class=3D"gmail=
_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"gmai=
l_msg">&lt;<a rel=3D"nofollow" class=3D"gmail_msg">jane...@gmail.com</a>&gt=
;</span>:<br class=3D"gmail_msg"></span><blockquote class=3D"gmail_quote gm=
ail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left=
:1ex"><span class=3D"gmail_msg"><div dir=3D"ltr" class=3D"gmail_msg">I alre=
ady wrote what I needed :) function&lt;any(std::vector&lt;any&gt;)&gt; is s=
imply blasphemous.</div></span><span class=3D"gmail_msg"><div class=3D"gmai=
l_msg"><div class=3D"gmail_msg"><div class=3D"gmail_msg"><br class=3D"gmail=
_msg"><div class=3D"gmail_quote gmail_msg">2017-03-03 11:09 GMT+01:00 Giova=
nni Piero Deretta <span dir=3D"ltr" class=3D"gmail_msg">&lt;<a rel=3D"nofol=
low" class=3D"gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"gmai=
l_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"g=
mail_msg">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a class=3D"gmail_m=
sg">jane...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote gmail_msg"=
 style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-lef=
t:1ex"><div dir=3D"ltr" class=3D"gmail_msg">I believe that std::any should =
be made invokable, if an invokable object is stored into it, such as a func=
tion pointer, method pointer, or a functor (such as std::function&lt;&gt; a=
nd others). This would raise the level of abstraction C++ offers to one com=
parable to scripting languages, where you can often invoke an arbitrary var=
iable. I&#39;ve prepared 2 examples:</div></blockquote><div class=3D"gmail_=
msg"><br class=3D"gmail_msg">Any is a polymorphic wrapper for any object mo=
deling the CopyConstructible concept. Anything beyond that is out of scope.=
 In fact any doesn&#39;t even provide equality or ordering, which would see=
m very basic. <br class=3D"gmail_msg"><br class=3D"gmail_msg">What you want=
 is std::function (another polymorphic wrapper for types modeling the Funct=
ionObject concept) . If you want fully dynamic behavior (including runtime =
type checking of parameters), use function&lt;any(std::vector&lt;any&gt;)&g=
t; and wrap the stored function in an adaptor that does the unboxing of the=
 parameters.<br class=3D"gmail_msg"></div></div></blockquote></div><br clas=
s=3D"gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"gmail_msg"></div><span c=
lass=3D"gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"gmail_msg">std-proposal...@isocpp.org<=
/a>.<br class=3D"gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"gmail_msg=
">std-pr...@isocpp.org</a>.<span class=3D"gmail_msg"><br class=3D"gmail_msg=
">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"gmail_msg" target=3D"_blank">https://groups.goog=
le.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5X=
egKF253kwet6TFZBjg%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</span></blockquote></div>
</blockquote></div><span class=3D"gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"gmail_=
msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-p=
roposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"gmail_msg" target=
=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"gmail_msg=
">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg"></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" class=3D"gmail_msg=
" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-prop=
osals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org</a>.<br class=3D"gm=
ail_msg">
</blockquote></div><br class=3D"gmail_msg"></div>
</div></div></blockquote></div><br class=3D"gmail_msg"></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyG=
MTRwqPFAw%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3=
DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com</a>.<br />

--f403045e64840ab6d60549d37ca1--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 14:31:41 +0100
Raw View
--001a11407f6ef3c2730549d390ec
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

We don't need C++, ASM is sufficient, or an arbitrary other computer
language. 640k were sufficient at some point in time. I haven't heard a
single rational argument from you. I'd hate to have you as a boss.

2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> You're proposing a feature for the sake of having a feature. Give us
> actual use cases if you think that is not true.
>
> Having a feature that no-one will use is not beneficial.
>
> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <janezz55@gmail.com> wrote:
>
>> As for me being a type ducking proponent... std::any in various forms ha=
s
>> been around since 2001, I think. All the while until now you could assig=
n a
>> function pointer or a member function pointer to it as well as copyable
>> function objects. It's nothing new. Adding the invocation feature would
>> simply be a natural development in my opinion.
>>
>> 2017-03-03 12:47 GMT+01:00 janezz55 . <janezz55@gmail.com>:
>>
>> What you describe are workarounds. If you want to use a temporary lambda=
,
>> you won't be able to keep the type around. Maybe you don't want to speci=
fy
>> the function signature and so std::function is not appropriate.
>>
>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>>
>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>>
>> Show us the actual (i.e. complete) example of why that be useful (and wh=
y
>> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
>> function_ref, for that).
>>
>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> Let's say you store a lambda object into std::any
>>
>> std::any a =3D [](){};
>>
>> How are you going to obtain the lambda object back? AFAIK it's locked
>> inside the any instance. If std::any had a mechanism of invoking the sto=
red
>> object you could still "reach" it.
>>
>>
>> any_cast. You have to keep the lambda type around of course. If you don'=
t
>> want to, wrap the lambda in a std::function first before putting it in a=
n
>> std::any.
>>
>>
>>
>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> I already wrote what I needed :) function<any(std::vector<any>)> is
>> simply blasphemous.
>>
>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very bas=
ic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavio=
r
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYu
>> p5XegKF253kwet6TFZBjg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2G=
R1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/a6013d8d-73a6-4f40-
>> bbc9-77e57123f68e%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-7=
3a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%
>> 2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs=
%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAPCFJdSFV30P%
> 3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV3=
0P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCW=
vRS4A%40mail.gmail.com.

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

<div dir=3D"ltr">We don&#39;t need C++, ASM is sufficient, or an arbitrary =
other computer language. 640k were sufficient at some point in time. I have=
n&#39;t heard a single rational argument from you. I&#39;d hate to have you=
 as a boss.</div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">=
2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a hr=
ef=3D"mailto:griwes@griwes.info" target=3D"_blank">griwes@griwes.info</a>&g=
t;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">You&#39;re pr=
oposing a feature for the sake of having a feature. Give us actual use case=
s if you think that is not true.<div><br></div><div>Having a feature that n=
o-one will use is not beneficial.</div></div><br><div class=3D"gmail_quote"=
><div dir=3D"ltr">On Fri, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a href=3D=
"mailto:janezz55@gmail.com" target=3D"_blank">janezz55@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" class=3D"m_-6=
192188331343281072gmail_msg">As for me being a type ducking proponent... st=
d::any in various forms has been around since 2001, I think. All the while =
until now you could assign a function pointer or a member function pointer =
to it as well as copyable function objects. It&#39;s nothing new. Adding th=
e invocation feature would simply be a natural development in my opinion.</=
div><div class=3D"gmail_extra m_-6192188331343281072gmail_msg"><br class=3D=
"m_-6192188331343281072gmail_msg"><div class=3D"gmail_quote m_-619218833134=
3281072gmail_msg">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=3D"ltr" c=
lass=3D"m_-6192188331343281072gmail_msg">&lt;<a href=3D"mailto:janezz55@gma=
il.com" class=3D"m_-6192188331343281072gmail_msg" target=3D"_blank">janezz5=
5@gmail.com</a>&gt;</span>:<br class=3D"m_-6192188331343281072gmail_msg"><b=
lockquote class=3D"gmail_quote m_-6192188331343281072gmail_msg" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r" class=3D"m_-6192188331343281072gmail_msg">What you describe are workarou=
nds. If you want to use a temporary lambda, you won&#39;t be able to keep t=
he type around. Maybe you don&#39;t want to specify the function signature =
and so std::function is not appropriate.</div><div class=3D"m_-619218833134=
3281072m_-3164430639174122232HOEnZb m_-6192188331343281072gmail_msg"><div c=
lass=3D"m_-6192188331343281072m_-3164430639174122232h5 m_-61921883313432810=
72gmail_msg"><div class=3D"gmail_extra m_-6192188331343281072gmail_msg"><br=
 class=3D"m_-6192188331343281072gmail_msg"><div class=3D"gmail_quote m_-619=
2188331343281072gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Derett=
a <span dir=3D"ltr" class=3D"m_-6192188331343281072gmail_msg">&lt;<a href=
=3D"mailto:gpderetta@gmail.com" class=3D"m_-6192188331343281072gmail_msg" t=
arget=3D"_blank">gpderetta@gmail.com</a>&gt;</span>:<br class=3D"m_-6192188=
331343281072gmail_msg"><blockquote class=3D"gmail_quote m_-6192188331343281=
072gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><div dir=3D"ltr" class=3D"m_-6192188331343281072gmail_msg"><span=
 class=3D"m_-6192188331343281072gmail_msg">On Friday, March 3, 2017 at 11:1=
3:02 AM UTC, Micha=C5=82 Dominiak wrote:</span><blockquote class=3D"gmail_q=
uote m_-6192188331343281072gmail_msg" style=3D"margin:0;margin-left:0.8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_-6192188331343=
281072gmail_msg"><div dir=3D"ltr" class=3D"m_-6192188331343281072gmail_msg"=
>Show us the actual (i.e. complete) example of why that be useful (and why =
you wouldn&#39;t just use `std::function&lt;void ()&gt;`, or the somewhat p=
roposed function_ref, for that).</div><br class=3D"m_-6192188331343281072gm=
ail_msg"></span><span class=3D"m_-6192188331343281072gmail_msg"><div class=
=3D"gmail_quote m_-6192188331343281072gmail_msg"><div dir=3D"ltr" class=3D"=
m_-6192188331343281072gmail_msg">On Fri, Mar 3, 2017 at 12:10 PM janezz55 .=
 &lt;<a rel=3D"nofollow" class=3D"m_-6192188331343281072gmail_msg">jane...@=
gmail.com</a>&gt; wrote:<br class=3D"m_-6192188331343281072gmail_msg"></div=
><blockquote class=3D"gmail_quote m_-6192188331343281072gmail_msg" style=3D=
"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr" class=3D"m_-6192188331343281072gmail_msg">Let&#39;s say you store a l=
ambda object into std::any<div class=3D"m_-6192188331343281072gmail_msg"><b=
r class=3D"m_-6192188331343281072gmail_msg"></div><div class=3D"m_-61921883=
31343281072gmail_msg">std::any a =3D [](){};</div><div class=3D"m_-61921883=
31343281072gmail_msg"><br class=3D"m_-6192188331343281072gmail_msg"></div><=
div class=3D"m_-6192188331343281072gmail_msg">How are you going to obtain t=
he lambda object back? AFAIK it&#39;s locked inside the any instance. If st=
d::any had a mechanism of invoking the stored object you could still &quot;=
reach&quot; it.</div></div></blockquote></div></span></blockquote><div clas=
s=3D"m_-6192188331343281072gmail_msg"><br class=3D"m_-6192188331343281072gm=
ail_msg">any_cast. You have to keep the lambda type around of course. If yo=
u don&#39;t want to, wrap the lambda in a std::function first before puttin=
g it in an std::any.<br class=3D"m_-6192188331343281072gmail_msg">=C2=A0</d=
iv><blockquote class=3D"gmail_quote m_-6192188331343281072gmail_msg" style=
=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div class=3D"gmail_quote m_-6192188331343281072gmail_msg"><blockquote cla=
ss=3D"gmail_quote m_-6192188331343281072gmail_msg" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div class=3D"m_-6192188331=
343281072gmail_msg"><br class=3D"m_-6192188331343281072gmail_msg"><div clas=
s=3D"gmail_quote m_-6192188331343281072gmail_msg"><span class=3D"m_-6192188=
331343281072gmail_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"l=
tr" class=3D"m_-6192188331343281072gmail_msg">&lt;<a rel=3D"nofollow" class=
=3D"m_-6192188331343281072gmail_msg">jane...@gmail.com</a>&gt;</span>:<br c=
lass=3D"m_-6192188331343281072gmail_msg"></span><blockquote class=3D"gmail_=
quote m_-6192188331343281072gmail_msg" style=3D"margin:0 0 0 .8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><span class=3D"m_-6192188331343281072gm=
ail_msg"><div dir=3D"ltr" class=3D"m_-6192188331343281072gmail_msg">I alrea=
dy wrote what I needed :) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; =
is simply blasphemous.</div></span><span class=3D"m_-6192188331343281072gma=
il_msg"><div class=3D"m_-6192188331343281072gmail_msg"><div class=3D"m_-619=
2188331343281072gmail_msg"><div class=3D"m_-6192188331343281072gmail_msg"><=
br class=3D"m_-6192188331343281072gmail_msg"><div class=3D"gmail_quote m_-6=
192188331343281072gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero Dere=
tta <span dir=3D"ltr" class=3D"m_-6192188331343281072gmail_msg">&lt;<a rel=
=3D"nofollow" class=3D"m_-6192188331343281072gmail_msg">gpde...@gmail.com</=
a>&gt;</span>:<br class=3D"m_-6192188331343281072gmail_msg"><blockquote cla=
ss=3D"gmail_quote m_-6192188331343281072gmail_msg" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m=
_-6192188331343281072gmail_msg">On Thursday, March 2, 2017 at 6:26:01 PM UT=
C, <a class=3D"m_-6192188331343281072gmail_msg">jane...@gmail.com</a> wrote=
:<blockquote class=3D"gmail_quote m_-6192188331343281072gmail_msg" style=3D=
"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><d=
iv dir=3D"ltr" class=3D"m_-6192188331343281072gmail_msg">I believe that std=
::any should be made invokable, if an invokable object is stored into it, s=
uch as a function pointer, method pointer, or a functor (such as std::funct=
ion&lt;&gt; and others). This would raise the level of abstraction C++ offe=
rs to one comparable to scripting languages, where you can often invoke an =
arbitrary variable. I&#39;ve prepared 2 examples:</div></blockquote><div cl=
ass=3D"m_-6192188331343281072gmail_msg"><br class=3D"m_-6192188331343281072=
gmail_msg">Any is a polymorphic wrapper for any object modeling the CopyCon=
structible concept. Anything beyond that is out of scope. In fact any doesn=
&#39;t even provide equality or ordering, which would seem very basic. <br =
class=3D"m_-6192188331343281072gmail_msg"><br class=3D"m_-61921883313432810=
72gmail_msg">What you want is std::function (another polymorphic wrapper fo=
r types modeling the FunctionObject concept) . If you want fully dynamic be=
havior (including runtime type checking of parameters), use function&lt;any=
(std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored function in an adapto=
r that does the unboxing of the parameters.<br class=3D"m_-6192188331343281=
072gmail_msg"></div></div></blockquote></div><br class=3D"m_-61921883313432=
81072gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_-6192188331343281072gm=
ail_msg"></div><span class=3D"m_-6192188331343281072gmail_msg">

<p class=3D"m_-6192188331343281072gmail_msg"></p>

-- <br class=3D"m_-6192188331343281072gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-619218=
8331343281072gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_-6192188331343281072gmail_msg">std-p=
roposal...@isocpp.org</a>.<br class=3D"m_-6192188331343281072gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-619218=
8331343281072gmail_msg">std-pr...@isocpp.org</a>.<span class=3D"m_-61921883=
31343281072gmail_msg"><br class=3D"m_-6192188331343281072gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_-6192188331343281072gmail_msg" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<=
wbr>CAO9E8GE2GR1GQRos5BCUJzLi5yaYu<wbr>p5XegKF253kwet6TFZBjg%40mail.<wbr>gm=
ail.com</a>.<br class=3D"m_-6192188331343281072gmail_msg">
</span></blockquote></div>
</blockquote></div><span class=3D"m_-6192188331343281072gmail_msg">

<p class=3D"m_-6192188331343281072gmail_msg"></p>

-- <br class=3D"m_-6192188331343281072gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_-6192188331343281072gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_-619=
2188331343281072gmail_msg" target=3D"_blank">https://groups.google.com/a/<w=
br>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<=
br class=3D"m_-6192188331343281072gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_-61921883313432=
81072gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<wbr>isocpp.org=
</a>.<br class=3D"m_-6192188331343281072gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-6192188331343281072gmail_msg" target=3D"_blank">std-propo=
sals@isocpp.org</a>.<br class=3D"m_-6192188331343281072gmail_msg"></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" class=3D"m_-619218=
8331343281072gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr>=
isocpp.org/d/msgid/std-<wbr>proposals/a6013d8d-73a6-4f40-<wbr>bbc9-77e57123=
f68e%40isocpp.org</a><wbr>.<br class=3D"m_-6192188331343281072gmail_msg">
</blockquote></div><br class=3D"m_-6192188331343281072gmail_msg"></div><spa=
n class=3D"HOEnZb"><font color=3D"#888888">
</font></span></div></div></blockquote></div><span class=3D"HOEnZb"><font c=
olor=3D"#888888"><br class=3D"m_-6192188331343281072gmail_msg"></font></spa=
n></div><span class=3D"HOEnZb"><font color=3D"#888888">

<p class=3D"m_-6192188331343281072gmail_msg"></p>

-- <br class=3D"m_-6192188331343281072gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-619218=
8331343281072gmail_msg">
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" class=3D"m_=
-6192188331343281072gmail_msg" target=3D"_blank">std-proposals+unsubscribe@=
<wbr>isocpp.org</a>.<br class=3D"m_-6192188331343281072gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-6192188331343281072gmail_msg" target=3D"_blank">std-propo=
sals@isocpp.org</a>.<br class=3D"m_-6192188331343281072gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_-6192188331343281072gmail_msg" target=3D"_blank">https://gr=
oups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GEDs%<wb=
r>2BmqoyCxakK0v-hKoWcBYJE%<wbr>2B9rdXuNUyGMTRwqPFAw%40mail.<wbr>gmail.com</=
a>.<br class=3D"m_-6192188331343281072gmail_msg">
</font></span></blockquote></div><span class=3D"HOEnZb"><font color=3D"#888=
888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/st=
d-<wbr>proposals/CAPCFJdSFV30P%<wbr>3DdEQoooHcn05s6WqBiaV4XpyuQY4P<wbr>3jLk=
M5Dqg%40mail.gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbp=
VLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com</a>.<br />

--001a11407f6ef3c2730549d390ec--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 13:46:09 +0000
Raw View
--001a1148af464225cd0549d3c517
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

You've asked for a feature, and yet you can't produce an example of how
that feature would be useful. This is the rational argument: we don't need
features that don't have use cases.

Do show us examples of how this is useful and we might reconsider this
feature. Plain and simple like that. Throwing logical fallacies around
won't change it.

On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <janezz55@gmail.com> wrote:

> We don't need C++, ASM is sufficient, or an arbitrary other computer
> language. 640k were sufficient at some point in time. I haven't heard a
> single rational argument from you. I'd hate to have you as a boss.
>
> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>
> You're proposing a feature for the sake of having a feature. Give us
> actual use cases if you think that is not true.
>
> Having a feature that no-one will use is not beneficial.
>
> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <janezz55@gmail.com> wrote:
>
> As for me being a type ducking proponent... std::any in various forms has
> been around since 2001, I think. All the while until now you could assign=
 a
> function pointer or a member function pointer to it as well as copyable
> function objects. It's nothing new. Adding the invocation feature would
> simply be a natural development in my opinion.
>
> 2017-03-03 12:47 GMT+01:00 janezz55 . <janezz55@gmail.com>:
>
> What you describe are workarounds. If you want to use a temporary lambda,
> you won't be able to keep the type around. Maybe you don't want to specif=
y
> the function signature and so std::function is not appropriate.
>
> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>
> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>
> Show us the actual (i.e. complete) example of why that be useful (and why
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>
> Let's say you store a lambda object into std::any
>
> std::any a =3D [](){};
>
> How are you going to obtain the lambda object back? AFAIK it's locked
> inside the any instance. If std::any had a mechanism of invoking the stor=
ed
> object you could still "reach" it.
>
>
> any_cast. You have to keep the lambda type around of course. If you don't
> want to, wrap the lambda in a std::function first before putting it in an
> std::any.
>
>
>
> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> I already wrote what I needed :) function<any(std::vector<any>)> is simpl=
y
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a funct=
or
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where yo=
u
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructibl=
e
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adapto=
r
> that does the unboxing of the parameters.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1=
GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR=
1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, 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/a6013d8d-73a=
6-4f40-bbc9-77e57123f68e%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73=
a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
>
>
> --
> 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/CAO9E8GEDs%2=
BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%=
2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, 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/CAPCFJdSFV30=
P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV3=
0P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
>
> --
> 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/CAO9E8GHrHjy=
kbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHj=
ykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMg=
O-A%40mail.gmail.com.

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

<div dir=3D"ltr">You&#39;ve asked for a feature, and yet you can&#39;t prod=
uce an example of how that feature would be useful. This is the rational ar=
gument: we don&#39;t need features that don&#39;t have use cases.<div><br><=
/div><div>Do show us examples of how this is useful and we might reconsider=
 this feature. Plain and simple like that. Throwing logical fallacies aroun=
d won&#39;t change it.</div></div><br><div class=3D"gmail_quote"><div dir=
=3D"ltr">On Fri, Mar 3, 2017 at 2:31 PM janezz55 . &lt;<a href=3D"mailto:ja=
nezz55@gmail.com">janezz55@gmail.com</a>&gt; wrote:<br></div><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">We don&#39;t need C++=
, ASM is sufficient, or an arbitrary other computer language. 640k were suf=
ficient at some point in time. I haven&#39;t heard a single rational argume=
nt from you. I&#39;d hate to have you as a boss.</div><div class=3D"gmail_e=
xtra gmail_msg"><br class=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg=
"></div></div><div class=3D"gmail_extra gmail_msg"><div class=3D"gmail_quot=
e gmail_msg">2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"l=
tr" class=3D"gmail_msg">&lt;<a href=3D"mailto:griwes@griwes.info" class=3D"=
gmail_msg" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br class=3D=
"gmail_msg"></div></div><div class=3D"gmail_extra gmail_msg"><div class=3D"=
gmail_quote gmail_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D=
"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr" class=3D"gmail_msg">You&#39;re proposing a feature for the sake of ha=
ving a feature. Give us actual use cases if you think that is not true.<div=
 class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div class=3D"gmail_msg"=
>Having a feature that no-one will use is not beneficial.</div></div><br cl=
ass=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg"><div dir=3D"ltr" cla=
ss=3D"gmail_msg">On Fri, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a href=3D"=
mailto:janezz55@gmail.com" class=3D"gmail_msg" target=3D"_blank">janezz55@g=
mail.com</a>&gt; wrote:<br class=3D"gmail_msg"></div><blockquote class=3D"g=
mail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div dir=3D"ltr" class=3D"m_6041256147412462700m_-619218=
8331343281072gmail_msg gmail_msg">As for me being a type ducking proponent.=
... std::any in various forms has been around since 2001, I think. All the w=
hile until now you could assign a function pointer or a member function poi=
nter to it as well as copyable function objects. It&#39;s nothing new. Addi=
ng the invocation feature would simply be a natural development in my opini=
on.</div><div class=3D"gmail_extra m_6041256147412462700m_-6192188331343281=
072gmail_msg gmail_msg"><br class=3D"m_6041256147412462700m_-61921883313432=
81072gmail_msg gmail_msg"><div class=3D"gmail_quote m_6041256147412462700m_=
-6192188331343281072gmail_msg gmail_msg">2017-03-03 12:47 GMT+01:00 janezz5=
5 . <span dir=3D"ltr" class=3D"m_6041256147412462700m_-6192188331343281072g=
mail_msg gmail_msg">&lt;<a href=3D"mailto:janezz55@gmail.com" class=3D"m_60=
41256147412462700m_-6192188331343281072gmail_msg gmail_msg" target=3D"_blan=
k">janezz55@gmail.com</a>&gt;</span>:<br class=3D"m_6041256147412462700m_-6=
192188331343281072gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_6=
041256147412462700m_-6192188331343281072gmail_msg gmail_msg" style=3D"margi=
n:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" =
class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg">Wh=
at you describe are workarounds. If you want to use a temporary lambda, you=
 won&#39;t be able to keep the type around. Maybe you don&#39;t want to spe=
cify the function signature and so std::function is not appropriate.</div><=
div class=3D"m_6041256147412462700m_-6192188331343281072m_-3164430639174122=
232HOEnZb m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"><=
div class=3D"m_6041256147412462700m_-6192188331343281072m_-3164430639174122=
232h5 m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"><div =
class=3D"gmail_extra m_6041256147412462700m_-6192188331343281072gmail_msg g=
mail_msg"><br class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg=
 gmail_msg"><div class=3D"gmail_quote m_6041256147412462700m_-6192188331343=
281072gmail_msg gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Derett=
a <span dir=3D"ltr" class=3D"m_6041256147412462700m_-6192188331343281072gma=
il_msg gmail_msg">&lt;<a href=3D"mailto:gpderetta@gmail.com" class=3D"m_604=
1256147412462700m_-6192188331343281072gmail_msg gmail_msg" target=3D"_blank=
">gpderetta@gmail.com</a>&gt;</span>:<br class=3D"m_6041256147412462700m_-6=
192188331343281072gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_6=
041256147412462700m_-6192188331343281072gmail_msg gmail_msg" style=3D"margi=
n:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" =
class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"><s=
pan class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg=
">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:<=
/span><blockquote class=3D"gmail_quote m_6041256147412462700m_-619218833134=
3281072gmail_msg gmail_msg" style=3D"margin:0;margin-left:0.8ex;border-left=
:1px #ccc solid;padding-left:1ex"><span class=3D"m_6041256147412462700m_-61=
92188331343281072gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_604125614=
7412462700m_-6192188331343281072gmail_msg gmail_msg">Show us the actual (i.=
e. complete) example of why that be useful (and why you wouldn&#39;t just u=
se `std::function&lt;void ()&gt;`, or the somewhat proposed function_ref, f=
or that).</div><br class=3D"m_6041256147412462700m_-6192188331343281072gmai=
l_msg gmail_msg"></span><span class=3D"m_6041256147412462700m_-619218833134=
3281072gmail_msg gmail_msg"><div class=3D"gmail_quote m_6041256147412462700=
m_-6192188331343281072gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_6041=
256147412462700m_-6192188331343281072gmail_msg gmail_msg">On Fri, Mar 3, 20=
17 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_60412561474124=
62700m_-6192188331343281072gmail_msg gmail_msg">jane...@gmail.com</a>&gt; w=
rote:<br class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmai=
l_msg"></div><blockquote class=3D"gmail_quote m_6041256147412462700m_-61921=
88331343281072gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1=
px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_604125614741246=
2700m_-6192188331343281072gmail_msg gmail_msg">Let&#39;s say you store a la=
mbda object into std::any<div class=3D"m_6041256147412462700m_-619218833134=
3281072gmail_msg gmail_msg"><br class=3D"m_6041256147412462700m_-6192188331=
343281072gmail_msg gmail_msg"></div><div class=3D"m_6041256147412462700m_-6=
192188331343281072gmail_msg gmail_msg">std::any a =3D [](){};</div><div cla=
ss=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"><br c=
lass=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"></d=
iv><div class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail=
_msg">How are you going to obtain the lambda object back? AFAIK it&#39;s lo=
cked inside the any instance. If std::any had a mechanism of invoking the s=
tored object you could still &quot;reach&quot; it.</div></div></blockquote>=
</div></span></blockquote><div class=3D"m_6041256147412462700m_-61921883313=
43281072gmail_msg gmail_msg"><br class=3D"m_6041256147412462700m_-619218833=
1343281072gmail_msg gmail_msg">any_cast. You have to keep the lambda type a=
round of course. If you don&#39;t want to, wrap the lambda in a std::functi=
on first before putting it in an std::any.<br class=3D"m_604125614741246270=
0m_-6192188331343281072gmail_msg gmail_msg">=C2=A0</div><blockquote class=
=3D"gmail_quote m_6041256147412462700m_-6192188331343281072gmail_msg gmail_=
msg" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding=
-left:1ex"><div class=3D"gmail_quote m_6041256147412462700m_-61921883313432=
81072gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_60412561474124=
62700m_-6192188331343281072gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div class=3D"m_60412561474124=
62700m_-6192188331343281072gmail_msg gmail_msg"><br class=3D"m_604125614741=
2462700m_-6192188331343281072gmail_msg gmail_msg"><div class=3D"gmail_quote=
 m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"><span clas=
s=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg">2017-0=
3-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"m_60412561474124=
62700m_-6192188331343281072gmail_msg gmail_msg">&lt;<a rel=3D"nofollow" cla=
ss=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg">jane.=
...@gmail.com</a>&gt;</span>:<br class=3D"m_6041256147412462700m_-6192188331=
343281072gmail_msg gmail_msg"></span><blockquote class=3D"gmail_quote m_604=
1256147412462700m_-6192188331343281072gmail_msg gmail_msg" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_60=
41256147412462700m_-6192188331343281072gmail_msg gmail_msg"><div dir=3D"ltr=
" class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg">=
I already wrote what I needed :) function&lt;any(std::vector&lt;any&gt;)&gt=
; is simply blasphemous.</div></span><span class=3D"m_6041256147412462700m_=
-6192188331343281072gmail_msg gmail_msg"><div class=3D"m_604125614741246270=
0m_-6192188331343281072gmail_msg gmail_msg"><div class=3D"m_604125614741246=
2700m_-6192188331343281072gmail_msg gmail_msg"><div class=3D"m_604125614741=
2462700m_-6192188331343281072gmail_msg gmail_msg"><br class=3D"m_6041256147=
412462700m_-6192188331343281072gmail_msg gmail_msg"><div class=3D"gmail_quo=
te m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg">2017-03-=
03 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"m_6041=
256147412462700m_-6192188331343281072gmail_msg gmail_msg">&lt;<a rel=3D"nof=
ollow" class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_=
msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"m_6041256147412462700m_-=
6192188331343281072gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_=
6041256147412462700m_-6192188331343281072gmail_msg gmail_msg" style=3D"marg=
in:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"=
 class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg">O=
n Thursday, March 2, 2017 at 6:26:01 PM UTC, <a class=3D"m_6041256147412462=
700m_-6192188331343281072gmail_msg gmail_msg">jane...@gmail.com</a> wrote:<=
blockquote class=3D"gmail_quote m_6041256147412462700m_-6192188331343281072=
gmail_msg gmail_msg" style=3D"margin:0;margin-left:0.8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_6041256147412462700m=
_-6192188331343281072gmail_msg gmail_msg">I believe that std::any should be=
 made invokable, if an invokable object is stored into it, such as a functi=
on pointer, method pointer, or a functor (such as std::function&lt;&gt; and=
 others). This would raise the level of abstraction C++ offers to one compa=
rable to scripting languages, where you can often invoke an arbitrary varia=
ble. I&#39;ve prepared 2 examples:</div></blockquote><div class=3D"m_604125=
6147412462700m_-6192188331343281072gmail_msg gmail_msg"><br class=3D"m_6041=
256147412462700m_-6192188331343281072gmail_msg gmail_msg">Any is a polymorp=
hic wrapper for any object modeling the CopyConstructible concept. Anything=
 beyond that is out of scope. In fact any doesn&#39;t even provide equality=
 or ordering, which would seem very basic. <br class=3D"m_60412561474124627=
00m_-6192188331343281072gmail_msg gmail_msg"><br class=3D"m_604125614741246=
2700m_-6192188331343281072gmail_msg gmail_msg">What you want is std::functi=
on (another polymorphic wrapper for types modeling the FunctionObject conce=
pt) . If you want fully dynamic behavior (including runtime type checking o=
f parameters), use function&lt;any(std::vector&lt;any&gt;)&gt; and wrap the=
 stored function in an adaptor that does the unboxing of the parameters.<br=
 class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"><=
/div></div></blockquote></div><br class=3D"m_6041256147412462700m_-61921883=
31343281072gmail_msg gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_6041256147412462700m_-=
6192188331343281072gmail_msg gmail_msg"></div><span class=3D"m_604125614741=
2462700m_-6192188331343281072gmail_msg gmail_msg">

<p class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_=
msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_6041256=
147412462700m_-6192188331343281072gmail_msg gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_6041256147412462700m_-61921883313432=
81072gmail_msg gmail_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_604=
1256147412462700m_-6192188331343281072gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_6041256=
147412462700m_-6192188331343281072gmail_msg gmail_msg">std-pr...@isocpp.org=
</a>.<span class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gm=
ail_msg"><br class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg =
gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_6041256147412462700m_-6192188331343281072gmail=
_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/=
msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40m=
ail.gmail.com</a>.<br class=3D"m_6041256147412462700m_-6192188331343281072g=
mail_msg gmail_msg">
</span></blockquote></div>
</blockquote></div><span class=3D"m_6041256147412462700m_-61921883313432810=
72gmail_msg gmail_msg">

<p class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_=
msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_6041=
256147412462700m_-6192188331343281072gmail_msg gmail_msg" target=3D"_blank"=
>https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/u=
nsubscribe</a>.<br class=3D"m_6041256147412462700m_-6192188331343281072gmai=
l_msg gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_604125614741246=
2700m_-6192188331343281072gmail_msg gmail_msg" target=3D"_blank">std-propos=
als+unsubscribe@isocpp.org</a>.<br class=3D"m_6041256147412462700m_-6192188=
331343281072gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_m=
sg" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_604125614=
7412462700m_-6192188331343281072gmail_msg gmail_msg"></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" class=3D"m_6041256=
147412462700m_-6192188331343281072gmail_msg gmail_msg" target=3D"_blank">ht=
tps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f=
40-bbc9-77e57123f68e%40isocpp.org</a>.<br class=3D"m_6041256147412462700m_-=
6192188331343281072gmail_msg gmail_msg">
</blockquote></div><br class=3D"m_6041256147412462700m_-6192188331343281072=
gmail_msg gmail_msg"></div><span class=3D"m_6041256147412462700HOEnZb gmail=
_msg"><font color=3D"#888888" class=3D"gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_6041256147412=
462700HOEnZb gmail_msg"><font color=3D"#888888" class=3D"gmail_msg"><br cla=
ss=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"></fon=
t></span></div><span class=3D"m_6041256147412462700HOEnZb gmail_msg"><font =
color=3D"#888888" class=3D"gmail_msg">

<p class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_=
msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_6041256=
147412462700m_-6192188331343281072gmail_msg gmail_msg">
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" class=3D"m_=
6041256147412462700m_-6192188331343281072gmail_msg gmail_msg" target=3D"_bl=
ank">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"m_60412561474124=
62700m_-6192188331343281072gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_m=
sg" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_604125614=
7412462700m_-6192188331343281072gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg gmail_ms=
g" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-pro=
posals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail=
..com</a>.<br class=3D"m_6041256147412462700m_-6192188331343281072gmail_msg =
gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=
=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex"><span class=3D"m_6041256147412462700HOEnZb gmail_ms=
g"><font color=3D"#888888" class=3D"gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"gmail_=
msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-p=
roposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"gmail_msg" target=
=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"gmail_msg=
">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg"></font></span></blockquote></div></div><div class=3D"=
gmail_extra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote cla=
ss=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #cc=
c solid;padding-left:1ex"><span class=3D"m_6041256147412462700HOEnZb gmail_=
msg"><font color=3D"#888888" class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLk=
M5Dqg%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</font></span></blockquote></div><br class=3D"gmail_msg"></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCW=
vRS4A%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn=
4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com</a>.<br />

--001a1148af464225cd0549d3c517--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 15:05:42 +0100
Raw View
--001a1143fc4098e0140549d40a0b
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

When you open your browser the use cases are showing in front of your eyes,
JavaScript programs storing functions in a variable. Python, lua and
countless other scripts doing the same. I can't believe you haven't seen
any of this in practice.



2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> You've asked for a feature, and yet you can't produce an example of how
> that feature would be useful. This is the rational argument: we don't nee=
d
> features that don't have use cases.
>
> Do show us examples of how this is useful and we might reconsider this
> feature. Plain and simple like that. Throwing logical fallacies around
> won't change it.
>
> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <janezz55@gmail.com> wrote:
>
>> We don't need C++, ASM is sufficient, or an arbitrary other computer
>> language. 640k were sufficient at some point in time. I haven't heard a
>> single rational argument from you. I'd hate to have you as a boss.
>>
>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>
>> You're proposing a feature for the sake of having a feature. Give us
>> actual use cases if you think that is not true.
>>
>> Having a feature that no-one will use is not beneficial.
>>
>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <janezz55@gmail.com> wrote:
>>
>> As for me being a type ducking proponent... std::any in various forms ha=
s
>> been around since 2001, I think. All the while until now you could assig=
n a
>> function pointer or a member function pointer to it as well as copyable
>> function objects. It's nothing new. Adding the invocation feature would
>> simply be a natural development in my opinion.
>>
>> 2017-03-03 12:47 GMT+01:00 janezz55 . <janezz55@gmail.com>:
>>
>> What you describe are workarounds. If you want to use a temporary lambda=
,
>> you won't be able to keep the type around. Maybe you don't want to speci=
fy
>> the function signature and so std::function is not appropriate.
>>
>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>>
>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>>
>> Show us the actual (i.e. complete) example of why that be useful (and wh=
y
>> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
>> function_ref, for that).
>>
>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> Let's say you store a lambda object into std::any
>>
>> std::any a =3D [](){};
>>
>> How are you going to obtain the lambda object back? AFAIK it's locked
>> inside the any instance. If std::any had a mechanism of invoking the sto=
red
>> object you could still "reach" it.
>>
>>
>> any_cast. You have to keep the lambda type around of course. If you don'=
t
>> want to, wrap the lambda in a std::function first before putting it in a=
n
>> std::any.
>>
>>
>>
>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> I already wrote what I needed :) function<any(std::vector<any>)> is
>> simply blasphemous.
>>
>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very bas=
ic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavio=
r
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYu
>> p5XegKF253kwet6TFZBjg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2G=
R1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/a6013d8d-73a6-4f40-
>> bbc9-77e57123f68e%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-7=
3a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%
>> 2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs=
%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/CAPCFJdSFV30P%
>> 3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV=
30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw
>> cF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrH=
jykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ
> FkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9=
cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GFfWesTJDsnn9Q%2B2qxtbxN-sqD7yAnPkwkHBHoG9=
N7Yag%40mail.gmail.com.

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

<div dir=3D"ltr">When you open your browser the use cases are showing in fr=
ont of your eyes, JavaScript programs storing functions in a variable. Pyth=
on, lua and countless other scripts doing the same. I can&#39;t believe you=
 haven&#39;t seen any of this in practice.<div><br><div><br></div></div></d=
iv><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-03 14:=
46 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a href=3D"mailto:g=
riwes@griwes.info" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br>=
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">You&#39;ve asked for a feat=
ure, and yet you can&#39;t produce an example of how that feature would be =
useful. This is the rational argument: we don&#39;t need features that don&=
#39;t have use cases.<div><br></div><div>Do show us examples of how this is=
 useful and we might reconsider this feature. Plain and simple like that. T=
hrowing logical fallacies around won&#39;t change it.</div></div><br><div c=
lass=3D"gmail_quote"><div><div class=3D"h5"><div dir=3D"ltr">On Fri, Mar 3,=
 2017 at 2:31 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com" targe=
t=3D"_blank">janezz55@gmail.com</a>&gt; wrote:<br></div></div></div><blockq=
uote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex"><div><div class=3D"h5"><div dir=3D"ltr" class=3D"m_=
5952259014406027014gmail_msg">We don&#39;t need C++, ASM is sufficient, or =
an arbitrary other computer language. 640k were sufficient at some point in=
 time. I haven&#39;t heard a single rational argument from you. I&#39;d hat=
e to have you as a boss.</div><div class=3D"gmail_extra m_59522590144060270=
14gmail_msg"><br class=3D"m_5952259014406027014gmail_msg"><div class=3D"gma=
il_quote m_5952259014406027014gmail_msg"></div></div><div class=3D"gmail_ex=
tra m_5952259014406027014gmail_msg"><div class=3D"gmail_quote m_59522590144=
06027014gmail_msg">2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <span di=
r=3D"ltr" class=3D"m_5952259014406027014gmail_msg">&lt;<a href=3D"mailto:gr=
iwes@griwes.info" class=3D"m_5952259014406027014gmail_msg" target=3D"_blank=
">griwes@griwes.info</a>&gt;</span>:<br class=3D"m_5952259014406027014gmail=
_msg"></div></div><div class=3D"gmail_extra m_5952259014406027014gmail_msg"=
><div class=3D"gmail_quote m_5952259014406027014gmail_msg"><blockquote clas=
s=3D"gmail_quote m_5952259014406027014gmail_msg" style=3D"margin:0 0 0 .8ex=
;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_5=
952259014406027014gmail_msg">You&#39;re proposing a feature for the sake of=
 having a feature. Give us actual use cases if you think that is not true.<=
div class=3D"m_5952259014406027014gmail_msg"><br class=3D"m_595225901440602=
7014gmail_msg"></div><div class=3D"m_5952259014406027014gmail_msg">Having a=
 feature that no-one will use is not beneficial.</div></div><br class=3D"m_=
5952259014406027014gmail_msg"><div class=3D"gmail_quote m_59522590144060270=
14gmail_msg"><div dir=3D"ltr" class=3D"m_5952259014406027014gmail_msg">On F=
ri, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail=
..com" class=3D"m_5952259014406027014gmail_msg" target=3D"_blank">janezz55@g=
mail.com</a>&gt; wrote:<br class=3D"m_5952259014406027014gmail_msg"></div><=
blockquote class=3D"gmail_quote m_5952259014406027014gmail_msg" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r" class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_5952259014406027014gmail_msg">As for me being a type ducking p=
roponent... std::any in various forms has been around since 2001, I think. =
All the while until now you could assign a function pointer or a member fun=
ction pointer to it as well as copyable function objects. It&#39;s nothing =
new. Adding the invocation feature would simply be a natural development in=
 my opinion.</div><div class=3D"gmail_extra m_5952259014406027014m_60412561=
47412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">=
<br class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432810=
72gmail_msg m_5952259014406027014gmail_msg"><div class=3D"gmail_quote m_595=
2259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5952=
259014406027014gmail_msg">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=
=3D"ltr" class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134=
3281072gmail_msg m_5952259014406027014gmail_msg">&lt;<a href=3D"mailto:jane=
zz55@gmail.com" class=3D"m_5952259014406027014m_6041256147412462700m_-61921=
88331343281072gmail_msg m_5952259014406027014gmail_msg" target=3D"_blank">j=
anezz55@gmail.com</a>&gt;</span>:<br class=3D"m_5952259014406027014m_604125=
6147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg=
"><blockquote class=3D"gmail_quote m_5952259014406027014m_60412561474124627=
00m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg" style=3D"=
margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"=
ltr" class=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281=
072gmail_msg m_5952259014406027014gmail_msg">What you describe are workarou=
nds. If you want to use a temporary lambda, you won&#39;t be able to keep t=
he type around. Maybe you don&#39;t want to specify the function signature =
and so std::function is not appropriate.</div><div class=3D"m_5952259014406=
027014m_6041256147412462700m_-6192188331343281072m_-3164430639174122232HOEn=
Zb m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_ms=
g m_5952259014406027014gmail_msg"><div class=3D"m_5952259014406027014m_6041=
256147412462700m_-6192188331343281072m_-3164430639174122232h5 m_59522590144=
06027014m_6041256147412462700m_-6192188331343281072gmail_msg m_595225901440=
6027014gmail_msg"><div class=3D"gmail_extra m_5952259014406027014m_60412561=
47412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">=
<br class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432810=
72gmail_msg m_5952259014406027014gmail_msg"><div class=3D"gmail_quote m_595=
2259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5952=
259014406027014gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta=
 <span dir=3D"ltr" class=3D"m_5952259014406027014m_6041256147412462700m_-61=
92188331343281072gmail_msg m_5952259014406027014gmail_msg">&lt;<a href=3D"m=
ailto:gpderetta@gmail.com" class=3D"m_5952259014406027014m_6041256147412462=
700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg" target=
=3D"_blank">gpderetta@gmail.com</a>&gt;</span>:<br class=3D"m_5952259014406=
027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590144060=
27014gmail_msg"><blockquote class=3D"gmail_quote m_5952259014406027014m_604=
1256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_=
msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
"><div dir=3D"ltr" class=3D"m_5952259014406027014m_6041256147412462700m_-61=
92188331343281072gmail_msg m_5952259014406027014gmail_msg"><span class=3D"m=
_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_=
5952259014406027014gmail_msg">On Friday, March 3, 2017 at 11:13:02 AM UTC, =
Micha=C5=82 Dominiak wrote:</span><blockquote class=3D"gmail_quote m_595225=
9014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5952259=
014406027014gmail_msg" style=3D"margin:0;margin-left:0.8ex;border-left:1px =
#ccc solid;padding-left:1ex"><span class=3D"m_5952259014406027014m_60412561=
47412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">=
<div dir=3D"ltr" class=3D"m_5952259014406027014m_6041256147412462700m_-6192=
188331343281072gmail_msg m_5952259014406027014gmail_msg">Show us the actual=
 (i.e. complete) example of why that be useful (and why you wouldn&#39;t ju=
st use `std::function&lt;void ()&gt;`, or the somewhat proposed function_re=
f, for that).</div><br class=3D"m_5952259014406027014m_6041256147412462700m=
_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg"></span><span=
 class=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072g=
mail_msg m_5952259014406027014gmail_msg"><div class=3D"gmail_quote m_595225=
9014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5952259=
014406027014gmail_msg"><div dir=3D"ltr" class=3D"m_5952259014406027014m_604=
1256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_=
msg">On Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" cla=
ss=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail=
_msg m_5952259014406027014gmail_msg">jane...@gmail.com</a>&gt; wrote:<br cl=
ass=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmai=
l_msg m_5952259014406027014gmail_msg"></div><blockquote class=3D"gmail_quot=
e m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg=
 m_5952259014406027014gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px=
 #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_59522590144060270=
14m_6041256147412462700m_-6192188331343281072gmail_msg m_595225901440602701=
4gmail_msg">Let&#39;s say you store a lambda object into std::any<div class=
=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_m=
sg m_5952259014406027014gmail_msg"><br class=3D"m_5952259014406027014m_6041=
256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_m=
sg"></div><div class=3D"m_5952259014406027014m_6041256147412462700m_-619218=
8331343281072gmail_msg m_5952259014406027014gmail_msg">std::any a =3D [](){=
};</div><div class=3D"m_5952259014406027014m_6041256147412462700m_-61921883=
31343281072gmail_msg m_5952259014406027014gmail_msg"><br class=3D"m_5952259=
014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590=
14406027014gmail_msg"></div><div class=3D"m_5952259014406027014m_6041256147=
412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">Ho=
w are you going to obtain the lambda object back? AFAIK it&#39;s locked ins=
ide the any instance. If std::any had a mechanism of invoking the stored ob=
ject you could still &quot;reach&quot; it.</div></div></blockquote></div></=
span></blockquote><div class=3D"m_5952259014406027014m_6041256147412462700m=
_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg"><br class=3D=
"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg =
m_5952259014406027014gmail_msg">any_cast. You have to keep the lambda type =
around of course. If you don&#39;t want to, wrap the lambda in a std::funct=
ion first before putting it in an std::any.<br class=3D"m_59522590144060270=
14m_6041256147412462700m_-6192188331343281072gmail_msg m_595225901440602701=
4gmail_msg">=C2=A0</div><blockquote class=3D"gmail_quote m_5952259014406027=
014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590144060270=
14gmail_msg" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div class=3D"gmail_quote m_5952259014406027014m_6041256=
147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg"=
><blockquote class=3D"gmail_quote m_5952259014406027014m_604125614741246270=
0m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg" style=3D"m=
argin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=3D=
"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg =
m_5952259014406027014gmail_msg"><br class=3D"m_5952259014406027014m_6041256=
147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg"=
><div class=3D"gmail_quote m_5952259014406027014m_6041256147412462700m_-619=
2188331343281072gmail_msg m_5952259014406027014gmail_msg"><span class=3D"m_=
5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5=
952259014406027014gmail_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <span di=
r=3D"ltr" class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313=
43281072gmail_msg m_5952259014406027014gmail_msg">&lt;<a rel=3D"nofollow" c=
lass=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gma=
il_msg m_5952259014406027014gmail_msg">jane...@gmail.com</a>&gt;</span>:<br=
 class=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072g=
mail_msg m_5952259014406027014gmail_msg"></span><blockquote class=3D"gmail_=
quote m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail=
_msg m_5952259014406027014gmail_msg" style=3D"margin:0 0 0 .8ex;border-left=
:1px #ccc solid;padding-left:1ex"><span class=3D"m_5952259014406027014m_604=
1256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_=
msg"><div dir=3D"ltr" class=3D"m_5952259014406027014m_6041256147412462700m_=
-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">I already wro=
te what I needed :) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; is sim=
ply blasphemous.</div></span><span class=3D"m_5952259014406027014m_60412561=
47412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">=
<div class=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281=
072gmail_msg m_5952259014406027014gmail_msg"><div class=3D"m_59522590144060=
27014m_6041256147412462700m_-6192188331343281072gmail_msg m_595225901440602=
7014gmail_msg"><div class=3D"m_5952259014406027014m_6041256147412462700m_-6=
192188331343281072gmail_msg m_5952259014406027014gmail_msg"><br class=3D"m_=
5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5=
952259014406027014gmail_msg"><div class=3D"gmail_quote m_595225901440602701=
4m_6041256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014=
gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"l=
tr" class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432810=
72gmail_msg m_5952259014406027014gmail_msg">&lt;<a rel=3D"nofollow" class=
=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_m=
sg m_5952259014406027014gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br cla=
ss=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail=
_msg m_5952259014406027014gmail_msg"><blockquote class=3D"gmail_quote m_595=
2259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5952=
259014406027014gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc s=
olid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_5952259014406027014m_604=
1256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_=
msg">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a class=3D"m_5952259014=
406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590144=
06027014gmail_msg">jane...@gmail.com</a> wrote:<blockquote class=3D"gmail_q=
uote m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_=
msg m_5952259014406027014gmail_msg" style=3D"margin:0;margin-left:0.8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_59522=
59014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_595225=
9014406027014gmail_msg">I believe that std::any should be made invokable, i=
f an invokable object is stored into it, such as a function pointer, method=
 pointer, or a functor (such as std::function&lt;&gt; and others). This wou=
ld raise the level of abstraction C++ offers to one comparable to scripting=
 languages, where you can often invoke an arbitrary variable. I&#39;ve prep=
ared 2 examples:</div></blockquote><div class=3D"m_5952259014406027014m_604=
1256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_=
msg"><br class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134=
3281072gmail_msg m_5952259014406027014gmail_msg">Any is a polymorphic wrapp=
er for any object modeling the CopyConstructible concept. Anything beyond t=
hat is out of scope. In fact any doesn&#39;t even provide equality or order=
ing, which would seem very basic. <br class=3D"m_5952259014406027014m_60412=
56147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_ms=
g"><br class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432=
81072gmail_msg m_5952259014406027014gmail_msg">What you want is std::functi=
on (another polymorphic wrapper for types modeling the FunctionObject conce=
pt) . If you want fully dynamic behavior (including runtime type checking o=
f parameters), use function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wra=
p the stored function in an adaptor that does the unboxing of the parameter=
s.<br class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328=
1072gmail_msg m_5952259014406027014gmail_msg"></div></div></blockquote></di=
v><br class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328=
1072gmail_msg m_5952259014406027014gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_5952259014406027014m_6=
041256147412462700m_-6192188331343281072gmail_msg m_5952259014406027014gmai=
l_msg"></div><span class=3D"m_5952259014406027014m_6041256147412462700m_-61=
92188331343281072gmail_msg m_5952259014406027014gmail_msg">

<p class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_5952259014406027014gmail_msg"></p>

-- <br class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432=
81072gmail_msg m_5952259014406027014gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_5952259=
014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590=
14406027014gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_5952259014406027014m_604125614741246=
2700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">std-pro=
posal...@isocpp.org</a>.<br class=3D"m_5952259014406027014m_604125614741246=
2700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_5952259=
014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590=
14406027014gmail_msg">std-pr...@isocpp.org</a>.<span class=3D"m_59522590144=
06027014m_6041256147412462700m_-6192188331343281072gmail_msg m_595225901440=
6027014gmail_msg"><br class=3D"m_5952259014406027014m_6041256147412462700m_=
-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_5952259014406027014m_6041256147412462700m_-619=
2188331343281072gmail_msg m_5952259014406027014gmail_msg" target=3D"_blank"=
>https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wb=
r>CAO9E8GE2GR1GQRos5BCUJzLi5yaYu<wbr>p5XegKF253kwet6TFZBjg%40mail.<wbr>gmai=
l.com</a>.<br class=3D"m_5952259014406027014m_6041256147412462700m_-6192188=
331343281072gmail_msg m_5952259014406027014gmail_msg">
</span></blockquote></div>
</blockquote></div><span class=3D"m_5952259014406027014m_604125614741246270=
0m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">

<p class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_5952259014406027014gmail_msg"></p>

-- <br class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432=
81072gmail_msg m_5952259014406027014gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_m=
sg m_5952259014406027014gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_5952=
259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522=
59014406027014gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr=
>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br=
 class=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281072g=
mail_msg m_5952259014406027014gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_595225901440602=
7014m_6041256147412462700m_-6192188331343281072gmail_msg m_5952259014406027=
014gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<wbr>isocpp.org</=
a>.<br class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432=
81072gmail_msg m_5952259014406027014gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328=
1072gmail_msg m_5952259014406027014gmail_msg" target=3D"_blank">std-proposa=
ls@isocpp.org</a>.<br class=3D"m_5952259014406027014m_6041256147412462700m_=
-6192188331343281072gmail_msg m_5952259014406027014gmail_msg"></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" class=3D"m_5952259=
014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590=
14406027014gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr>is=
ocpp.org/d/msgid/std-<wbr>proposals/a6013d8d-73a6-4f40-<wbr>bbc9-77e57123f6=
8e%40isocpp.org</a><wbr>.<br class=3D"m_5952259014406027014m_60412561474124=
62700m_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">
</blockquote></div><br class=3D"m_5952259014406027014m_6041256147412462700m=
_-6192188331343281072gmail_msg m_5952259014406027014gmail_msg"></div><span =
class=3D"m_5952259014406027014m_6041256147412462700HOEnZb m_595225901440602=
7014gmail_msg"><font color=3D"#888888" class=3D"m_5952259014406027014gmail_=
msg">
</font></span></div></div></blockquote></div><span class=3D"m_5952259014406=
027014m_6041256147412462700HOEnZb m_5952259014406027014gmail_msg"><font col=
or=3D"#888888" class=3D"m_5952259014406027014gmail_msg"><br class=3D"m_5952=
259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522=
59014406027014gmail_msg"></font></span></div><span class=3D"m_5952259014406=
027014m_6041256147412462700HOEnZb m_5952259014406027014gmail_msg"><font col=
or=3D"#888888" class=3D"m_5952259014406027014gmail_msg">

<p class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_5952259014406027014gmail_msg"></p>

-- <br class=3D"m_5952259014406027014m_6041256147412462700m_-61921883313432=
81072gmail_msg m_5952259014406027014gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_5952259=
014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_59522590=
14406027014gmail_msg">
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" class=3D"m_=
5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_5=
952259014406027014gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<w=
br>isocpp.org</a>.<br class=3D"m_5952259014406027014m_6041256147412462700m_=
-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_5952259014406027014m_6041256147412462700m_-619218833134328=
1072gmail_msg m_5952259014406027014gmail_msg" target=3D"_blank">std-proposa=
ls@isocpp.org</a>.<br class=3D"m_5952259014406027014m_6041256147412462700m_=
-6192188331343281072gmail_msg m_5952259014406027014gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281=
072gmail_msg m_5952259014406027014gmail_msg" target=3D"_blank">https://grou=
ps.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GEDs%<wbr>=
2BmqoyCxakK0v-hKoWcBYJE%<wbr>2B9rdXuNUyGMTRwqPFAw%40mail.<wbr>gmail.com</a>=
..<br class=3D"m_5952259014406027014m_6041256147412462700m_-6192188331343281=
072gmail_msg m_5952259014406027014gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_5952259014406027014gmail_msg"><div class=3D"gmail_quote m_595225=
9014406027014gmail_msg"><blockquote class=3D"gmail_quote m_5952259014406027=
014gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><span class=3D"m_5952259014406027014m_6041256147412462700HOEnZb =
m_5952259014406027014gmail_msg"><font color=3D"#888888" class=3D"m_59522590=
14406027014gmail_msg">

<p class=3D"m_5952259014406027014gmail_msg"></p>

-- <br class=3D"m_5952259014406027014gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_5952259014406027014gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_5952=
259014406027014gmail_msg" target=3D"_blank">https://groups.google.com/a/<wb=
r>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<b=
r class=3D"m_5952259014406027014gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_595225901440602=
7014gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<wbr>isocpp.org<=
/a>.<br class=3D"m_5952259014406027014gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_5952259014406027014gmail_msg" target=3D"_blank">std-propos=
als@isocpp.org</a>.<br class=3D"m_5952259014406027014gmail_msg"></font></sp=
an></blockquote></div></div><div class=3D"gmail_extra m_5952259014406027014=
gmail_msg"><div class=3D"gmail_quote m_5952259014406027014gmail_msg"><block=
quote class=3D"gmail_quote m_5952259014406027014gmail_msg" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_59=
52259014406027014m_6041256147412462700HOEnZb m_5952259014406027014gmail_msg=
"><font color=3D"#888888" class=3D"m_5952259014406027014gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"m_5952259014406027014gmail_msg" target=3D"_blank">https://group=
s.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAPCFJdSFV30P%<wb=
r>3DdEQoooHcn05s6WqBiaV4XpyuQY4P<wbr>3jLkM5Dqg%40mail.gmail.com</a>.<br cla=
ss=3D"m_5952259014406027014gmail_msg">
</font></span></blockquote></div><br class=3D"m_5952259014406027014gmail_ms=
g"></div>

<p class=3D"m_5952259014406027014gmail_msg"></p>

-- <br class=3D"m_5952259014406027014gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_5952259=
014406027014gmail_msg">
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" class=3D"m_=
5952259014406027014gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<=
wbr>isocpp.org</a>.<br class=3D"m_5952259014406027014gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_5952259014406027014gmail_msg" target=3D"_blank">std-propos=
als@isocpp.org</a>.<br class=3D"m_5952259014406027014gmail_msg"></div></div=
>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"m_5952259014406027014gmail_msg" target=3D"_blank">https://group=
s.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GHrHjy=
kbpVLJv3RVBL7QK9Dw<wbr>cF4gFMF5HP%2B2QFCWvRS4A%<wbr>40mail.gmail.com</a>.<b=
r class=3D"m_5952259014406027014gmail_msg">
</blockquote></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/<wbr>CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ<wbr>FkP6CFq55NWM6HFLMgO-=
A%40mail.<wbr>gmail.com</a>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GFfWesTJDsnn9Q%2B2qxtbxN-sqD7yA=
nPkwkHBHoG9N7Yag%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFfWesTJD=
snn9Q%2B2qxtbxN-sqD7yAnPkwkHBHoG9N7Yag%40mail.gmail.com</a>.<br />

--001a1143fc4098e0140549d40a0b--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 14:07:53 +0000
Raw View
--f403045e6484f867b10549d41298
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Show me a problem that you currently have *in C++* that this solves.

I don't care about other languages; we're talking about something you want =
*in
C++*.

On Fri, Mar 3, 2017 at 3:05 PM janezz55 . <janezz55@gmail.com> wrote:

> When you open your browser the use cases are showing in front of your
> eyes, JavaScript programs storing functions in a variable. Python, lua an=
d
> countless other scripts doing the same. I can't believe you haven't seen
> any of this in practice.
>
>
>
> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>
> You've asked for a feature, and yet you can't produce an example of how
> that feature would be useful. This is the rational argument: we don't nee=
d
> features that don't have use cases.
>
> Do show us examples of how this is useful and we might reconsider this
> feature. Plain and simple like that. Throwing logical fallacies around
> won't change it.
>
> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <janezz55@gmail.com> wrote:
>
> We don't need C++, ASM is sufficient, or an arbitrary other computer
> language. 640k were sufficient at some point in time. I haven't heard a
> single rational argument from you. I'd hate to have you as a boss.
>
> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>
> You're proposing a feature for the sake of having a feature. Give us
> actual use cases if you think that is not true.
>
> Having a feature that no-one will use is not beneficial.
>
> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <janezz55@gmail.com> wrote:
>
> As for me being a type ducking proponent... std::any in various forms has
> been around since 2001, I think. All the while until now you could assign=
 a
> function pointer or a member function pointer to it as well as copyable
> function objects. It's nothing new. Adding the invocation feature would
> simply be a natural development in my opinion.
>
> 2017-03-03 12:47 GMT+01:00 janezz55 . <janezz55@gmail.com>:
>
> What you describe are workarounds. If you want to use a temporary lambda,
> you won't be able to keep the type around. Maybe you don't want to specif=
y
> the function signature and so std::function is not appropriate.
>
> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpderetta@gmail.com>:
>
> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>
> Show us the actual (i.e. complete) example of why that be useful (and why
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>
> Let's say you store a lambda object into std::any
>
> std::any a =3D [](){};
>
> How are you going to obtain the lambda object back? AFAIK it's locked
> inside the any instance. If std::any had a mechanism of invoking the stor=
ed
> object you could still "reach" it.
>
>
> any_cast. You have to keep the lambda type around of course. If you don't
> want to, wrap the lambda in a std::function first before putting it in an
> std::any.
>
>
>
> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> I already wrote what I needed :) function<any(std::vector<any>)> is simpl=
y
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a funct=
or
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where yo=
u
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructibl=
e
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adapto=
r
> that does the unboxing of the parameters.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1=
GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR=
1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, 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/a6013d8d-73a=
6-4f40-bbc9-77e57123f68e%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73=
a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
>
>
> --
> 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/CAO9E8GEDs%2=
BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%=
2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, 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/CAPCFJdSFV30=
P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV3=
0P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
>
> --
> 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/CAO9E8GHrHjy=
kbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHj=
ykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, 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/CAPCFJdSHx9c=
FUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9=
cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
>
> --
> 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/CAO9E8GFfWes=
TJDsnn9Q%2B2qxtbxN-sqD7yAnPkwkHBHoG9N7Yag%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFfWe=
sTJDsnn9Q%2B2qxtbxN-sqD7yAnPkwkHBHoG9N7Yag%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAPCFJdQBgj_vqd7-n6DTgey%3DdVLDNej4Ax8kPTgEBWWQt=
NjoAQ%40mail.gmail.com.

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

<div dir=3D"ltr">Show me a problem that you currently have <i>in C++</i>=C2=
=A0that this solves.<div><br></div><div>I don&#39;t care about other langua=
ges; we&#39;re talking about something you want <i>in C++</i>.</div></div><=
br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 3:05 =
PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com">janezz55@gmail.com<=
/a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" cla=
ss=3D"gmail_msg">When you open your browser the use cases are showing in fr=
ont of your eyes, JavaScript programs storing functions in a variable. Pyth=
on, lua and countless other scripts doing the same. I can&#39;t believe you=
 haven&#39;t seen any of this in practice.<div class=3D"gmail_msg"><br clas=
s=3D"gmail_msg"><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div></di=
v></div><div class=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div c=
lass=3D"gmail_quote gmail_msg"></div></div><div class=3D"gmail_extra gmail_=
msg"><div class=3D"gmail_quote gmail_msg">2017-03-03 14:46 GMT+01:00 Micha=
=C5=82 Dominiak <span dir=3D"ltr" class=3D"gmail_msg">&lt;<a href=3D"mailto=
:griwes@griwes.info" class=3D"gmail_msg" target=3D"_blank">griwes@griwes.in=
fo</a>&gt;</span>:<br class=3D"gmail_msg"></div></div><div class=3D"gmail_e=
xtra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=3D"g=
mail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">You&#39;ve asked fo=
r a feature, and yet you can&#39;t produce an example of how that feature w=
ould be useful. This is the rational argument: we don&#39;t need features t=
hat don&#39;t have use cases.<div class=3D"gmail_msg"><br class=3D"gmail_ms=
g"></div><div class=3D"gmail_msg">Do show us examples of how this is useful=
 and we might reconsider this feature. Plain and simple like that. Throwing=
 logical fallacies around won&#39;t change it.</div></div><br class=3D"gmai=
l_msg"><div class=3D"gmail_quote gmail_msg"><div class=3D"gmail_msg"><div c=
lass=3D"m_-726358374983897947h5 gmail_msg"><div dir=3D"ltr" class=3D"gmail_=
msg">On Fri, Mar 3, 2017 at 2:31 PM janezz55 . &lt;<a href=3D"mailto:janezz=
55@gmail.com" class=3D"gmail_msg" target=3D"_blank">janezz55@gmail.com</a>&=
gt; wrote:<br class=3D"gmail_msg"></div></div></div><blockquote class=3D"gm=
ail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div class=3D"gmail_msg"><div class=3D"m_-726358374983897=
947h5 gmail_msg"><div dir=3D"ltr" class=3D"m_-726358374983897947m_595225901=
4406027014gmail_msg gmail_msg">We don&#39;t need C++, ASM is sufficient, or=
 an arbitrary other computer language. 640k were sufficient at some point i=
n time. I haven&#39;t heard a single rational argument from you. I&#39;d ha=
te to have you as a boss.</div><div class=3D"gmail_extra m_-726358374983897=
947m_5952259014406027014gmail_msg gmail_msg"><br class=3D"m_-72635837498389=
7947m_5952259014406027014gmail_msg gmail_msg"><div class=3D"gmail_quote m_-=
726358374983897947m_5952259014406027014gmail_msg gmail_msg"></div></div><di=
v class=3D"gmail_extra m_-726358374983897947m_5952259014406027014gmail_msg =
gmail_msg"><div class=3D"gmail_quote m_-726358374983897947m_595225901440602=
7014gmail_msg gmail_msg">2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <s=
pan dir=3D"ltr" class=3D"m_-726358374983897947m_5952259014406027014gmail_ms=
g gmail_msg">&lt;<a href=3D"mailto:griwes@griwes.info" class=3D"m_-72635837=
4983897947m_5952259014406027014gmail_msg gmail_msg" target=3D"_blank">griwe=
s@griwes.info</a>&gt;</span>:<br class=3D"m_-726358374983897947m_5952259014=
406027014gmail_msg gmail_msg"></div></div><div class=3D"gmail_extra m_-7263=
58374983897947m_5952259014406027014gmail_msg gmail_msg"><div class=3D"gmail=
_quote m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><bloc=
kquote class=3D"gmail_quote m_-726358374983897947m_5952259014406027014gmail=
_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;paddi=
ng-left:1ex"><div dir=3D"ltr" class=3D"m_-726358374983897947m_5952259014406=
027014gmail_msg gmail_msg">You&#39;re proposing a feature for the sake of h=
aving a feature. Give us actual use cases if you think that is not true.<di=
v class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><=
br class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">=
</div><div class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gma=
il_msg">Having a feature that no-one will use is not beneficial.</div></div=
><br class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg=
"><div class=3D"gmail_quote m_-726358374983897947m_5952259014406027014gmail=
_msg gmail_msg"><div dir=3D"ltr" class=3D"m_-726358374983897947m_5952259014=
406027014gmail_msg gmail_msg">On Fri, Mar 3, 2017 at 12:59 PM janezz55 . &l=
t;<a href=3D"mailto:janezz55@gmail.com" class=3D"m_-726358374983897947m_595=
2259014406027014gmail_msg gmail_msg" target=3D"_blank">janezz55@gmail.com</=
a>&gt; wrote:<br class=3D"m_-726358374983897947m_5952259014406027014gmail_m=
sg gmail_msg"></div><blockquote class=3D"gmail_quote m_-726358374983897947m=
_5952259014406027014gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_-72635837=
4983897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072g=
mail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">As =
for me being a type ducking proponent... std::any in various forms has been=
 around since 2001, I think. All the while until now you could assign a fun=
ction pointer or a member function pointer to it as well as copyable functi=
on objects. It&#39;s nothing new. Adding the invocation feature would simpl=
y be a natural development in my opinion.</div><div class=3D"gmail_extra m_=
-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921883313=
43281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail=
_msg"><br class=3D"m_-726358374983897947m_5952259014406027014m_604125614741=
2462700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406=
027014gmail_msg gmail_msg"><div class=3D"gmail_quote m_-726358374983897947m=
_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_=
-726358374983897947m_5952259014406027014gmail_msg gmail_msg">2017-03-03 12:=
47 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"m_-726358374983897947m_5=
952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7=
26358374983897947m_5952259014406027014gmail_msg gmail_msg">&lt;<a href=3D"m=
ailto:janezz55@gmail.com" class=3D"m_-726358374983897947m_59522590144060270=
14m_6041256147412462700m_-6192188331343281072gmail_msg m_-72635837498389794=
7m_5952259014406027014gmail_msg gmail_msg" target=3D"_blank">janezz55@gmail=
..com</a>&gt;</span>:<br class=3D"m_-726358374983897947m_5952259014406027014=
m_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m=
_5952259014406027014gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m=
_-726358374983897947m_5952259014406027014m_6041256147412462700m_-6192188331=
343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmai=
l_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1=
ex"><div dir=3D"ltr" class=3D"m_-726358374983897947m_5952259014406027014m_6=
041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_59=
52259014406027014gmail_msg gmail_msg">What you describe are workarounds. If=
 you want to use a temporary lambda, you won&#39;t be able to keep the type=
 around. Maybe you don&#39;t want to specify the function signature and so =
std::function is not appropriate.</div><div class=3D"m_-726358374983897947m=
_5952259014406027014m_6041256147412462700m_-6192188331343281072m_-316443063=
9174122232HOEnZb m_-726358374983897947m_5952259014406027014m_60412561474124=
62700m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901440602=
7014gmail_msg gmail_msg"><div class=3D"m_-726358374983897947m_5952259014406=
027014m_6041256147412462700m_-6192188331343281072m_-3164430639174122232h5 m=
_-726358374983897947m_5952259014406027014m_6041256147412462700m_-6192188331=
343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmai=
l_msg"><div class=3D"gmail_extra m_-726358374983897947m_5952259014406027014=
m_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m=
_5952259014406027014gmail_msg gmail_msg"><br class=3D"m_-726358374983897947=
m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m=
_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><div class=3D=
"gmail_quote m_-726358374983897947m_5952259014406027014m_604125614741246270=
0m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014=
gmail_msg gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <spa=
n dir=3D"ltr" class=3D"m_-726358374983897947m_5952259014406027014m_60412561=
47412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901=
4406027014gmail_msg gmail_msg">&lt;<a href=3D"mailto:gpderetta@gmail.com" c=
lass=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-6=
192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail=
_msg gmail_msg" target=3D"_blank">gpderetta@gmail.com</a>&gt;</span>:<br cl=
ass=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61=
92188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_=
msg gmail_msg"><blockquote class=3D"gmail_quote m_-726358374983897947m_5952=
259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7263=
58374983897947m_5952259014406027014gmail_msg gmail_msg" style=3D"margin:0 0=
 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=
=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921=
88331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg=
 gmail_msg"><span class=3D"m_-726358374983897947m_5952259014406027014m_6041=
256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_59522=
59014406027014gmail_msg gmail_msg">On Friday, March 3, 2017 at 11:13:02 AM =
UTC, Micha=C5=82 Dominiak wrote:</span><blockquote class=3D"gmail_quote m_-=
726358374983897947m_5952259014406027014m_6041256147412462700m_-619218833134=
3281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_=
msg" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding=
-left:1ex"><span class=3D"m_-726358374983897947m_5952259014406027014m_60412=
56147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_595225=
9014406027014gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_-726358374983=
897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail=
_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">Show us=
 the actual (i.e. complete) example of why that be useful (and why you woul=
dn&#39;t just use `std::function&lt;void ()&gt;`, or the somewhat proposed =
function_ref, for that).</div><br class=3D"m_-726358374983897947m_595225901=
4406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374=
983897947m_5952259014406027014gmail_msg gmail_msg"></span><span class=3D"m_=
-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921883313=
43281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail=
_msg"><div class=3D"gmail_quote m_-726358374983897947m_5952259014406027014m=
_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_=
5952259014406027014gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_-726358=
374983897947m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">O=
n Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"=
m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-619218833=
1343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gma=
il_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D"m_-726358374983897947m=
_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_=
-726358374983897947m_5952259014406027014gmail_msg gmail_msg"></div><blockqu=
ote class=3D"gmail_quote m_-726358374983897947m_5952259014406027014m_604125=
6147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259=
014406027014gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px=
 #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_-7263583749838979=
47m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg=
 m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">Let&#39;s s=
ay you store a lambda object into std::any<div class=3D"m_-7263583749838979=
47m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg=
 m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><br class=
=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921=
88331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg=
 gmail_msg"></div><div class=3D"m_-726358374983897947m_5952259014406027014m=
_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_=
5952259014406027014gmail_msg gmail_msg">std::any a =3D [](){};</div><div cl=
ass=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61=
92188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_=
msg gmail_msg"><br class=3D"m_-726358374983897947m_5952259014406027014m_604=
1256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952=
259014406027014gmail_msg gmail_msg"></div><div class=3D"m_-7263583749838979=
47m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg=
 m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">How are you=
 going to obtain the lambda object back? AFAIK it&#39;s locked inside the a=
ny instance. If std::any had a mechanism of invoking the stored object you =
could still &quot;reach&quot; it.</div></div></blockquote></div></span></bl=
ockquote><div class=3D"m_-726358374983897947m_5952259014406027014m_60412561=
47412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901=
4406027014gmail_msg gmail_msg"><br class=3D"m_-726358374983897947m_59522590=
14406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-72635837=
4983897947m_5952259014406027014gmail_msg gmail_msg">any_cast. You have to k=
eep the lambda type around of course. If you don&#39;t want to, wrap the la=
mbda in a std::function first before putting it in an std::any.<br class=3D=
"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921883=
31343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gm=
ail_msg">=C2=A0</div><blockquote class=3D"gmail_quote m_-726358374983897947=
m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m=
_-726358374983897947m_5952259014406027014gmail_msg gmail_msg" style=3D"marg=
in:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div cl=
ass=3D"gmail_quote m_-726358374983897947m_5952259014406027014m_604125614741=
2462700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406=
027014gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_-726358374983=
897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail=
_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div cla=
ss=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-619=
2188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_m=
sg gmail_msg"><br class=3D"m_-726358374983897947m_5952259014406027014m_6041=
256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_59522=
59014406027014gmail_msg gmail_msg"><div class=3D"gmail_quote m_-72635837498=
3897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmai=
l_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><span =
class=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-=
6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmai=
l_msg gmail_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" cl=
ass=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61=
92188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_=
msg gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_-726358374983897947m_5952=
259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7263=
58374983897947m_5952259014406027014gmail_msg gmail_msg">jane...@gmail.com</=
a>&gt;</span>:<br class=3D"m_-726358374983897947m_5952259014406027014m_6041=
256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_59522=
59014406027014gmail_msg gmail_msg"></span><blockquote class=3D"gmail_quote =
m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-619218833=
1343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gma=
il_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:=
1ex"><span class=3D"m_-726358374983897947m_5952259014406027014m_60412561474=
12462700m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901440=
6027014gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_-726358374983897947=
m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m=
_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">I already wro=
te what I needed :) function&lt;any(std::vector&lt;any&gt;)&gt; is simply b=
lasphemous.</div></span><span class=3D"m_-726358374983897947m_5952259014406=
027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7263583749838=
97947m_5952259014406027014gmail_msg gmail_msg"><div class=3D"m_-72635837498=
3897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmai=
l_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><div c=
lass=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-6=
192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail=
_msg gmail_msg"><div class=3D"m_-726358374983897947m_5952259014406027014m_6=
041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_59=
52259014406027014gmail_msg gmail_msg"><br class=3D"m_-726358374983897947m_5=
952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7=
26358374983897947m_5952259014406027014gmail_msg gmail_msg"><div class=3D"gm=
ail_quote m_-726358374983897947m_5952259014406027014m_6041256147412462700m_=
-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gma=
il_msg gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <span d=
ir=3D"ltr" class=3D"m_-726358374983897947m_5952259014406027014m_60412561474=
12462700m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901440=
6027014gmail_msg gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_-72635837498=
3897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmai=
l_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">gpde..=
..@gmail.com</a>&gt;</span>:<br class=3D"m_-726358374983897947m_595225901440=
6027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983=
897947m_5952259014406027014gmail_msg gmail_msg"><blockquote class=3D"gmail_=
quote m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-619=
2188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_m=
sg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><div dir=3D"ltr" class=3D"m_-726358374983897947m_595225901440602=
7014m_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897=
947m_5952259014406027014gmail_msg gmail_msg">On Thursday, March 2, 2017 at =
6:26:01 PM UTC, <a class=3D"m_-726358374983897947m_5952259014406027014m_604=
1256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952=
259014406027014gmail_msg gmail_msg">jane...@gmail.com</a> wrote:<blockquote=
 class=3D"gmail_quote m_-726358374983897947m_5952259014406027014m_604125614=
7412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014=
406027014gmail_msg gmail_msg" style=3D"margin:0;margin-left:0.8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_-7263583749=
83897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gma=
il_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">I bel=
ieve that std::any should be made invokable, if an invokable object is stor=
ed into it, such as a function pointer, method pointer, or a functor (such =
as std::function&lt;&gt; and others). This would raise the level of abstrac=
tion C++ offers to one comparable to scripting languages, where you can oft=
en invoke an arbitrary variable. I&#39;ve prepared 2 examples:</div></block=
quote><div class=3D"m_-726358374983897947m_5952259014406027014m_60412561474=
12462700m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901440=
6027014gmail_msg gmail_msg"><br class=3D"m_-726358374983897947m_59522590144=
06027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-72635837498=
3897947m_5952259014406027014gmail_msg gmail_msg">Any is a polymorphic wrapp=
er for any object modeling the CopyConstructible concept. Anything beyond t=
hat is out of scope. In fact any doesn&#39;t even provide equality or order=
ing, which would seem very basic. <br class=3D"m_-726358374983897947m_59522=
59014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-72635=
8374983897947m_5952259014406027014gmail_msg gmail_msg"><br class=3D"m_-7263=
58374983897947m_5952259014406027014m_6041256147412462700m_-6192188331343281=
072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"=
>What you want is std::function (another polymorphic wrapper for types mode=
ling the FunctionObject concept) . If you want fully dynamic behavior (incl=
uding runtime type checking of parameters), use function&lt;any(std::vector=
&lt;any&gt;)&gt; and wrap the stored function in an adaptor that does the u=
nboxing of the parameters.<br class=3D"m_-726358374983897947m_5952259014406=
027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7263583749838=
97947m_5952259014406027014gmail_msg gmail_msg"></div></div></blockquote></d=
iv><br class=3D"m_-726358374983897947m_5952259014406027014m_604125614741246=
2700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027=
014gmail_msg gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_-726358374983897947m_5=
952259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7=
26358374983897947m_5952259014406027014gmail_msg gmail_msg"></div><span clas=
s=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-6192=
188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_ms=
g gmail_msg">

<p class=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700=
m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_-726358374983897947m_5952259014406027014m_604125614741246=
2700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027=
014gmail_msg gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-726358=
374983897947m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><=
/span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_-726358374983897947m_595225901440602=
7014m_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897=
947m_5952259014406027014gmail_msg gmail_msg">std-proposal...@isocpp.org</a>=
..<br class=3D"m_-726358374983897947m_5952259014406027014m_60412561474124627=
00m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901440602701=
4gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-726358=
374983897947m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">s=
td-pr...@isocpp.org</a>.<span class=3D"m_-726358374983897947m_5952259014406=
027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-7263583749838=
97947m_5952259014406027014gmail_msg gmail_msg"><br class=3D"m_-726358374983=
897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail=
_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_-726358374983897947m_5952259014406027014m_6041=
256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_59522=
59014406027014gmail_msg gmail_msg" target=3D"_blank">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegK=
F253kwet6TFZBjg%40mail.gmail.com</a>.<br class=3D"m_-726358374983897947m_59=
52259014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-72=
6358374983897947m_5952259014406027014gmail_msg gmail_msg">
</span></blockquote></div>
</blockquote></div><span class=3D"m_-726358374983897947m_595225901440602701=
4m_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947=
m_5952259014406027014gmail_msg gmail_msg">

<p class=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700=
m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_-726358374983897947m_5952259014406027014m_604125614741246=
2700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027=
014gmail_msg gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921=
88331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg=
 gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_-726=
358374983897947m_5952259014406027014m_6041256147412462700m_-619218833134328=
1072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg=
" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-prop=
osals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_-726358374983897947m_59522=
59014406027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-72635=
8374983897947m_5952259014406027014gmail_msg gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_-72635837498389=
7947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gmail_m=
sg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg" target=3D=
"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"m_-726358374=
983897947m_5952259014406027014m_6041256147412462700m_-6192188331343281072gm=
ail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462=
700m_-6192188331343281072gmail_msg m_-726358374983897947m_59522590144060270=
14gmail_msg gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<br c=
lass=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-6=
192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail=
_msg gmail_msg"></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" class=3D"m_-726358=
374983897947m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg" t=
arget=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-proposa=
ls/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org</a>.<br class=3D"m_-72=
6358374983897947m_5952259014406027014m_6041256147412462700m_-61921883313432=
81072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_ms=
g">
</blockquote></div><br class=3D"m_-726358374983897947m_5952259014406027014m=
_6041256147412462700m_-6192188331343281072gmail_msg m_-726358374983897947m_=
5952259014406027014gmail_msg gmail_msg"></div><span class=3D"m_-72635837498=
3897947m_5952259014406027014m_6041256147412462700HOEnZb m_-7263583749838979=
47m_5952259014406027014gmail_msg gmail_msg"><font color=3D"#888888" class=
=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_-726358374983=
897947m_5952259014406027014m_6041256147412462700HOEnZb m_-72635837498389794=
7m_5952259014406027014gmail_msg gmail_msg"><font color=3D"#888888" class=3D=
"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><br class=
=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921=
88331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg=
 gmail_msg"></font></span></div><span class=3D"m_-726358374983897947m_59522=
59014406027014m_6041256147412462700HOEnZb m_-726358374983897947m_5952259014=
406027014gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_-726358374=
983897947m_5952259014406027014gmail_msg gmail_msg">

<p class=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700=
m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_-726358374983897947m_5952259014406027014m_604125614741246=
2700m_-6192188331343281072gmail_msg m_-726358374983897947m_5952259014406027=
014gmail_msg gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-726358=
374983897947m_5952259014406027014m_6041256147412462700m_-619218833134328107=
2gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">
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" class=3D"m_=
-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921883313=
43281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg gmail=
_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br class=
=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-61921=
88331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail_msg=
 gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462=
700m_-6192188331343281072gmail_msg m_-726358374983897947m_59522590144060270=
14gmail_msg gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<br c=
lass=3D"m_-726358374983897947m_5952259014406027014m_6041256147412462700m_-6=
192188331343281072gmail_msg m_-726358374983897947m_5952259014406027014gmail=
_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_-726358374983897947m_5952259014406027014m_60412561474124627=
00m_-6192188331343281072gmail_msg m_-726358374983897947m_595225901440602701=
4gmail_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.=
org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTR=
wqPFAw%40mail.gmail.com</a>.<br class=3D"m_-726358374983897947m_59522590144=
06027014m_6041256147412462700m_-6192188331343281072gmail_msg m_-72635837498=
3897947m_5952259014406027014gmail_msg gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg"><di=
v class=3D"gmail_quote m_-726358374983897947m_5952259014406027014gmail_msg =
gmail_msg"><blockquote class=3D"gmail_quote m_-726358374983897947m_59522590=
14406027014gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px =
#ccc solid;padding-left:1ex"><span class=3D"m_-726358374983897947m_59522590=
14406027014m_6041256147412462700HOEnZb m_-726358374983897947m_5952259014406=
027014gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_-726358374983=
897947m_5952259014406027014gmail_msg gmail_msg">

<p class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">=
</p>

-- <br class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_m=
sg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_-726=
358374983897947m_5952259014406027014gmail_msg gmail_msg" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/un=
subscribe</a>.<br class=3D"m_-726358374983897947m_5952259014406027014gmail_=
msg gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_-72635837498389=
7947m_5952259014406027014gmail_msg gmail_msg" target=3D"_blank">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br class=3D"m_-726358374983897947m_595225901=
4406027014gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_ms=
g" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_-726358374=
983897947m_5952259014406027014gmail_msg gmail_msg"></font></span></blockquo=
te></div></div><div class=3D"gmail_extra m_-726358374983897947m_59522590144=
06027014gmail_msg gmail_msg"><div class=3D"gmail_quote m_-72635837498389794=
7m_5952259014406027014gmail_msg gmail_msg"><blockquote class=3D"gmail_quote=
 m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D=
"m_-726358374983897947m_5952259014406027014m_6041256147412462700HOEnZb m_-7=
26358374983897947m_5952259014406027014gmail_msg gmail_msg"><font color=3D"#=
888888" class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_=
msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg" =
target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-propos=
als/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com<=
/a>.<br class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_=
msg">
</font></span></blockquote></div><br class=3D"m_-726358374983897947m_595225=
9014406027014gmail_msg gmail_msg"></div>

<p class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg">=
</p>

-- <br class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_m=
sg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-726358=
374983897947m_5952259014406027014gmail_msg gmail_msg">
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" class=3D"m_=
-726358374983897947m_5952259014406027014gmail_msg gmail_msg" target=3D"_bla=
nk">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"m_-72635837498389=
7947m_5952259014406027014gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_ms=
g" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_-726358374=
983897947m_5952259014406027014gmail_msg gmail_msg"></div></div>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_msg" =
target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-propos=
als/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com<=
/a>.<br class=3D"m_-726358374983897947m_5952259014406027014gmail_msg gmail_=
msg">
</blockquote></div><span class=3D"gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"gmail_=
msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-p=
roposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"gmail_msg" target=
=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"gmail_msg=
">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg"></span></blockquote></div></div><div class=3D"gmail_e=
xtra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=3D"g=
mail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid=
;padding-left:1ex">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.o=
rg/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-=
A%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</blockquote></div><br class=3D"gmail_msg"></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFfWesTJDsnn9Q%2B2qxtbxN-sqD7yA=
nPkwkHBHoG9N7Yag%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GFfWesTJDsnn9Q%2B2qxtbxN-sqD7yAnPkwkHBHoG9=
N7Yag%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdQBgj_vqd7-n6DTgey%3DdVLDNej4Ax=
8kPTgEBWWQtNjoAQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQBgj_vqd=
7-n6DTgey%3DdVLDNej4Ax8kPTgEBWWQtNjoAQ%40mail.gmail.com</a>.<br />

--f403045e6484f867b10549d41298--

.


Author: Edward Catmur <ed@catmur.co.uk>
Date: Fri, 3 Mar 2017 06:22:29 -0800 (PST)
Raw View
------=_Part_672_1775159593.1488550950017
Content-Type: multipart/alternative;
 boundary="----=_Part_673_1739527298.1488550950018"

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

On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>
> When you open your browser the use cases are showing in front of your=20
> eyes, JavaScript programs storing functions in a variable. Python, lua an=
d=20
> countless other scripts doing the same. I can't believe you haven't seen=
=20
> any of this in practice.
>

It works in scripting languages because they have a rich base type (have=20
you looked at the size of the PyObject vtable?) that erases all the=20
operations the language syntax allows on an object. We don't have that in=
=20
C++ because of overhead and because it's incompatible with a=20
Turing-complete compile time type system.

Your proposed facility:

* Requires the target type to have exactly 1 call signature, so it won't=20
work with multi-callables, overload combiners, or polymorphic or variadic=
=20
function objects, esp. closure types.
* Requires the caller to supply exactly the arguments corresponding to the=
=20
signature of the target type (otherwise UB, assert or throw). So no=20
arithmetic conversions, cvr conversions or implicit conversions. That's a=
=20
recipe for frustration.
* Asymmetry between argument and return types; why not require the user to=
=20
specify the return type?
* Overhead: one extra function pointer plus one extra typeid (for the=20
signature type, if extant) per any instance.

Now some constructive suggestions:

* The overhead is a defect of your implementation; you can move those=20
members into the vtable, at the cost of an extra indirection.
* The return type could be provided by having your invoke member function=
=20
take the return type as the first template parameter, or preferably=20
providing a non-member invoke. That would also allow supplying argument=20
types explicitly:

auto a =3D any{[](std::string, unsigned) { return true; }};
auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);

Is that useful? I'm not too sure, but at least it's clear what the facility=
=20
can and cannot do. It still can't accept multi-signature callables.

2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info <javasc=
ript:>
> >:
>
>> You've asked for a feature, and yet you can't produce an example of how=
=20
>> that feature would be useful. This is the rational argument: we don't ne=
ed=20
>> features that don't have use cases.
>>
>> Do show us examples of how this is useful and we might reconsider this=
=20
>> feature. Plain and simple like that. Throwing logical fallacies around=
=20
>> won't change it.
>>
>> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com=20
>> <javascript:>> wrote:
>>
>>> We don't need C++, ASM is sufficient, or an arbitrary other computer=20
>>> language. 640k were sufficient at some point in time. I haven't heard a=
=20
>>> single rational argument from you. I'd hate to have you as a boss.
>>>
>>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info=20
>>> <javascript:>>:
>>>
>>>> You're proposing a feature for the sake of having a feature. Give us=
=20
>>>> actual use cases if you think that is not true.
>>>>
>>>> Having a feature that no-one will use is not beneficial.
>>>>
>>>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com=20
>>>> <javascript:>> wrote:
>>>>
>>>>> As for me being a type ducking proponent... std::any in various forms=
=20
>>>>> has been around since 2001, I think. All the while until now you coul=
d=20
>>>>> assign a function pointer or a member function pointer to it as well =
as=20
>>>>> copyable function objects. It's nothing new. Adding the invocation fe=
ature=20
>>>>> would simply be a natural development in my opinion.
>>>>>
>>>>> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com <javascript:=
>
>>>>> >:
>>>>>
>>>>>> What you describe are workarounds. If you want to use a temporary=20
>>>>>> lambda, you won't be able to keep the type around. Maybe you don't w=
ant to=20
>>>>>> specify the function signature and so std::function is not appropria=
te.
>>>>>>
>>>>>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com=
=20
>>>>>> <javascript:>>:
>>>>>>
>>>>>>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak w=
rote:
>>>>>>>>
>>>>>>>> Show us the actual (i.e. complete) example of why that be useful=
=20
>>>>>>>> (and why you wouldn't just use `std::function<void ()>`, or the so=
mewhat=20
>>>>>>>> proposed function_ref, for that).
>>>>>>>>
>>>>>>>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com>=20
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Let's say you store a lambda object into std::any
>>>>>>>>>
>>>>>>>>> std::any a =3D [](){};
>>>>>>>>>
>>>>>>>>> How are you going to obtain the lambda object back? AFAIK it's=20
>>>>>>>>> locked inside the any instance. If std::any had a mechanism of in=
voking the=20
>>>>>>>>> stored object you could still "reach" it.
>>>>>>>>>
>>>>>>>>
>>>>>>> any_cast. You have to keep the lambda type around of course. If you=
=20
>>>>>>> don't want to, wrap the lambda in a std::function first before putt=
ing it=20
>>>>>>> in an std::any.
>>>>>>> =20
>>>>>>>
>>>>>>>>
>>>>>>>>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>>>>>>>
>>>>>>>>>> I already wrote what I needed :) function<any(std::vector<any>)>=
=20
>>>>>>>>>> is simply blasphemous.
>>>>>>>>>>
>>>>>>>>>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <
>>>>>>>>>> gpde...@gmail.com>:
>>>>>>>>>>
>>>>>>>>>>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com=
=20
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> I believe that std::any should be made invokable, if an=20
>>>>>>>>>>>> invokable object is stored into it, such as a function pointer=
, method=20
>>>>>>>>>>>> pointer, or a functor (such as std::function<> and others). Th=
is would=20
>>>>>>>>>>>> raise the level of abstraction C++ offers to one comparable to=
 scripting=20
>>>>>>>>>>>> languages, where you can often invoke an arbitrary variable. I=
've prepared=20
>>>>>>>>>>>> 2 examples:
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Any is a polymorphic wrapper for any object modeling the=20
>>>>>>>>>>> CopyConstructible concept. Anything beyond that is out of scope=
.. In fact=20
>>>>>>>>>>> any doesn't even provide equality or ordering, which would seem=
 very basic.=20
>>>>>>>>>>>
>>>>>>>>>>> What you want is std::function (another polymorphic wrapper for=
=20
>>>>>>>>>>> types modeling the FunctionObject concept) . If you want fully =
dynamic=20
>>>>>>>>>>> behavior (including runtime type checking of parameters), use=
=20
>>>>>>>>>>> function<any(std::vector<any>)> and wrap the stored function in=
 an adaptor=20
>>>>>>>>>>> that does the unboxing of the parameters.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> --=20
>>>>>>>>> You received this message because you are subscribed to the Googl=
e=20
>>>>>>>>> Groups "ISO C++ Standard - Future Proposals" group.
>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,=
=20
>>>>>>>>> send an email to std-proposal...@isocpp.org.
>>>>>>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>>>>>>> To view this discussion on the web visit=20
>>>>>>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9=
E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com=20
>>>>>>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO=
9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_mediu=
m=3Demail&utm_source=3Dfooter>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>> --=20
>>>>>>> You received this message because you are subscribed to a topic in=
=20
>>>>>>> the Google Groups "ISO C++ Standard - Future Proposals" group.
>>>>>>> To unsubscribe from this topic, visit=20
>>>>>>> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8ur=
BWN7c/unsubscribe
>>>>>>> .
>>>>>>> To unsubscribe from this group and all its topics, send an email to=
=20
>>>>>>> std-proposal...@isocpp.org <javascript:>.
>>>>>>> To post to this group, send email to std-pr...@isocpp.org=20
>>>>>>> <javascript:>.
>>>>>>> To view this discussion on the web visit=20
>>>>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d=
8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org=20
>>>>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013=
d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=
=3Dfooter>
>>>>>>> .
>>>>>>>
>>>>>>
>>>>>>
>>>>> --=20
>>>>> You received this message because you are subscribed to the Google=20
>>>>> Groups "ISO C++ Standard - Future Proposals" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, sen=
d=20
>>>>> an email to std-proposal...@isocpp.org <javascript:>.
>>>>> To post to this group, send email to std-pr...@isocpp.org=20
>>>>> <javascript:>.
>>>>> To view this discussion on the web visit=20
>>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE=
Ds%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com=20
>>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8G=
EDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_mediu=
m=3Demail&utm_source=3Dfooter>
>>>>> .
>>>>>
>>>> --=20
>>>> You received this message because you are subscribed to a topic in the=
=20
>>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>>> To unsubscribe from this topic, visit=20
>>>> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN=
7c/unsubscribe
>>>> .
>>>> To unsubscribe from this group and all its topics, send an email to=20
>>>> std-proposal...@isocpp.org <javascript:>.
>>>> To post to this group, send email to std-pr...@isocpp.org <javascript:=
>
>>>> .
>>>>
>>> To view this discussion on the web visit=20
>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSF=
V30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com=20
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS=
FV30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>>>> .
>>>>
>>>
>>> --=20
>>> You received this message because you are subscribed to the Google=20
>>> Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this group and stop receiving emails from it, send=
=20
>>> an email to std-proposal...@isocpp.org <javascript:>.
>>> To post to this group, send email to std-pr...@isocpp.org <javascript:>=
..
>>> To view this discussion on the web visit=20
>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrH=
jykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com=20
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHr=
HjykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
>>> .
>>>
>> --=20
>> You received this message because you are subscribed to a topic in the=
=20
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit=20
>> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c=
/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, send an email to=20
>> std-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit=20
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9=
cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com=20
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx=
9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/9bfcc559-19bc-4bac-8027-a36c28a1a7c3%40isocpp.or=
g.

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

<div dir=3D"ltr">On Friday, 3 March 2017 14:05:46 UTC, janezz55 .  wrote:<b=
lockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;borde=
r-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">When you open y=
our browser the use cases are showing in front of your eyes, JavaScript pro=
grams storing functions in a variable. Python, lua and countless other scri=
pts doing the same. I can&#39;t believe you haven&#39;t seen any of this in=
 practice.</div></blockquote><div><br></div><div>It works in scripting lang=
uages because they have a rich base type (have you looked at the size of th=
e PyObject vtable?) that erases all the operations the language syntax allo=
ws on an object. We don&#39;t have that in C++ because of overhead and beca=
use it&#39;s incompatible with a Turing-complete compile time type system.<=
/div><div><br></div><div><div>Your proposed facility:</div><div><br></div><=
div>* Requires the target type to have exactly 1 call signature, so it won&=
#39;t work with multi-callables, overload combiners, or polymorphic or vari=
adic function objects, esp. closure types.</div><div>* Requires the caller =
to supply exactly the arguments corresponding to the signature of the targe=
t type (otherwise UB, assert or throw). So no arithmetic conversions, cvr c=
onversions or implicit conversions. That&#39;s a recipe for frustration.</d=
iv><div>* Asymmetry between argument and return types; why not require the =
user to specify the return type?</div><div>* Overhead: one extra function p=
ointer plus one extra typeid (for the signature type, if extant) per any in=
stance.</div></div><div><br></div><div>Now some constructive suggestions:</=
div><div><br></div><div>* The overhead is a defect of your implementation; =
you can move those members into the vtable, at the cost of an extra indirec=
tion.</div><div>* The return type could be provided by having your invoke m=
ember function take the return type as the first template parameter, or pre=
ferably providing a non-member invoke. That would also allow supplying argu=
ment types explicitly:</div><div><br></div><div>auto a =3D any{[](std::stri=
ng, unsigned) { return true; }};</div><div>auto b =3D invoke&lt;bool, std::=
string, unsigned&gt;(a, &quot;meow&quot;, 1);</div><div><br></div><div>Is t=
hat useful? I&#39;m not too sure, but at least it&#39;s clear what the faci=
lity can and cannot do. It still can&#39;t accept multi-signature callables=
..</div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div><di=
v class=3D"gmail_quote">2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <sp=
an dir=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated=
-mailto=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;j=
avascript:&#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;=
return true;">gri...@griwes.info</a>&gt;</span>:<br><blockquote class=3D"gm=
ail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div dir=3D"ltr">You&#39;ve asked for a feature, and yet you can&#3=
9;t produce an example of how that feature would be useful. This is the rat=
ional argument: we don&#39;t need features that don&#39;t have use cases.<d=
iv><br></div><div>Do show us examples of how this is useful and we might re=
consider this feature. Plain and simple like that. Throwing logical fallaci=
es around won&#39;t change it.</div></div><br><div class=3D"gmail_quote"><d=
iv><div><div dir=3D"ltr">On Fri, Mar 3, 2017 at 2:31 PM janezz55 . &lt;<a h=
ref=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ=
" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return =
true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">jane...@g=
mail.com</a>&gt; wrote:<br></div></div></div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div><div><div dir=3D"ltr">We don&#39;t need C++, ASM is sufficient, or an=
 arbitrary other computer language. 640k were sufficient at some point in t=
ime. I haven&#39;t heard a single rational argument from you. I&#39;d hate =
to have you as a boss.</div><div><br><div class=3D"gmail_quote"></div></div=
><div><div class=3D"gmail_quote">2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dom=
iniak <span dir=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gdf-o=
bfuscated-mailto=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=
=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39;javascri=
pt:&#39;;return true;">gri...@griwes.info</a>&gt;</span>:<br></div></div><d=
iv><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r">You&#39;re proposing a feature for the sake of having a feature. Give us=
 actual use cases if you think that is not true.<div><br></div><div>Having =
a feature that no-one will use is not beneficial.</div></div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 12:59 PM janezz55 =
.. &lt;<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"Eh=
7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#3=
9;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;"=
>jane...@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote=
" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><=
div dir=3D"ltr">As for me being a type ducking proponent... std::any in var=
ious forms has been around since 2001, I think. All the while until now you=
 could assign a function pointer or a member function pointer to it as well=
 as copyable function objects. It&#39;s nothing new. Adding the invocation =
feature would simply be a natural development in my opinion.</div><div><br>=
<div class=3D"gmail_quote">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=
=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailt=
o=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascr=
ipt:&#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return=
 true;">jane...@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div dir=3D"ltr">What you describe are workarounds. If you want to use a t=
emporary lambda, you won&#39;t be able to keep the type around. Maybe you d=
on&#39;t want to specify the function signature and so std::function is not=
 appropriate.</div><div><div><div><br><div class=3D"gmail_quote">2017-03-03=
 12:44 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr">&lt;<a href=3D"ja=
vascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" rel=3D"=
nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return true;" on=
click=3D"this.href=3D&#39;javascript:&#39;;return true;">gpde...@gmail.com<=
/a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 =
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><span>On=
 Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:</spa=
n><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><span><div dir=3D"ltr">Show us th=
e actual (i.e. complete) example of why that be useful (and why you wouldn&=
#39;t just use `std::function&lt;void ()&gt;`, or the somewhat proposed fun=
ction_ref, for that).</div><br></span><span><div class=3D"gmail_quote"><div=
 dir=3D"ltr">On Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofol=
low">jane...@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_q=
uote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1e=
x"><div dir=3D"ltr">Let&#39;s say you store a lambda object into std::any<d=
iv><br></div><div>std::any a =3D [](){};</div><div><br></div><div>How are y=
ou going to obtain the lambda object back? AFAIK it&#39;s locked inside the=
 any instance. If std::any had a mechanism of invoking the stored object yo=
u could still &quot;reach&quot; it.</div></div></blockquote></div></span></=
blockquote><div><br>any_cast. You have to keep the lambda type around of co=
urse. If you don&#39;t want to, wrap the lambda in a std::function first be=
fore putting it in an std::any.<br>=C2=A0</div><blockquote class=3D"gmail_q=
uote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddin=
g-left:1ex"><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>=
<br><div class=3D"gmail_quote"><span>2017-03-03 11:15 GMT+01:00 janezz55 . =
<span dir=3D"ltr">&lt;<a rel=3D"nofollow">jane...@gmail.com</a>&gt;</span>:=
<br></span><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><span><div dir=3D"ltr">I already =
wrote what I needed :) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; is =
simply blasphemous.</div></span><span><div><div><div><br><div class=3D"gmai=
l_quote">2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr=
">&lt;<a rel=3D"nofollow">gpde...@gmail.com</a>&gt;</span>:<br><blockquote =
class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div dir=3D"ltr">On Thursday, March 2, 2017 at 6:26:01 P=
M UTC, <a>jane...@gmail.com</a> wrote:<blockquote class=3D"gmail_quote" sty=
le=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1e=
x"><div dir=3D"ltr">I believe that std::any should be made invokable, if an=
 invokable object is stored into it, such as a function pointer, method poi=
nter, or a functor (such as std::function&lt;&gt; and others). This would r=
aise the level of abstraction C++ offers to one comparable to scripting lan=
guages, where you can often invoke an arbitrary variable. I&#39;ve prepared=
 2 examples:</div></blockquote><div><br>Any is a polymorphic wrapper for an=
y object modeling the CopyConstructible concept. Anything beyond that is ou=
t of scope. In fact any doesn&#39;t even provide equality or ordering, whic=
h would seem very basic. <br><br>What you want is std::function (another po=
lymorphic wrapper for types modeling the FunctionObject concept) . If you w=
ant fully dynamic behavior (including runtime type checking of parameters),=
 use function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored f=
unction in an adaptor that does the unboxing of the parameters.<br></div></=
div></blockquote></div><br></div>
</div></div></span></blockquote></div><br></div><span>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<span><br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" target=3D"_blank" onmousedown=3D"this.href=3D&#39;https:/=
/groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCU=
JzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium\x3demail\x26utm_=
source\x3dfooter&#39;;return true;" onclick=3D"this.href=3D&#39;https://gro=
ups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi=
5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium\x3demail\x26utm_sour=
ce\x3dfooter&#39;;return true;">https://groups.google.com/a/<wbr>isocpp.org=
/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GE2GR1GQRos5BCUJzLi5yaYu<wbr>p5XegKF=
253kwet6TFZBjg%40mail.<wbr>gmail.com</a>.<br>
</span></blockquote></div>
</blockquote></div><span>

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://groups.google.c=
om/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return t=
rue;" onclick=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/=
topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return true;">https://grou=
ps.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr=
>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" r=
el=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return tru=
e;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">std-proposal=
....@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank" =
rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://groups.google.com/=
a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40i=
socpp.org?utm_medium\x3demail\x26utm_source\x3dfooter&#39;;return true;" on=
click=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/msgid/st=
d-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium\x3=
demail\x26utm_source\x3dfooter&#39;;return true;">https://groups.google.com=
/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/a6013d8d-73a6-4f40-<wbr>bbc9-=
77e57123f68e%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div><span><font color=3D"#888888">
</font></span></div></div></blockquote></div><span><font color=3D"#888888">=
<br></font></span></div><span><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"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"=
Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&=
#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true=
;">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@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/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2Bmqoy=
CxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium\x3demail=
\x26utm_source\x3dfooter&#39;;return true;" onclick=3D"this.href=3D&#39;htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2Bmqoy=
CxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium\x3demail=
\x26utm_source\x3dfooter&#39;;return true;">https://groups.google.com/a/<wb=
r>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GEDs%<wbr>2BmqoyCxakK0v-hKoWc=
BYJE%<wbr>2B9rdXuNUyGMTRwqPFAw%40mail.<wbr>gmail.com</a>.<br>
</font></span></blockquote></div></blockquote></div></div><div><div class=
=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><span><font color=3D"#88888=
8">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://groups.google.c=
om/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return t=
rue;" onclick=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/=
topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return true;">https://grou=
ps.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr=
>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" r=
el=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return tru=
e;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">std-proposal=
....@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@isocpp.org</a>.<br></font></span>=
</blockquote></div></div><div><div class=3D"gmail_quote"><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><span><font color=3D"#888888">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https=
://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQ=
oooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium\x3demail\x26=
utm_source\x3dfooter&#39;;return true;" onclick=3D"this.href=3D&#39;https:/=
/groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoo=
oHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium\x3demail\x26ut=
m_source\x3dfooter&#39;;return true;">https://groups.google.com/a/<wbr>isoc=
pp.org/d/msgid/std-<wbr>proposals/CAPCFJdSFV30P%<wbr>3DdEQoooHcn05s6WqBiaV4=
XpyuQY4P<wbr>3jLkM5Dqg%40mail.gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"=
Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&=
#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true=
;">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@isocpp.org</a>.<br></div></div>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https=
://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv=
3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium\x3demail\x26=
utm_source\x3dfooter&#39;;return true;" onclick=3D"this.href=3D&#39;https:/=
/groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3R=
VBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium\x3demail\x26ut=
m_source\x3dfooter&#39;;return true;">https://groups.google.com/a/<wbr>isoc=
pp.org/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw<wbr>c=
F4gFMF5HP%2B2QFCWvRS4A%<wbr>40mail.gmail.com</a>.<br>
</blockquote></div><span>

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://groups.google.c=
om/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return t=
rue;" onclick=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/=
topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return true;">https://grou=
ps.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr=
>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" r=
el=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return tru=
e;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">std-proposal=
....@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"Eh7HJMxLCgAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https:/=
/groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1t=
zhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium\x3demail\x26utm_=
source\x3dfooter&#39;;return true;" onclick=3D"this.href=3D&#39;https://gro=
ups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmn=
rpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium\x3demail\x26utm_sour=
ce\x3dfooter&#39;;return true;">https://groups.google.com/a/<wbr>isocpp.org=
/d/msgid/std-<wbr>proposals/<wbr>CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ<wbr>FkP6CFq=
55NWM6HFLMgO-A%40mail.<wbr>gmail.com</a>.<br>
</blockquote></div><br></div>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/9bfcc559-19bc-4bac-8027-a36c28a1a7c3%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/9bfcc559-19bc-4bac-8027-a36c28a1a7c3=
%40isocpp.org</a>.<br />

------=_Part_673_1739527298.1488550950018--

------=_Part_672_1775159593.1488550950017--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 16:03:59 +0100
Raw View
--001a1143f4c00eec9c0549d4dbce
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Edward: Thanks for the suggestions. I didn't presume to think my
implementation was definitive. It is the closest we can get in C++ to what
the scripting languages have, without sacrificing too much, in my opinion.
The conversions you mention could be done, but only at the price of
significant overhead. Plain std::any does not support conversions when
casting either. If I wrote my own any, I'd definitely move everything I
could into the vtable of the holder, as you suggest. The any_function
implementation is just an example, an idea that occurred to me only
gradually.

I don't want the user specify the return type, because this is not
traditionally std::any-like. You can store almost anything into a std::any
instance, but you don't need to specify anything, there are no template
instantiations needed. Only when casting, do you need those.

I like your invoke() idea. If something like that were implemented, I'd be
perfectly pleased with it, but really, why not have a operator() as well?
It seems prettier to me, scripting language like. We can invoke a variable,
just like in a scripting language.

Michal: I'm using this as part of my signal/slot implementation. I don't
want to specify function signatures of my slots, that's the only reason why
I use this. The slots usually don't have many arguments as you want signal
handling to be fast , also conversions cost time so you don't really want
them, the single signature problem is not much of a problem. Take a look:

https://github.com/user1095108/crl

2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:

> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>>
>> When you open your browser the use cases are showing in front of your
>> eyes, JavaScript programs storing functions in a variable. Python, lua a=
nd
>> countless other scripts doing the same. I can't believe you haven't seen
>> any of this in practice.
>>
>
> It works in scripting languages because they have a rich base type (have
> you looked at the size of the PyObject vtable?) that erases all the
> operations the language syntax allows on an object. We don't have that in
> C++ because of overhead and because it's incompatible with a
> Turing-complete compile time type system.
>
> Your proposed facility:
>
> * Requires the target type to have exactly 1 call signature, so it won't
> work with multi-callables, overload combiners, or polymorphic or variadic
> function objects, esp. closure types.
> * Requires the caller to supply exactly the arguments corresponding to th=
e
> signature of the target type (otherwise UB, assert or throw). So no
> arithmetic conversions, cvr conversions or implicit conversions. That's a
> recipe for frustration.
> * Asymmetry between argument and return types; why not require the user t=
o
> specify the return type?
> * Overhead: one extra function pointer plus one extra typeid (for the
> signature type, if extant) per any instance.
>
> Now some constructive suggestions:
>
> * The overhead is a defect of your implementation; you can move those
> members into the vtable, at the cost of an extra indirection.
> * The return type could be provided by having your invoke member function
> take the return type as the first template parameter, or preferably
> providing a non-member invoke. That would also allow supplying argument
> types explicitly:
>
> auto a =3D any{[](std::string, unsigned) { return true; }};
> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>
> Is that useful? I'm not too sure, but at least it's clear what the
> facility can and cannot do. It still can't accept multi-signature callabl=
es.
>
> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>
>>> You've asked for a feature, and yet you can't produce an example of how
>>> that feature would be useful. This is the rational argument: we don't n=
eed
>>> features that don't have use cases.
>>>
>>> Do show us examples of how this is useful and we might reconsider this
>>> feature. Plain and simple like that. Throwing logical fallacies around
>>> won't change it.
>>>
>>> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>>>
>>>> We don't need C++, ASM is sufficient, or an arbitrary other computer
>>>> language. 640k were sufficient at some point in time. I haven't heard =
a
>>>> single rational argument from you. I'd hate to have you as a boss.
>>>>
>>>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>>>
>>>>> You're proposing a feature for the sake of having a feature. Give us
>>>>> actual use cases if you think that is not true.
>>>>>
>>>>> Having a feature that no-one will use is not beneficial.
>>>>>
>>>>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>>>>>
>>>>>> As for me being a type ducking proponent... std::any in various form=
s
>>>>>> has been around since 2001, I think. All the while until now you cou=
ld
>>>>>> assign a function pointer or a member function pointer to it as well=
 as
>>>>>> copyable function objects. It's nothing new. Adding the invocation f=
eature
>>>>>> would simply be a natural development in my opinion.
>>>>>>
>>>>>> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>>>>
>>>>>>> What you describe are workarounds. If you want to use a temporary
>>>>>>> lambda, you won't be able to keep the type around. Maybe you don't =
want to
>>>>>>> specify the function signature and so std::function is not appropri=
ate.
>>>>>>>
>>>>>>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.co=
m
>>>>>>> >:
>>>>>>>
>>>>>>>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak =
wrote:
>>>>>>>>>
>>>>>>>>> Show us the actual (i.e. complete) example of why that be useful
>>>>>>>>> (and why you wouldn't just use `std::function<void ()>`, or the s=
omewhat
>>>>>>>>> proposed function_ref, for that).
>>>>>>>>>
>>>>>>>>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Let's say you store a lambda object into std::any
>>>>>>>>>>
>>>>>>>>>> std::any a =3D [](){};
>>>>>>>>>>
>>>>>>>>>> How are you going to obtain the lambda object back? AFAIK it's
>>>>>>>>>> locked inside the any instance. If std::any had a mechanism of i=
nvoking the
>>>>>>>>>> stored object you could still "reach" it.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>> any_cast. You have to keep the lambda type around of course. If yo=
u
>>>>>>>> don't want to, wrap the lambda in a std::function first before put=
ting it
>>>>>>>> in an std::any.
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>>>>>>>>
>>>>>>>>>>> I already wrote what I needed :) function<any(std::vector<any>)=
>
>>>>>>>>>>> is simply blasphemous.
>>>>>>>>>>>
>>>>>>>>>>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <
>>>>>>>>>>> gpde...@gmail.com>:
>>>>>>>>>>>
>>>>>>>>>>>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.co=
m
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> I believe that std::any should be made invokable, if an
>>>>>>>>>>>>> invokable object is stored into it, such as a function pointe=
r, method
>>>>>>>>>>>>> pointer, or a functor (such as std::function<> and others). T=
his would
>>>>>>>>>>>>> raise the level of abstraction C++ offers to one comparable t=
o scripting
>>>>>>>>>>>>> languages, where you can often invoke an arbitrary variable. =
I've prepared
>>>>>>>>>>>>> 2 examples:
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Any is a polymorphic wrapper for any object modeling the
>>>>>>>>>>>> CopyConstructible concept. Anything beyond that is out of scop=
e. In fact
>>>>>>>>>>>> any doesn't even provide equality or ordering, which would see=
m very basic.
>>>>>>>>>>>>
>>>>>>>>>>>> What you want is std::function (another polymorphic wrapper fo=
r
>>>>>>>>>>>> types modeling the FunctionObject concept) . If you want fully=
 dynamic
>>>>>>>>>>>> behavior (including runtime type checking of parameters), use
>>>>>>>>>>>> function<any(std::vector<any>)> and wrap the stored function
>>>>>>>>>>>> in an adaptor that does the unboxing of the parameters.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>>>>>>>>> To unsubscribe from this group and stop receiving emails from it=
,
>>>>>>>>>> send an email to std-proposal...@isocpp.org.
>>>>>>>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals
>>>>>>>>>> /CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.
>>>>>>>>>> gmail.com
>>>>>>>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CA=
O9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medi=
um=3Demail&utm_source=3Dfooter>
>>>>>>>>>> .
>>>>>>>>>>
>>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to a topic in
>>>>>>>> the Google Groups "ISO C++ Standard - Future Proposals" group.
>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>> https://groups.google.com/a/isocpp.org/d/topic/std-proposals
>>>>>>>> /cJD8urBWN7c/unsubscribe.
>>>>>>>> To unsubscribe from this group and all its topics, send an email t=
o
>>>>>>>> std-proposal...@isocpp.org.
>>>>>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals
>>>>>>>> /a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org
>>>>>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a601=
3d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=
=3Dfooter>
>>>>>>>> .
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "ISO C++ Standard - Future Proposals" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to std-proposal...@isocpp.org.
>>>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals
>>>>>> /CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw
>>>>>> %40mail.gmail.com
>>>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8=
GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medi=
um=3Demail&utm_source=3Dfooter>
>>>>>> .
>>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to a topic in th=
e
>>>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> std-proposal...@isocpp.org.
>>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>>>
>>>> To view this discussion on the web visit https://groups.google.com/a/i=
s
>>>>> ocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6
>>>>> WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
>>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJd=
SFV30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>>>>> .
>>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "ISO C++ Standard - Future Proposals" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to std-proposal...@isocpp.org.
>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>> To view this discussion on the web visit https://groups.google.com/a/i=
s
>>>> ocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9D
>>>> wcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GH=
rHjykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>>>> .
>>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZh
>>> ZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSH=
x9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
>>> .
>>>
>>
>>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PF=
e0X4UOkiw%40mail.gmail.com.

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

<div dir=3D"ltr">Edward: Thanks for the suggestions. I didn&#39;t presume t=
o think my implementation was definitive. It is the closest we can get in C=
++ to what the scripting languages have, without sacrificing too much, in m=
y opinion. The conversions you mention could be done, but only at the price=
 of significant overhead. Plain std::any does not support conversions when =
casting either. If I wrote my own any, I&#39;d definitely move everything I=
 could into the vtable of the holder, as you suggest. The any_function impl=
ementation is just an example, an idea that occurred to me only gradually.<=
div><br></div><div>I don&#39;t want the user specify the return type, becau=
se this is not traditionally std::any-like. You can store almost anything i=
nto a std::any instance, but you don&#39;t need to specify anything, there =
are no template instantiations needed. Only when casting, do you need those=
..</div><div><br></div><div>I like your invoke() idea. If something like tha=
t were implemented, I&#39;d be perfectly pleased with it, but really, why n=
ot have a operator() as well? It seems prettier to me, scripting language l=
ike. We can invoke a variable, just like in a scripting language.<br><div><=
br></div><div>Michal: I&#39;m using this as part of my signal/slot implemen=
tation. I don&#39;t want to specify function signatures of my slots, that&#=
39;s the only reason why I use this. The slots usually don&#39;t have many =
arguments as you want signal handling to be fast , also conversions cost ti=
me so you don&#39;t really want them, the single signature problem is not m=
uch of a problem. Take a look:</div><div><br></div><div><a href=3D"https://=
github.com/user1095108/crl">https://github.com/user1095108/crl</a><br></div=
><div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-03 =
15:22 GMT+01:00 Edward Catmur <span dir=3D"ltr">&lt;<a href=3D"mailto:ed@ca=
tmur.co.uk" target=3D"_blank">ed@catmur.co.uk</a>&gt;</span>:<br><blockquot=
e class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px s=
olid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><span class=3D"gma=
il-">On Friday, 3 March 2017 14:05:46 UTC, janezz55 .  wrote:<blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">When you open your bro=
wser the use cases are showing in front of your eyes, JavaScript programs s=
toring functions in a variable. Python, lua and countless other scripts doi=
ng the same. I can&#39;t believe you haven&#39;t seen any of this in practi=
ce.</div></blockquote><div><br></div></span><div>It works in scripting lang=
uages because they have a rich base type (have you looked at the size of th=
e PyObject vtable?) that erases all the operations the language syntax allo=
ws on an object. We don&#39;t have that in C++ because of overhead and beca=
use it&#39;s incompatible with a Turing-complete compile time type system.<=
/div><div><br></div><div><div>Your proposed facility:</div><div><br></div><=
div>* Requires the target type to have exactly 1 call signature, so it won&=
#39;t work with multi-callables, overload combiners, or polymorphic or vari=
adic function objects, esp. closure types.</div><div>* Requires the caller =
to supply exactly the arguments corresponding to the signature of the targe=
t type (otherwise UB, assert or throw). So no arithmetic conversions, cvr c=
onversions or implicit conversions. That&#39;s a recipe for frustration.</d=
iv><div>* Asymmetry between argument and return types; why not require the =
user to specify the return type?</div><div>* Overhead: one extra function p=
ointer plus one extra typeid (for the signature type, if extant) per any in=
stance.</div></div><div><br></div><div>Now some constructive suggestions:</=
div><div><br></div><div>* The overhead is a defect of your implementation; =
you can move those members into the vtable, at the cost of an extra indirec=
tion.</div><div>* The return type could be provided by having your invoke m=
ember function take the return type as the first template parameter, or pre=
ferably providing a non-member invoke. That would also allow supplying argu=
ment types explicitly:</div><div><br></div><div>auto a =3D any{[](std::stri=
ng, unsigned) { return true; }};</div><div>auto b =3D invoke&lt;bool, std::=
string, unsigned&gt;(a, &quot;meow&quot;, 1);</div><div><br></div><div>Is t=
hat useful? I&#39;m not too sure, but at least it&#39;s clear what the faci=
lity can and cannot do. It still can&#39;t accept multi-signature callables=
..</div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><di=
v><div class=3D"gmail_quote"><span class=3D"gmail-">2017-03-03 14:46 GMT+01=
:00 Micha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a rel=3D"nofollow">gri...@g=
riwes.info</a>&gt;</span>:<br></span><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex"><span class=3D"gmail-"><div dir=3D"ltr">You&#39;ve asked for a =
feature, and yet you can&#39;t produce an example of how that feature would=
 be useful. This is the rational argument: we don&#39;t need features that =
don&#39;t have use cases.<div><br></div><div>Do show us examples of how thi=
s is useful and we might reconsider this feature. Plain and simple like tha=
t. Throwing logical fallacies around won&#39;t change it.</div></div><br></=
span><div class=3D"gmail_quote"><span class=3D"gmail-"><div><div><div dir=
=3D"ltr">On Fri, Mar 3, 2017 at 2:31 PM janezz55 . &lt;<a rel=3D"nofollow">=
jane...@gmail.com</a>&gt; wrote:<br></div></div></div></span><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex"><div><div><span class=3D"gmail-"><div d=
ir=3D"ltr">We don&#39;t need C++, ASM is sufficient, or an arbitrary other =
computer language. 640k were sufficient at some point in time. I haven&#39;=
t heard a single rational argument from you. I&#39;d hate to have you as a =
boss.</div><div><br><div class=3D"gmail_quote"></div></div></span><span cla=
ss=3D"gmail-"><div><div class=3D"gmail_quote">2017-03-03 14:25 GMT+01:00 Mi=
cha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a rel=3D"nofollow">gri...@griwes.=
info</a>&gt;</span>:<br></div></div></span><div><div class=3D"gmail_quote">=
<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-=
left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"gmail-"><d=
iv dir=3D"ltr">You&#39;re proposing a feature for the sake of having a feat=
ure. Give us actual use cases if you think that is not true.<div><br></div>=
<div>Having a feature that no-one will use is not beneficial.</div></div><b=
r></span><div class=3D"gmail_quote"><span class=3D"gmail-"><div dir=3D"ltr"=
>On Fri, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a rel=3D"nofollow">jane...=
@gmail.com</a>&gt; wrote:<br></div></span><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex"><span class=3D"gmail-"><div dir=3D"ltr">As for me being a =
type ducking proponent... std::any in various forms has been around since 2=
001, I think. All the while until now you could assign a function pointer o=
r a member function pointer to it as well as copyable function objects. It&=
#39;s nothing new. Adding the invocation feature would simply be a natural =
development in my opinion.</div></span><div><br><div class=3D"gmail_quote">=
<span class=3D"gmail-">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=3D"l=
tr">&lt;<a rel=3D"nofollow">jane...@gmail.com</a>&gt;</span>:<br></span><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"gmail-"><div =
dir=3D"ltr">What you describe are workarounds. If you want to use a tempora=
ry lambda, you won&#39;t be able to keep the type around. Maybe you don&#39=
;t want to specify the function signature and so std::function is not appro=
priate.</div></span><div><div><div><br><div class=3D"gmail_quote"><span cla=
ss=3D"gmail-">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <span dir=
=3D"ltr">&lt;<a rel=3D"nofollow">gpde...@gmail.com</a>&gt;</span>:<br></spa=
n><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;borde=
r-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"gmail-">=
<div dir=3D"ltr"><span>On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=
=C5=82 Dominiak wrote:</span><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1=
ex"><span><div dir=3D"ltr">Show us the actual (i.e. complete) example of wh=
y that be useful (and why you wouldn&#39;t just use `std::function&lt;void =
()&gt;`, or the somewhat proposed function_ref, for that).</div><br></span>=
<span><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 12=
:10 PM janezz55 . &lt;<a rel=3D"nofollow">jane...@gmail.com</a>&gt; wrote:<=
br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"=
>Let&#39;s say you store a lambda object into std::any<div><br></div><div>s=
td::any a =3D [](){};</div><div><br></div><div>How are you going to obtain =
the lambda object back? AFAIK it&#39;s locked inside the any instance. If s=
td::any had a mechanism of invoking the stored object you could still &quot=
;reach&quot; it.</div></div></blockquote></div></span></blockquote><div><br=
>any_cast. You have to keep the lambda type around of course. If you don&#3=
9;t want to, wrap the lambda in a std::function first before putting it in =
an std::any.<br>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1e=
x"><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:=
1ex"><div><br><div class=3D"gmail_quote"><span>2017-03-03 11:15 GMT+01:00 j=
anezz55 . <span dir=3D"ltr">&lt;<a rel=3D"nofollow">jane...@gmail.com</a>&g=
t;</span>:<br></span><blockquote class=3D"gmail_quote" style=3D"margin:0px =
0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><spa=
n><div dir=3D"ltr">I already wrote what I needed :) function&lt;any(std::ve=
ctor&lt;any&gt;)<wbr>&gt; is simply blasphemous.</div></span><span><div><di=
v><div><br><div class=3D"gmail_quote">2017-03-03 11:09 GMT+01:00 Giovanni P=
iero Deretta <span dir=3D"ltr">&lt;<a rel=3D"nofollow">gpde...@gmail.com</a=
>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a>jane...@gmail.com=
</a> wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.=
8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"lt=
r">I believe that std::any should be made invokable, if an invokable object=
 is stored into it, such as a function pointer, method pointer, or a functo=
r (such as std::function&lt;&gt; and others). This would raise the level of=
 abstraction C++ offers to one comparable to scripting languages, where you=
 can often invoke an arbitrary variable. I&#39;ve prepared 2 examples:</div=
></blockquote><div><br>Any is a polymorphic wrapper for any object modeling=
 the CopyConstructible concept. Anything beyond that is out of scope. In fa=
ct any doesn&#39;t even provide equality or ordering, which would seem very=
 basic. <br><br>What you want is std::function (another polymorphic wrapper=
 for types modeling the FunctionObject concept) . If you want fully dynamic=
 behavior (including runtime type checking of parameters), use function&lt;=
any(std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored function in an ada=
ptor that does the unboxing of the parameters.<br></div></div></blockquote>=
</div><br></div>
</div></div></span></blockquote></div><br></div><span>

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<span><br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp=
..org/d/msgid/std-proposals<wbr>/CAO9E8GE2GR1GQRos5BCUJzLi5yaY<wbr>up5XegKF2=
53kwet6TFZBjg%40mail.<wbr>gmail.com</a>.<br>
</span></blockquote></div>
</blockquote></div></span><span><span class=3D"gmail-">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std=
-proposals<wbr>/cJD8urBWN7c/unsubscribe</a>.<br></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow">std-proposal...@isocpp.org</a>.<span class=3D"gmail-"><br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<br></span></span><span class=3D"gmail-">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" t=
arget=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-pr=
oposals<wbr>/a6013d8d-73a6-4f40-bbc9-<wbr>77e57123f68e%40isocpp.org</a>.<br=
>
</span></blockquote></div><br></div><span><font color=3D"#888888">
</font></span></div></div></blockquote></div><span><font color=3D"#888888">=
<br></font></span></div><span><font color=3D"#888888"><span class=3D"gmail-=
">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></span><span class=
=3D"gmail-">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<br></span><span class=3D"gmail-">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" target=3D"_blank">https://groups.google.com/a/is<wbr>=
ocpp.org/d/msgid/std-proposals<wbr>/CAO9E8GEDs%2BmqoyCxakK0v-<wbr>hKoWcBYJE=
%2B9rdXuNUyGMTRwqPFAw<wbr>%40mail.gmail.com</a>.<br>
</span></font></span></blockquote></div></blockquote></div></div><div><div =
class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><sp=
an><font color=3D"#888888"><span class=3D"gmail-">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std=
-proposals<wbr>/cJD8urBWN7c/unsubscribe</a>.<br></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow">std-proposal...@isocpp.org</a>.<span class=3D"gmail-"><br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<br></span></font></span></blockquote></div></div><div><div class=3D=
"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px=
 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span><font=
 color=3D"#888888">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" target=3D"_blank">https://groups.google.com/a/is<wbr>oc=
pp.org/d/msgid/std-proposals<wbr>/CAPCFJdSFV30P%3DdEQoooHcn05s6<wbr>WqBiaV4=
XpyuQY4P3jLkM5Dqg%<wbr>40mail.gmail.com</a>.<br>
</font></span></blockquote></div><br></div><span class=3D"gmail-">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></span><span class=
=3D"gmail-">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow">std-proposal...@isocpp.org</a>.<br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<br></span></div></div><span class=3D"gmail-">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" target=3D"_blank">https://groups.google.com/a/is<wbr>oc=
pp.org/d/msgid/std-proposals<wbr>/CAO9E8GHrHjykbpVLJv3RVBL7QK9D<wbr>wcF4gFM=
F5HP%2B2QFCWvRS4A%40mai<wbr>l.gmail.com</a>.<br>
</span></blockquote></div><span><span class=3D"gmail-">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std=
-proposals<wbr>/cJD8urBWN7c/unsubscribe</a>.<br></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow">std-proposal...@isocpp.org</a>.<span class=3D"gmail-"><br>
To post to this group, send email to <a rel=3D"nofollow">std-pr...@isocpp.o=
rg</a>.<br></span></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp=
..org/d/msgid/std-proposals<wbr>/CAPCFJdSHx9cFUfnn4a1tzhmnrpZh<wbr>ZFkP6CFq5=
5NWM6HFLMgO-A%40mail.<wbr>gmail.com</a>.<br>
</blockquote></div><br></div>
</blockquote></div></blockquote></div><br></div></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCV=
Z5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com</a>.<br />

--001a1143f4c00eec9c0549d4dbce--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 15:09:59 +0000
Raw View
--001a114dc5861a18870549d4f126
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

So your use-case that's supposed to convince the committee is "I want to
throw away type safety for my thing, help me with doing that"?

On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:

> Edward: Thanks for the suggestions. I didn't presume to think my
> implementation was definitive. It is the closest we can get in C++ to wha=
t
> the scripting languages have, without sacrificing too much, in my opinion=
..
> The conversions you mention could be done, but only at the price of
> significant overhead. Plain std::any does not support conversions when
> casting either. If I wrote my own any, I'd definitely move everything I
> could into the vtable of the holder, as you suggest. The any_function
> implementation is just an example, an idea that occurred to me only
> gradually.
>
> I don't want the user specify the return type, because this is not
> traditionally std::any-like. You can store almost anything into a std::an=
y
> instance, but you don't need to specify anything, there are no template
> instantiations needed. Only when casting, do you need those.
>
> I like your invoke() idea. If something like that were implemented, I'd b=
e
> perfectly pleased with it, but really, why not have a operator() as well?
> It seems prettier to me, scripting language like. We can invoke a variabl=
e,
> just like in a scripting language.
>
> Michal: I'm using this as part of my signal/slot implementation. I don't
> want to specify function signatures of my slots, that's the only reason w=
hy
> I use this. The slots usually don't have many arguments as you want signa=
l
> handling to be fast , also conversions cost time so you don't really want
> them, the single signature problem is not much of a problem. Take a look:
>
> https://github.com/user1095108/crl
>
> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>
> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>
> When you open your browser the use cases are showing in front of your
> eyes, JavaScript programs storing functions in a variable. Python, lua an=
d
> countless other scripts doing the same. I can't believe you haven't seen
> any of this in practice.
>
>
> It works in scripting languages because they have a rich base type (have
> you looked at the size of the PyObject vtable?) that erases all the
> operations the language syntax allows on an object. We don't have that in
> C++ because of overhead and because it's incompatible with a
> Turing-complete compile time type system.
>
> Your proposed facility:
>
> * Requires the target type to have exactly 1 call signature, so it won't
> work with multi-callables, overload combiners, or polymorphic or variadic
> function objects, esp. closure types.
> * Requires the caller to supply exactly the arguments corresponding to th=
e
> signature of the target type (otherwise UB, assert or throw). So no
> arithmetic conversions, cvr conversions or implicit conversions. That's a
> recipe for frustration.
> * Asymmetry between argument and return types; why not require the user t=
o
> specify the return type?
> * Overhead: one extra function pointer plus one extra typeid (for the
> signature type, if extant) per any instance.
>
> Now some constructive suggestions:
>
> * The overhead is a defect of your implementation; you can move those
> members into the vtable, at the cost of an extra indirection.
> * The return type could be provided by having your invoke member function
> take the return type as the first template parameter, or preferably
> providing a non-member invoke. That would also allow supplying argument
> types explicitly:
>
> auto a =3D any{[](std::string, unsigned) { return true; }};
> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>
> Is that useful? I'm not too sure, but at least it's clear what the
> facility can and cannot do. It still can't accept multi-signature callabl=
es.
>
> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>
> You've asked for a feature, and yet you can't produce an example of how
> that feature would be useful. This is the rational argument: we don't nee=
d
> features that don't have use cases.
>
> Do show us examples of how this is useful and we might reconsider this
> feature. Plain and simple like that. Throwing logical fallacies around
> won't change it.
>
> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>
> We don't need C++, ASM is sufficient, or an arbitrary other computer
> language. 640k were sufficient at some point in time. I haven't heard a
> single rational argument from you. I'd hate to have you as a boss.
>
> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>
> You're proposing a feature for the sake of having a feature. Give us
> actual use cases if you think that is not true.
>
> Having a feature that no-one will use is not beneficial.
>
> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>
> As for me being a type ducking proponent... std::any in various forms has
> been around since 2001, I think. All the while until now you could assign=
 a
> function pointer or a member function pointer to it as well as copyable
> function objects. It's nothing new. Adding the invocation feature would
> simply be a natural development in my opinion.
>
> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> What you describe are workarounds. If you want to use a temporary lambda,
> you won't be able to keep the type around. Maybe you don't want to specif=
y
> the function signature and so std::function is not appropriate.
>
> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>
> Show us the actual (i.e. complete) example of why that be useful (and why
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>
> Let's say you store a lambda object into std::any
>
> std::any a =3D [](){};
>
> How are you going to obtain the lambda object back? AFAIK it's locked
> inside the any instance. If std::any had a mechanism of invoking the stor=
ed
> object you could still "reach" it.
>
>
> any_cast. You have to keep the lambda type around of course. If you don't
> want to, wrap the lambda in a std::function first before putting it in an
> std::any.
>
>
>
> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> I already wrote what I needed :) function<any(std::vector<any>)> is simpl=
y
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a funct=
or
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where yo=
u
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructibl=
e
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adapto=
r
> that does the unboxing of the parameters.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1=
GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR=
1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a=
6-4f40-bbc9-77e57123f68e%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73=
a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2=
BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%=
2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
>
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30=
P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV3=
0P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjy=
kbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHj=
ykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9c=
FUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9=
cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
>
>
> --
> 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/CAO9E8GGYCVZ=
5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCV=
Z5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0o=
V4Q%40mail.gmail.com.

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

<div dir=3D"ltr">So your use-case that&#39;s supposed to convince the commi=
ttee is &quot;I want to throw away type safety for my thing, help me with d=
oing that&quot;?</div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fr=
i, Mar 3, 2017 at 4:04 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.c=
om">janezz55@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_q=
uote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1e=
x"><div dir=3D"ltr" class=3D"gmail_msg">Edward: Thanks for the suggestions.=
 I didn&#39;t presume to think my implementation was definitive. It is the =
closest we can get in C++ to what the scripting languages have, without sac=
rificing too much, in my opinion. The conversions you mention could be done=
, but only at the price of significant overhead. Plain std::any does not su=
pport conversions when casting either. If I wrote my own any, I&#39;d defin=
itely move everything I could into the vtable of the holder, as you suggest=
.. The any_function implementation is just an example, an idea that occurred=
 to me only gradually.<div class=3D"gmail_msg"><br class=3D"gmail_msg"></di=
v><div class=3D"gmail_msg">I don&#39;t want the user specify the return typ=
e, because this is not traditionally std::any-like. You can store almost an=
ything into a std::any instance, but you don&#39;t need to specify anything=
, there are no template instantiations needed. Only when casting, do you ne=
ed those.</div><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div =
class=3D"gmail_msg">I like your invoke() idea. If something like that were =
implemented, I&#39;d be perfectly pleased with it, but really, why not have=
 a operator() as well? It seems prettier to me, scripting language like. We=
 can invoke a variable, just like in a scripting language.<br class=3D"gmai=
l_msg"><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div class=3D=
"gmail_msg">Michal: I&#39;m using this as part of my signal/slot implementa=
tion. I don&#39;t want to specify function signatures of my slots, that&#39=
;s the only reason why I use this. The slots usually don&#39;t have many ar=
guments as you want signal handling to be fast , also conversions cost time=
 so you don&#39;t really want them, the single signature problem is not muc=
h of a problem. Take a look:</div><div class=3D"gmail_msg"><br class=3D"gma=
il_msg"></div><div class=3D"gmail_msg"><a href=3D"https://github.com/user10=
95108/crl" class=3D"gmail_msg" target=3D"_blank">https://github.com/user109=
5108/crl</a><br class=3D"gmail_msg"></div></div></div><div dir=3D"ltr" clas=
s=3D"gmail_msg"><div class=3D"gmail_msg"><div class=3D"gmail_msg"><div clas=
s=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div class=3D"gmail_quo=
te gmail_msg">2017-03-03 15:22 GMT+01:00 Edward Catmur <span dir=3D"ltr" cl=
ass=3D"gmail_msg">&lt;<a href=3D"mailto:ed@catmur.co.uk" class=3D"gmail_msg=
" target=3D"_blank">ed@catmur.co.uk</a>&gt;</span>:<br class=3D"gmail_msg">=
<blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr=
" class=3D"gmail_msg"><span class=3D"m_-6275472275488112246gmail- gmail_msg=
">On Friday, 3 March 2017 14:05:46 UTC, janezz55 .  wrote:<blockquote class=
=3D"gmail_quote gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1p=
x solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_=
msg">When you open your browser the use cases are showing in front of your =
eyes, JavaScript programs storing functions in a variable. Python, lua and =
countless other scripts doing the same. I can&#39;t believe you haven&#39;t=
 seen any of this in practice.</div></blockquote><div class=3D"gmail_msg"><=
br class=3D"gmail_msg"></div></span><div class=3D"gmail_msg">It works in sc=
ripting languages because they have a rich base type (have you looked at th=
e size of the PyObject vtable?) that erases all the operations the language=
 syntax allows on an object. We don&#39;t have that in C++ because of overh=
ead and because it&#39;s incompatible with a Turing-complete compile time t=
ype system.</div><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><di=
v class=3D"gmail_msg"><div class=3D"gmail_msg">Your proposed facility:</div=
><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div class=3D"gmail=
_msg">* Requires the target type to have exactly 1 call signature, so it wo=
n&#39;t work with multi-callables, overload combiners, or polymorphic or va=
riadic function objects, esp. closure types.</div><div class=3D"gmail_msg">=
* Requires the caller to supply exactly the arguments corresponding to the =
signature of the target type (otherwise UB, assert or throw). So no arithme=
tic conversions, cvr conversions or implicit conversions. That&#39;s a reci=
pe for frustration.</div><div class=3D"gmail_msg">* Asymmetry between argum=
ent and return types; why not require the user to specify the return type?<=
/div><div class=3D"gmail_msg">* Overhead: one extra function pointer plus o=
ne extra typeid (for the signature type, if extant) per any instance.</div>=
</div><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div class=3D"=
gmail_msg">Now some constructive suggestions:</div><div class=3D"gmail_msg"=
><br class=3D"gmail_msg"></div><div class=3D"gmail_msg">* The overhead is a=
 defect of your implementation; you can move those members into the vtable,=
 at the cost of an extra indirection.</div><div class=3D"gmail_msg">* The r=
eturn type could be provided by having your invoke member function take the=
 return type as the first template parameter, or preferably providing a non=
-member invoke. That would also allow supplying argument types explicitly:<=
/div><div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div class=3D"g=
mail_msg">auto a =3D any{[](std::string, unsigned) { return true; }};</div>=
<div class=3D"gmail_msg">auto b =3D invoke&lt;bool, std::string, unsigned&g=
t;(a, &quot;meow&quot;, 1);</div><div class=3D"gmail_msg"><br class=3D"gmai=
l_msg"></div><div class=3D"gmail_msg">Is that useful? I&#39;m not too sure,=
 but at least it&#39;s clear what the facility can and cannot do. It still =
can&#39;t accept multi-signature callables.</div><div class=3D"gmail_msg"><=
br class=3D"gmail_msg"></div><blockquote class=3D"gmail_quote gmail_msg" st=
yle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padd=
ing-left:1ex"><div class=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg"=
><span class=3D"m_-6275472275488112246gmail- gmail_msg">2017-03-03 14:46 GM=
T+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"gmail_msg">&lt;<a r=
el=3D"nofollow" class=3D"gmail_msg">gri...@griwes.info</a>&gt;</span>:<br c=
lass=3D"gmail_msg"></span><blockquote class=3D"gmail_quote gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><span class=3D"m_-6275472275488112246gmail- gmail_msg"><div dir=
=3D"ltr" class=3D"gmail_msg">You&#39;ve asked for a feature, and yet you ca=
n&#39;t produce an example of how that feature would be useful. This is the=
 rational argument: we don&#39;t need features that don&#39;t have use case=
s.<div class=3D"gmail_msg"><br class=3D"gmail_msg"></div><div class=3D"gmai=
l_msg">Do show us examples of how this is useful and we might reconsider th=
is feature. Plain and simple like that. Throwing logical fallacies around w=
on&#39;t change it.</div></div><br class=3D"gmail_msg"></span><div class=3D=
"gmail_quote gmail_msg"><span class=3D"m_-6275472275488112246gmail- gmail_m=
sg"><div class=3D"gmail_msg"><div class=3D"gmail_msg"><div dir=3D"ltr" clas=
s=3D"gmail_msg">On Fri, Mar 3, 2017 at 2:31 PM janezz55 . &lt;<a rel=3D"nof=
ollow" class=3D"gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D"gma=
il_msg"></div></div></div></span><blockquote class=3D"gmail_quote gmail_msg=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex"><div class=3D"gmail_msg"><div class=3D"gmail_msg"><span c=
lass=3D"m_-6275472275488112246gmail- gmail_msg"><div dir=3D"ltr" class=3D"g=
mail_msg">We don&#39;t need C++, ASM is sufficient, or an arbitrary other c=
omputer language. 640k were sufficient at some point in time. I haven&#39;t=
 heard a single rational argument from you. I&#39;d hate to have you as a b=
oss.</div><div class=3D"gmail_msg"><br class=3D"gmail_msg"><div class=3D"gm=
ail_quote gmail_msg"></div></div></span><span class=3D"m_-62754722754881122=
46gmail- gmail_msg"><div class=3D"gmail_msg"><div class=3D"gmail_quote gmai=
l_msg">2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" cl=
ass=3D"gmail_msg">&lt;<a rel=3D"nofollow" class=3D"gmail_msg">gri...@griwes=
..info</a>&gt;</span>:<br class=3D"gmail_msg"></div></div></span><div class=
=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=3D"gm=
ail_quote gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex"><span class=3D"m_-6275472275488112246g=
mail- gmail_msg"><div dir=3D"ltr" class=3D"gmail_msg">You&#39;re proposing =
a feature for the sake of having a feature. Give us actual use cases if you=
 think that is not true.<div class=3D"gmail_msg"><br class=3D"gmail_msg"></=
div><div class=3D"gmail_msg">Having a feature that no-one will use is not b=
eneficial.</div></div><br class=3D"gmail_msg"></span><div class=3D"gmail_qu=
ote gmail_msg"><span class=3D"m_-6275472275488112246gmail- gmail_msg"><div =
dir=3D"ltr" class=3D"gmail_msg">On Fri, Mar 3, 2017 at 12:59 PM janezz55 . =
&lt;<a rel=3D"nofollow" class=3D"gmail_msg">jane...@gmail.com</a>&gt; wrote=
:<br class=3D"gmail_msg"></div></span><blockquote class=3D"gmail_quote gmai=
l_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,=
204);padding-left:1ex"><span class=3D"m_-6275472275488112246gmail- gmail_ms=
g"><div dir=3D"ltr" class=3D"gmail_msg">As for me being a type ducking prop=
onent... std::any in various forms has been around since 2001, I think. All=
 the while until now you could assign a function pointer or a member functi=
on pointer to it as well as copyable function objects. It&#39;s nothing new=
.. Adding the invocation feature would simply be a natural development in my=
 opinion.</div></span><div class=3D"gmail_msg"><br class=3D"gmail_msg"><div=
 class=3D"gmail_quote gmail_msg"><span class=3D"m_-6275472275488112246gmail=
- gmail_msg">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=3D"ltr" class=
=3D"gmail_msg">&lt;<a rel=3D"nofollow" class=3D"gmail_msg">jane...@gmail.co=
m</a>&gt;</span>:<br class=3D"gmail_msg"></span><blockquote class=3D"gmail_=
quote gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex"><span class=3D"m_-6275472275488112246gmail=
- gmail_msg"><div dir=3D"ltr" class=3D"gmail_msg">What you describe are wor=
karounds. If you want to use a temporary lambda, you won&#39;t be able to k=
eep the type around. Maybe you don&#39;t want to specify the function signa=
ture and so std::function is not appropriate.</div></span><div class=3D"gma=
il_msg"><div class=3D"gmail_msg"><div class=3D"gmail_msg"><br class=3D"gmai=
l_msg"><div class=3D"gmail_quote gmail_msg"><span class=3D"m_-6275472275488=
112246gmail- gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <=
span dir=3D"ltr" class=3D"gmail_msg">&lt;<a rel=3D"nofollow" class=3D"gmail=
_msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"gmail_msg"></span><bloc=
kquote class=3D"gmail_quote gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_-62=
75472275488112246gmail- gmail_msg"><div dir=3D"ltr" class=3D"gmail_msg"><sp=
an class=3D"gmail_msg">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=
=C5=82 Dominiak wrote:</span><blockquote class=3D"gmail_quote gmail_msg" st=
yle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padd=
ing-left:1ex"><span class=3D"gmail_msg"><div dir=3D"ltr" class=3D"gmail_msg=
">Show us the actual (i.e. complete) example of why that be useful (and why=
 you wouldn&#39;t just use `std::function&lt;void ()&gt;`, or the somewhat =
proposed function_ref, for that).</div><br class=3D"gmail_msg"></span><span=
 class=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg"><div dir=3D"ltr" =
class=3D"gmail_msg">On Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a rel=
=3D"nofollow" class=3D"gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=
=3D"gmail_msg"></div><blockquote class=3D"gmail_quote gmail_msg" style=3D"m=
argin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left=
:1ex"><div dir=3D"ltr" class=3D"gmail_msg">Let&#39;s say you store a lambda=
 object into std::any<div class=3D"gmail_msg"><br class=3D"gmail_msg"></div=
><div class=3D"gmail_msg">std::any a =3D [](){};</div><div class=3D"gmail_m=
sg"><br class=3D"gmail_msg"></div><div class=3D"gmail_msg">How are you goin=
g to obtain the lambda object back? AFAIK it&#39;s locked inside the any in=
stance. If std::any had a mechanism of invoking the stored object you could=
 still &quot;reach&quot; it.</div></div></blockquote></div></span></blockqu=
ote><div class=3D"gmail_msg"><br class=3D"gmail_msg">any_cast. You have to =
keep the lambda type around of course. If you don&#39;t want to, wrap the l=
ambda in a std::function first before putting it in an std::any.<br class=
=3D"gmail_msg">=C2=A0</div><blockquote class=3D"gmail_quote gmail_msg" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex"><div class=3D"gmail_quote gmail_msg"><blockquote class=3D"gmail=
_quote gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid r=
gb(204,204,204);padding-left:1ex"><div class=3D"gmail_msg"><br class=3D"gma=
il_msg"><div class=3D"gmail_quote gmail_msg"><span class=3D"gmail_msg">2017=
-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"gmail_msg">&lt=
;<a rel=3D"nofollow" class=3D"gmail_msg">jane...@gmail.com</a>&gt;</span>:<=
br class=3D"gmail_msg"></span><blockquote class=3D"gmail_quote gmail_msg" s=
tyle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pad=
ding-left:1ex"><span class=3D"gmail_msg"><div dir=3D"ltr" class=3D"gmail_ms=
g">I already wrote what I needed :) function&lt;any(std::vector&lt;any&gt;)=
&gt; is simply blasphemous.</div></span><span class=3D"gmail_msg"><div clas=
s=3D"gmail_msg"><div class=3D"gmail_msg"><div class=3D"gmail_msg"><br class=
=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg">2017-03-03 11:09 GMT+01=
:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"gmail_msg">&lt;<a rel=
=3D"nofollow" class=3D"gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br clas=
s=3D"gmail_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin=
:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"=
><div dir=3D"ltr" class=3D"gmail_msg">On Thursday, March 2, 2017 at 6:26:01=
 PM UTC, <a class=3D"gmail_msg">jane...@gmail.com</a> wrote:<blockquote cla=
ss=3D"gmail_quote gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"gmai=
l_msg">I believe that std::any should be made invokable, if an invokable ob=
ject is stored into it, such as a function pointer, method pointer, or a fu=
nctor (such as std::function&lt;&gt; and others). This would raise the leve=
l of abstraction C++ offers to one comparable to scripting languages, where=
 you can often invoke an arbitrary variable. I&#39;ve prepared 2 examples:<=
/div></blockquote><div class=3D"gmail_msg"><br class=3D"gmail_msg">Any is a=
 polymorphic wrapper for any object modeling the CopyConstructible concept.=
 Anything beyond that is out of scope. In fact any doesn&#39;t even provide=
 equality or ordering, which would seem very basic. <br class=3D"gmail_msg"=
><br class=3D"gmail_msg">What you want is std::function (another polymorphi=
c wrapper for types modeling the FunctionObject concept) . If you want full=
y dynamic behavior (including runtime type checking of parameters), use fun=
ction&lt;any(std::vector&lt;any&gt;)&gt; and wrap the stored function in an=
 adaptor that does the unboxing of the parameters.<br class=3D"gmail_msg"><=
/div></div></blockquote></div><br class=3D"gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"gmail_msg"></div><span c=
lass=3D"gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"gmail_msg">std-proposal...@isocpp.org<=
/a>.<br class=3D"gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"gmail_msg=
">std-pr...@isocpp.org</a>.<span class=3D"gmail_msg"><br class=3D"gmail_msg=
">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"gmail_msg" target=3D"_blank">https://groups.goog=
le.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5X=
egKF253kwet6TFZBjg%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"gmail_msg"><span class=3D"m_-62754=
72275488112246gmail- gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.=
org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_ms=
g"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"gmail_msg">std-proposal...@isocpp.org</a>.<span clas=
s=3D"m_-6275472275488112246gmail- gmail_msg"><br class=3D"gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"gmail_msg=
">std-pr...@isocpp.org</a>.<br class=3D"gmail_msg"></span></span><span clas=
s=3D"m_-6275472275488112246gmail- gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org=
/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org</a=
>.<br class=3D"gmail_msg">
</span></blockquote></div><br class=3D"gmail_msg"></div><span class=3D"gmai=
l_msg"><font color=3D"#888888" class=3D"gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"gmail_msg"><fon=
t color=3D"#888888" class=3D"gmail_msg"><br class=3D"gmail_msg"></font></sp=
an></div><span class=3D"gmail_msg"><font color=3D"#888888" class=3D"gmail_m=
sg"><span class=3D"m_-6275472275488112246gmail- gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
"></span><span class=3D"m_-6275472275488112246gmail- gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"gmail_msg">std-proposal...@isocpp.org<=
/a>.<br class=3D"gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"gmail_msg=
">std-pr...@isocpp.org</a>.<br class=3D"gmail_msg"></span><span class=3D"m_=
-6275472275488112246gmail- gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"gmail_msg" target=3D"_blank">https://groups.=
google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoW=
cBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=3D"gm=
ail_quote gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex"><span class=3D"gmail_msg"><font color=
=3D"#888888" class=3D"gmail_msg"><span class=3D"m_-6275472275488112246gmail=
- gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.=
org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_ms=
g"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"gmail_msg">std-proposal...@isocpp.org</a>.<span clas=
s=3D"m_-6275472275488112246gmail- gmail_msg"><br class=3D"gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"gmail_msg=
">std-pr...@isocpp.org</a>.<br class=3D"gmail_msg"></span></font></span></b=
lockquote></div></div><div class=3D"gmail_msg"><div class=3D"gmail_quote gm=
ail_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span =
class=3D"gmail_msg"><font color=3D"#888888" class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"gmail_msg" target=3D"_blank">https://groups.go=
ogle.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6Wq=
BiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</font></span></blockquote></div><br class=3D"gmail_msg"></div><span class=
=3D"m_-6275472275488112246gmail- gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
"></span><span class=3D"m_-6275472275488112246gmail- gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"gmail_msg">std-proposal...@isocpp.org<=
/a>.<br class=3D"gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"gmail_msg=
">std-pr...@isocpp.org</a>.<br class=3D"gmail_msg"></span></div></div><span=
 class=3D"m_-6275472275488112246gmail- gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"gmail_msg" target=3D"_blank">https://groups.go=
ogle.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9Dwc=
F4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</span></blockquote></div><span class=3D"gmail_msg"><span class=3D"m_-62754=
72275488112246gmail- gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.=
org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_ms=
g"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"gmail_msg">std-proposal...@isocpp.org</a>.<span clas=
s=3D"m_-6275472275488112246gmail- gmail_msg"><br class=3D"gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"gmail_msg=
">std-pr...@isocpp.org</a>.<br class=3D"gmail_msg"></span></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"gmail_msg" target=3D"_blank">https://groups.goog=
le.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP=
6CFq55NWM6HFLMgO-A%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</blockquote></div><br class=3D"gmail_msg"></div>
</blockquote></div></blockquote></div><br class=3D"gmail_msg"></div></div><=
/div></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/is=
ocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3=
D_PFe0X4UOkiw%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNS=
zw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUS=
nFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com</a>.<br />

--001a114dc5861a18870549d4f126--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 16:11:50 +0100
Raw View
--001a114a8d341a6e1b0549d4f7e4
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Michal: You haven't read the code, there is a type_id. Types are checked.

2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> So your use-case that's supposed to convince the committee is "I want to
> throw away type safety for my thing, help me with doing that"?
>
> On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:
>
>> Edward: Thanks for the suggestions. I didn't presume to think my
>> implementation was definitive. It is the closest we can get in C++ to wh=
at
>> the scripting languages have, without sacrificing too much, in my opinio=
n.
>> The conversions you mention could be done, but only at the price of
>> significant overhead. Plain std::any does not support conversions when
>> casting either. If I wrote my own any, I'd definitely move everything I
>> could into the vtable of the holder, as you suggest. The any_function
>> implementation is just an example, an idea that occurred to me only
>> gradually.
>>
>> I don't want the user specify the return type, because this is not
>> traditionally std::any-like. You can store almost anything into a std::a=
ny
>> instance, but you don't need to specify anything, there are no template
>> instantiations needed. Only when casting, do you need those.
>>
>> I like your invoke() idea. If something like that were implemented, I'd
>> be perfectly pleased with it, but really, why not have a operator() as
>> well? It seems prettier to me, scripting language like. We can invoke a
>> variable, just like in a scripting language.
>>
>> Michal: I'm using this as part of my signal/slot implementation. I don't
>> want to specify function signatures of my slots, that's the only reason =
why
>> I use this. The slots usually don't have many arguments as you want sign=
al
>> handling to be fast , also conversions cost time so you don't really wan=
t
>> them, the single signature problem is not much of a problem. Take a look=
:
>>
>> https://github.com/user1095108/crl
>>
>> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>>
>> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>>
>> When you open your browser the use cases are showing in front of your
>> eyes, JavaScript programs storing functions in a variable. Python, lua a=
nd
>> countless other scripts doing the same. I can't believe you haven't seen
>> any of this in practice.
>>
>>
>> It works in scripting languages because they have a rich base type (have
>> you looked at the size of the PyObject vtable?) that erases all the
>> operations the language syntax allows on an object. We don't have that i=
n
>> C++ because of overhead and because it's incompatible with a
>> Turing-complete compile time type system.
>>
>> Your proposed facility:
>>
>> * Requires the target type to have exactly 1 call signature, so it won't
>> work with multi-callables, overload combiners, or polymorphic or variadi=
c
>> function objects, esp. closure types.
>> * Requires the caller to supply exactly the arguments corresponding to
>> the signature of the target type (otherwise UB, assert or throw). So no
>> arithmetic conversions, cvr conversions or implicit conversions. That's =
a
>> recipe for frustration.
>> * Asymmetry between argument and return types; why not require the user
>> to specify the return type?
>> * Overhead: one extra function pointer plus one extra typeid (for the
>> signature type, if extant) per any instance.
>>
>> Now some constructive suggestions:
>>
>> * The overhead is a defect of your implementation; you can move those
>> members into the vtable, at the cost of an extra indirection.
>> * The return type could be provided by having your invoke member functio=
n
>> take the return type as the first template parameter, or preferably
>> providing a non-member invoke. That would also allow supplying argument
>> types explicitly:
>>
>> auto a =3D any{[](std::string, unsigned) { return true; }};
>> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>>
>> Is that useful? I'm not too sure, but at least it's clear what the
>> facility can and cannot do. It still can't accept multi-signature callab=
les.
>>
>> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>
>> You've asked for a feature, and yet you can't produce an example of how
>> that feature would be useful. This is the rational argument: we don't ne=
ed
>> features that don't have use cases.
>>
>> Do show us examples of how this is useful and we might reconsider this
>> feature. Plain and simple like that. Throwing logical fallacies around
>> won't change it.
>>
>> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> We don't need C++, ASM is sufficient, or an arbitrary other computer
>> language. 640k were sufficient at some point in time. I haven't heard a
>> single rational argument from you. I'd hate to have you as a boss.
>>
>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>
>> You're proposing a feature for the sake of having a feature. Give us
>> actual use cases if you think that is not true.
>>
>> Having a feature that no-one will use is not beneficial.
>>
>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> As for me being a type ducking proponent... std::any in various forms ha=
s
>> been around since 2001, I think. All the while until now you could assig=
n a
>> function pointer or a member function pointer to it as well as copyable
>> function objects. It's nothing new. Adding the invocation feature would
>> simply be a natural development in my opinion.
>>
>> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> What you describe are workarounds. If you want to use a temporary lambda=
,
>> you won't be able to keep the type around. Maybe you don't want to speci=
fy
>> the function signature and so std::function is not appropriate.
>>
>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>>
>> Show us the actual (i.e. complete) example of why that be useful (and wh=
y
>> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
>> function_ref, for that).
>>
>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> Let's say you store a lambda object into std::any
>>
>> std::any a =3D [](){};
>>
>> How are you going to obtain the lambda object back? AFAIK it's locked
>> inside the any instance. If std::any had a mechanism of invoking the sto=
red
>> object you could still "reach" it.
>>
>>
>> any_cast. You have to keep the lambda type around of course. If you don'=
t
>> want to, wrap the lambda in a std::function first before putting it in a=
n
>> std::any.
>>
>>
>>
>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> I already wrote what I needed :) function<any(std::vector<any>)> is
>> simply blasphemous.
>>
>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very bas=
ic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavio=
r
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYu
>> p5XegKF253kwet6TFZBjg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2G=
R1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-
>> bbc9-77e57123f68e%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-7=
3a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%
>> 2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs=
%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>>
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%
>> 3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV=
30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw
>> cF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrH=
jykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ
>> FkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx=
9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_
>> 3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYC=
VZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSie
> FCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZ=
aF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQ=
g0mkgNg%40mail.gmail.com.

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

<div dir=3D"ltr">Michal: You haven&#39;t read the code, there is a type_id.=
 Types are checked.</div><div class=3D"gmail_extra"><br><div class=3D"gmail=
_quote">2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr">&=
lt;<a href=3D"mailto:griwes@griwes.info" target=3D"_blank">griwes@griwes.in=
fo</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0=
 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">So yo=
ur use-case that&#39;s supposed to convince the committee is &quot;I want t=
o throw away type safety for my thing, help me with doing that&quot;?</div>=
<br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 4:04=
 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com" target=3D"_blank">=
janezz55@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote=
" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><=
div dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">Edward: Thanks fo=
r the suggestions. I didn&#39;t presume to think my implementation was defi=
nitive. It is the closest we can get in C++ to what the scripting languages=
 have, without sacrificing too much, in my opinion. The conversions you men=
tion could be done, but only at the price of significant overhead. Plain st=
d::any does not support conversions when casting either. If I wrote my own =
any, I&#39;d definitely move everything I could into the vtable of the hold=
er, as you suggest. The any_function implementation is just an example, an =
idea that occurred to me only gradually.<div class=3D"m_-748263961894165792=
8gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"></div><div class=
=3D"m_-7482639618941657928gmail_msg">I don&#39;t want the user specify the =
return type, because this is not traditionally std::any-like. You can store=
 almost anything into a std::any instance, but you don&#39;t need to specif=
y anything, there are no template instantiations needed. Only when casting,=
 do you need those.</div><div class=3D"m_-7482639618941657928gmail_msg"><br=
 class=3D"m_-7482639618941657928gmail_msg"></div><div class=3D"m_-748263961=
8941657928gmail_msg">I like your invoke() idea. If something like that were=
 implemented, I&#39;d be perfectly pleased with it, but really, why not hav=
e a operator() as well? It seems prettier to me, scripting language like. W=
e can invoke a variable, just like in a scripting language.<br class=3D"m_-=
7482639618941657928gmail_msg"><div class=3D"m_-7482639618941657928gmail_msg=
"><br class=3D"m_-7482639618941657928gmail_msg"></div><div class=3D"m_-7482=
639618941657928gmail_msg">Michal: I&#39;m using this as part of my signal/s=
lot implementation. I don&#39;t want to specify function signatures of my s=
lots, that&#39;s the only reason why I use this. The slots usually don&#39;=
t have many arguments as you want signal handling to be fast , also convers=
ions cost time so you don&#39;t really want them, the single signature prob=
lem is not much of a problem. Take a look:</div><div class=3D"m_-7482639618=
941657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"></div><di=
v class=3D"m_-7482639618941657928gmail_msg"><a href=3D"https://github.com/u=
ser1095108/crl" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blank"=
>https://github.com/<wbr>user1095108/crl</a><br class=3D"m_-748263961894165=
7928gmail_msg"></div></div></div><div dir=3D"ltr" class=3D"m_-7482639618941=
657928gmail_msg"><div class=3D"m_-7482639618941657928gmail_msg"><div class=
=3D"m_-7482639618941657928gmail_msg"><div class=3D"gmail_extra m_-748263961=
8941657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"><div cla=
ss=3D"gmail_quote m_-7482639618941657928gmail_msg">2017-03-03 15:22 GMT+01:=
00 Edward Catmur <span dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg=
">&lt;<a href=3D"mailto:ed@catmur.co.uk" class=3D"m_-7482639618941657928gma=
il_msg" target=3D"_blank">ed@catmur.co.uk</a>&gt;</span>:<br class=3D"m_-74=
82639618941657928gmail_msg"><blockquote class=3D"gmail_quote m_-74826396189=
41657928gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_-74826396189=
41657928gmail_msg"><span class=3D"m_-7482639618941657928m_-6275472275488112=
246gmail- m_-7482639618941657928gmail_msg">On Friday, 3 March 2017 14:05:46=
 UTC, janezz55 .  wrote:<blockquote class=3D"gmail_quote m_-748263961894165=
7928gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(=
204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_-748263961894165=
7928gmail_msg">When you open your browser the use cases are showing in fron=
t of your eyes, JavaScript programs storing functions in a variable. Python=
, lua and countless other scripts doing the same. I can&#39;t believe you h=
aven&#39;t seen any of this in practice.</div></blockquote><div class=3D"m_=
-7482639618941657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg=
"></div></span><div class=3D"m_-7482639618941657928gmail_msg">It works in s=
cripting languages because they have a rich base type (have you looked at t=
he size of the PyObject vtable?) that erases all the operations the languag=
e syntax allows on an object. We don&#39;t have that in C++ because of over=
head and because it&#39;s incompatible with a Turing-complete compile time =
type system.</div><div class=3D"m_-7482639618941657928gmail_msg"><br class=
=3D"m_-7482639618941657928gmail_msg"></div><div class=3D"m_-748263961894165=
7928gmail_msg"><div class=3D"m_-7482639618941657928gmail_msg">Your proposed=
 facility:</div><div class=3D"m_-7482639618941657928gmail_msg"><br class=3D=
"m_-7482639618941657928gmail_msg"></div><div class=3D"m_-748263961894165792=
8gmail_msg">* Requires the target type to have exactly 1 call signature, so=
 it won&#39;t work with multi-callables, overload combiners, or polymorphic=
 or variadic function objects, esp. closure types.</div><div class=3D"m_-74=
82639618941657928gmail_msg">* Requires the caller to supply exactly the arg=
uments corresponding to the signature of the target type (otherwise UB, ass=
ert or throw). So no arithmetic conversions, cvr conversions or implicit co=
nversions. That&#39;s a recipe for frustration.</div><div class=3D"m_-74826=
39618941657928gmail_msg">* Asymmetry between argument and return types; why=
 not require the user to specify the return type?</div><div class=3D"m_-748=
2639618941657928gmail_msg">* Overhead: one extra function pointer plus one =
extra typeid (for the signature type, if extant) per any instance.</div></d=
iv><div class=3D"m_-7482639618941657928gmail_msg"><br class=3D"m_-748263961=
8941657928gmail_msg"></div><div class=3D"m_-7482639618941657928gmail_msg">N=
ow some constructive suggestions:</div><div class=3D"m_-7482639618941657928=
gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"></div><div class=
=3D"m_-7482639618941657928gmail_msg">* The overhead is a defect of your imp=
lementation; you can move those members into the vtable, at the cost of an =
extra indirection.</div><div class=3D"m_-7482639618941657928gmail_msg">* Th=
e return type could be provided by having your invoke member function take =
the return type as the first template parameter, or preferably providing a =
non-member invoke. That would also allow supplying argument types explicitl=
y:</div><div class=3D"m_-7482639618941657928gmail_msg"><br class=3D"m_-7482=
639618941657928gmail_msg"></div><div class=3D"m_-7482639618941657928gmail_m=
sg">auto a =3D any{[](std::string, unsigned) { return true; }};</div><div c=
lass=3D"m_-7482639618941657928gmail_msg">auto b =3D invoke&lt;bool, std::st=
ring, unsigned&gt;(a, &quot;meow&quot;, 1);</div><div class=3D"m_-748263961=
8941657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"></div><d=
iv class=3D"m_-7482639618941657928gmail_msg">Is that useful? I&#39;m not to=
o sure, but at least it&#39;s clear what the facility can and cannot do. It=
 still can&#39;t accept multi-signature callables.</div><div class=3D"m_-74=
82639618941657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"><=
/div><blockquote class=3D"gmail_quote m_-7482639618941657928gmail_msg" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex"><div class=3D"m_-7482639618941657928gmail_msg"><div class=3D"gm=
ail_quote m_-7482639618941657928gmail_msg"><span class=3D"m_-74826396189416=
57928m_-6275472275488112246gmail- m_-7482639618941657928gmail_msg">2017-03-=
03 14:46 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_-74826=
39618941657928gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_-74826396189416=
57928gmail_msg">gri...@griwes.info</a>&gt;</span>:<br class=3D"m_-748263961=
8941657928gmail_msg"></span><blockquote class=3D"gmail_quote m_-74826396189=
41657928gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex"><span class=3D"m_-7482639618941657928m_-=
6275472275488112246gmail- m_-7482639618941657928gmail_msg"><div dir=3D"ltr"=
 class=3D"m_-7482639618941657928gmail_msg">You&#39;ve asked for a feature, =
and yet you can&#39;t produce an example of how that feature would be usefu=
l. This is the rational argument: we don&#39;t need features that don&#39;t=
 have use cases.<div class=3D"m_-7482639618941657928gmail_msg"><br class=3D=
"m_-7482639618941657928gmail_msg"></div><div class=3D"m_-748263961894165792=
8gmail_msg">Do show us examples of how this is useful and we might reconsid=
er this feature. Plain and simple like that. Throwing logical fallacies aro=
und won&#39;t change it.</div></div><br class=3D"m_-7482639618941657928gmai=
l_msg"></span><div class=3D"gmail_quote m_-7482639618941657928gmail_msg"><s=
pan class=3D"m_-7482639618941657928m_-6275472275488112246gmail- m_-74826396=
18941657928gmail_msg"><div class=3D"m_-7482639618941657928gmail_msg"><div c=
lass=3D"m_-7482639618941657928gmail_msg"><div dir=3D"ltr" class=3D"m_-74826=
39618941657928gmail_msg">On Fri, Mar 3, 2017 at 2:31 PM janezz55 . &lt;<a r=
el=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">jane...@gmail.com=
</a>&gt; wrote:<br class=3D"m_-7482639618941657928gmail_msg"></div></div></=
div></span><blockquote class=3D"gmail_quote m_-7482639618941657928gmail_msg=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex"><div class=3D"m_-7482639618941657928gmail_msg"><div class=
=3D"m_-7482639618941657928gmail_msg"><span class=3D"m_-7482639618941657928m=
_-6275472275488112246gmail- m_-7482639618941657928gmail_msg"><div dir=3D"lt=
r" class=3D"m_-7482639618941657928gmail_msg">We don&#39;t need C++, ASM is =
sufficient, or an arbitrary other computer language. 640k were sufficient a=
t some point in time. I haven&#39;t heard a single rational argument from y=
ou. I&#39;d hate to have you as a boss.</div><div class=3D"m_-7482639618941=
657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"><div class=
=3D"gmail_quote m_-7482639618941657928gmail_msg"></div></div></span><span c=
lass=3D"m_-7482639618941657928m_-6275472275488112246gmail- m_-7482639618941=
657928gmail_msg"><div class=3D"m_-7482639618941657928gmail_msg"><div class=
=3D"gmail_quote m_-7482639618941657928gmail_msg">2017-03-03 14:25 GMT+01:00=
 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_-7482639618941657928gmai=
l_msg">&lt;<a rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">gr=
i...@griwes.info</a>&gt;</span>:<br class=3D"m_-7482639618941657928gmail_ms=
g"></div></div></span><div class=3D"m_-7482639618941657928gmail_msg"><div c=
lass=3D"gmail_quote m_-7482639618941657928gmail_msg"><blockquote class=3D"g=
mail_quote m_-7482639618941657928gmail_msg" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"=
m_-7482639618941657928m_-6275472275488112246gmail- m_-7482639618941657928gm=
ail_msg"><div dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">You&#39=
;re proposing a feature for the sake of having a feature. Give us actual us=
e cases if you think that is not true.<div class=3D"m_-7482639618941657928g=
mail_msg"><br class=3D"m_-7482639618941657928gmail_msg"></div><div class=3D=
"m_-7482639618941657928gmail_msg">Having a feature that no-one will use is =
not beneficial.</div></div><br class=3D"m_-7482639618941657928gmail_msg"></=
span><div class=3D"gmail_quote m_-7482639618941657928gmail_msg"><span class=
=3D"m_-7482639618941657928m_-6275472275488112246gmail- m_-74826396189416579=
28gmail_msg"><div dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">On =
Fri, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_=
-7482639618941657928gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D=
"m_-7482639618941657928gmail_msg"></div></span><blockquote class=3D"gmail_q=
uote m_-7482639618941657928gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bor=
der-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_-748=
2639618941657928m_-6275472275488112246gmail- m_-7482639618941657928gmail_ms=
g"><div dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">As for me bei=
ng a type ducking proponent... std::any in various forms has been around si=
nce 2001, I think. All the while until now you could assign a function poin=
ter or a member function pointer to it as well as copyable function objects=
.. It&#39;s nothing new. Adding the invocation feature would simply be a nat=
ural development in my opinion.</div></span><div class=3D"m_-74826396189416=
57928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"><div class=3D=
"gmail_quote m_-7482639618941657928gmail_msg"><span class=3D"m_-74826396189=
41657928m_-6275472275488112246gmail- m_-7482639618941657928gmail_msg">2017-=
03-03 12:47 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"m_-748263961894=
1657928gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_-7482639618941657928gm=
ail_msg">jane...@gmail.com</a>&gt;</span>:<br class=3D"m_-74826396189416579=
28gmail_msg"></span><blockquote class=3D"gmail_quote m_-7482639618941657928=
gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,=
204,204);padding-left:1ex"><span class=3D"m_-7482639618941657928m_-62754722=
75488112246gmail- m_-7482639618941657928gmail_msg"><div dir=3D"ltr" class=
=3D"m_-7482639618941657928gmail_msg">What you describe are workarounds. If =
you want to use a temporary lambda, you won&#39;t be able to keep the type =
around. Maybe you don&#39;t want to specify the function signature and so s=
td::function is not appropriate.</div></span><div class=3D"m_-7482639618941=
657928gmail_msg"><div class=3D"m_-7482639618941657928gmail_msg"><div class=
=3D"m_-7482639618941657928gmail_msg"><br class=3D"m_-7482639618941657928gma=
il_msg"><div class=3D"gmail_quote m_-7482639618941657928gmail_msg"><span cl=
ass=3D"m_-7482639618941657928m_-6275472275488112246gmail- m_-74826396189416=
57928gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <span dir=
=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">&lt;<a rel=3D"nofollow" =
class=3D"m_-7482639618941657928gmail_msg">gpde...@gmail.com</a>&gt;</span>:=
<br class=3D"m_-7482639618941657928gmail_msg"></span><blockquote class=3D"g=
mail_quote m_-7482639618941657928gmail_msg" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"=
m_-7482639618941657928m_-6275472275488112246gmail- m_-7482639618941657928gm=
ail_msg"><div dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg"><span c=
lass=3D"m_-7482639618941657928gmail_msg">On Friday, March 3, 2017 at 11:13:=
02 AM UTC, Micha=C5=82 Dominiak wrote:</span><blockquote class=3D"gmail_quo=
te m_-7482639618941657928gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;borde=
r-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_-74826=
39618941657928gmail_msg"><div dir=3D"ltr" class=3D"m_-7482639618941657928gm=
ail_msg">Show us the actual (i.e. complete) example of why that be useful (=
and why you wouldn&#39;t just use `std::function&lt;void ()&gt;`, or the so=
mewhat proposed function_ref, for that).</div><br class=3D"m_-7482639618941=
657928gmail_msg"></span><span class=3D"m_-7482639618941657928gmail_msg"><di=
v class=3D"gmail_quote m_-7482639618941657928gmail_msg"><div dir=3D"ltr" cl=
ass=3D"m_-7482639618941657928gmail_msg">On Fri, Mar 3, 2017 at 12:10 PM jan=
ezz55 . &lt;<a rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">j=
ane...@gmail.com</a>&gt; wrote:<br class=3D"m_-7482639618941657928gmail_msg=
"></div><blockquote class=3D"gmail_quote m_-7482639618941657928gmail_msg" s=
tyle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pad=
ding-left:1ex"><div dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">L=
et&#39;s say you store a lambda object into std::any<div class=3D"m_-748263=
9618941657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg"></div=
><div class=3D"m_-7482639618941657928gmail_msg">std::any a =3D [](){};</div=
><div class=3D"m_-7482639618941657928gmail_msg"><br class=3D"m_-74826396189=
41657928gmail_msg"></div><div class=3D"m_-7482639618941657928gmail_msg">How=
 are you going to obtain the lambda object back? AFAIK it&#39;s locked insi=
de the any instance. If std::any had a mechanism of invoking the stored obj=
ect you could still &quot;reach&quot; it.</div></div></blockquote></div></s=
pan></blockquote><div class=3D"m_-7482639618941657928gmail_msg"><br class=
=3D"m_-7482639618941657928gmail_msg">any_cast. You have to keep the lambda =
type around of course. If you don&#39;t want to, wrap the lambda in a std::=
function first before putting it in an std::any.<br class=3D"m_-74826396189=
41657928gmail_msg">=C2=A0</div><blockquote class=3D"gmail_quote m_-74826396=
18941657928gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px sol=
id rgb(204,204,204);padding-left:1ex"><div class=3D"gmail_quote m_-74826396=
18941657928gmail_msg"><blockquote class=3D"gmail_quote m_-74826396189416579=
28gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20=
4,204,204);padding-left:1ex"><div class=3D"m_-7482639618941657928gmail_msg"=
><br class=3D"m_-7482639618941657928gmail_msg"><div class=3D"gmail_quote m_=
-7482639618941657928gmail_msg"><span class=3D"m_-7482639618941657928gmail_m=
sg">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"m_-748=
2639618941657928gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_-748263961894=
1657928gmail_msg">jane...@gmail.com</a>&gt;</span>:<br class=3D"m_-74826396=
18941657928gmail_msg"></span><blockquote class=3D"gmail_quote m_-7482639618=
941657928gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex"><span class=3D"m_-7482639618941657928gm=
ail_msg"><div dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">I alrea=
dy wrote what I needed :) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; =
is simply blasphemous.</div></span><span class=3D"m_-7482639618941657928gma=
il_msg"><div class=3D"m_-7482639618941657928gmail_msg"><div class=3D"m_-748=
2639618941657928gmail_msg"><div class=3D"m_-7482639618941657928gmail_msg"><=
br class=3D"m_-7482639618941657928gmail_msg"><div class=3D"gmail_quote m_-7=
482639618941657928gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero Dere=
tta <span dir=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">&lt;<a rel=
=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">gpde...@gmail.com</=
a>&gt;</span>:<br class=3D"m_-7482639618941657928gmail_msg"><blockquote cla=
ss=3D"gmail_quote m_-7482639618941657928gmail_msg" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr" class=3D"m_-7482639618941657928gmail_msg">On Thursday, March 2, 20=
17 at 6:26:01 PM UTC, <a class=3D"m_-7482639618941657928gmail_msg">jane...@=
gmail.com</a> wrote:<blockquote class=3D"gmail_quote m_-7482639618941657928=
gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,=
204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_-7482639618941657928=
gmail_msg">I believe that std::any should be made invokable, if an invokabl=
e object is stored into it, such as a function pointer, method pointer, or =
a functor (such as std::function&lt;&gt; and others). This would raise the =
level of abstraction C++ offers to one comparable to scripting languages, w=
here you can often invoke an arbitrary variable. I&#39;ve prepared 2 exampl=
es:</div></blockquote><div class=3D"m_-7482639618941657928gmail_msg"><br cl=
ass=3D"m_-7482639618941657928gmail_msg">Any is a polymorphic wrapper for an=
y object modeling the CopyConstructible concept. Anything beyond that is ou=
t of scope. In fact any doesn&#39;t even provide equality or ordering, whic=
h would seem very basic. <br class=3D"m_-7482639618941657928gmail_msg"><br =
class=3D"m_-7482639618941657928gmail_msg">What you want is std::function (a=
nother polymorphic wrapper for types modeling the FunctionObject concept) .=
 If you want fully dynamic behavior (including runtime type checking of par=
ameters), use function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wrap the=
 stored function in an adaptor that does the unboxing of the parameters.<br=
 class=3D"m_-7482639618941657928gmail_msg"></div></div></blockquote></div><=
br class=3D"m_-7482639618941657928gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_-7482639618941657928gm=
ail_msg"></div><span class=3D"m_-7482639618941657928gmail_msg">

<p class=3D"m_-7482639618941657928gmail_msg"></p>

-- <br class=3D"m_-7482639618941657928gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-748263=
9618941657928gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">std-p=
roposal...@isocpp.org</a>.<br class=3D"m_-7482639618941657928gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-748263=
9618941657928gmail_msg">std-pr...@isocpp.org</a>.<span class=3D"m_-74826396=
18941657928gmail_msg"><br class=3D"m_-7482639618941657928gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<=
wbr>CAO9E8GE2GR1GQRos5BCUJzLi5yaYu<wbr>p5XegKF253kwet6TFZBjg%40mail.<wbr>gm=
ail.com</a>.<br class=3D"m_-7482639618941657928gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"m_-7482639618941657928gmail_msg"><=
span class=3D"m_-7482639618941657928m_-6275472275488112246gmail- m_-7482639=
618941657928gmail_msg">

<p class=3D"m_-7482639618941657928gmail_msg"></p>

-- <br class=3D"m_-7482639618941657928gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_-7482639618941657928gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blank">https://group=
s.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>=
unsubscribe</a>.<br class=3D"m_-7482639618941657928gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">std-proposal...@iso=
cpp.org</a>.<span class=3D"m_-7482639618941657928m_-6275472275488112246gmai=
l- m_-7482639618941657928gmail_msg"><br class=3D"m_-7482639618941657928gmai=
l_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-748263=
9618941657928gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_-7482639618=
941657928gmail_msg"></span></span><span class=3D"m_-7482639618941657928m_-6=
275472275488112246gmail- m_-7482639618941657928gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"m_-7482639618941657928gmail_msg" target=3D"_blank">https://groups.g=
oogle.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/a6013d8d-73a6-4f40-<=
wbr>bbc9-77e57123f68e%40isocpp.org</a><wbr>.<br class=3D"m_-748263961894165=
7928gmail_msg">
</span></blockquote></div><br class=3D"m_-7482639618941657928gmail_msg"></d=
iv><span class=3D"m_-7482639618941657928gmail_msg"><font color=3D"#888888" =
class=3D"m_-7482639618941657928gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_-748263961894=
1657928gmail_msg"><font color=3D"#888888" class=3D"m_-7482639618941657928gm=
ail_msg"><br class=3D"m_-7482639618941657928gmail_msg"></font></span></div>=
<span class=3D"m_-7482639618941657928gmail_msg"><font color=3D"#888888" cla=
ss=3D"m_-7482639618941657928gmail_msg"><span class=3D"m_-748263961894165792=
8m_-6275472275488112246gmail- m_-7482639618941657928gmail_msg">

<p class=3D"m_-7482639618941657928gmail_msg"></p>

-- <br class=3D"m_-7482639618941657928gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-748263=
9618941657928gmail_msg"></span><span class=3D"m_-7482639618941657928m_-6275=
472275488112246gmail- m_-7482639618941657928gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">std-p=
roposal...@isocpp.org</a>.<br class=3D"m_-7482639618941657928gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-748263=
9618941657928gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_-7482639618=
941657928gmail_msg"></span><span class=3D"m_-7482639618941657928m_-62754722=
75488112246gmail- m_-7482639618941657928gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg" target=3D"_=
blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposa=
ls/CAO9E8GEDs%<wbr>2BmqoyCxakK0v-hKoWcBYJE%<wbr>2B9rdXuNUyGMTRwqPFAw%40mail=
..<wbr>gmail.com</a>.<br class=3D"m_-7482639618941657928gmail_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"m_-7482639618941657928gmail_msg"><div class=3D"gmail_quote m_-748263961=
8941657928gmail_msg"><blockquote class=3D"gmail_quote m_-748263961894165792=
8gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex"><span class=3D"m_-7482639618941657928gmail_msg"=
><font color=3D"#888888" class=3D"m_-7482639618941657928gmail_msg"><span cl=
ass=3D"m_-7482639618941657928m_-6275472275488112246gmail- m_-74826396189416=
57928gmail_msg">

<p class=3D"m_-7482639618941657928gmail_msg"></p>

-- <br class=3D"m_-7482639618941657928gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_-7482639618941657928gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blank">https://group=
s.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>=
unsubscribe</a>.<br class=3D"m_-7482639618941657928gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">std-proposal...@iso=
cpp.org</a>.<span class=3D"m_-7482639618941657928m_-6275472275488112246gmai=
l- m_-7482639618941657928gmail_msg"><br class=3D"m_-7482639618941657928gmai=
l_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-748263=
9618941657928gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_-7482639618=
941657928gmail_msg"></span></font></span></blockquote></div></div><div clas=
s=3D"m_-7482639618941657928gmail_msg"><div class=3D"gmail_quote m_-74826396=
18941657928gmail_msg"><blockquote class=3D"gmail_quote m_-74826396189416579=
28gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20=
4,204,204);padding-left:1ex"><span class=3D"m_-7482639618941657928gmail_msg=
"><font color=3D"#888888" class=3D"m_-7482639618941657928gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg" target=3D"_bl=
ank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals=
/CAPCFJdSFV30P%<wbr>3DdEQoooHcn05s6WqBiaV4XpyuQY4P<wbr>3jLkM5Dqg%40mail.gma=
il.com</a>.<br class=3D"m_-7482639618941657928gmail_msg">
</font></span></blockquote></div><br class=3D"m_-7482639618941657928gmail_m=
sg"></div><span class=3D"m_-7482639618941657928m_-6275472275488112246gmail-=
 m_-7482639618941657928gmail_msg">

<p class=3D"m_-7482639618941657928gmail_msg"></p>

-- <br class=3D"m_-7482639618941657928gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-748263=
9618941657928gmail_msg"></span><span class=3D"m_-7482639618941657928m_-6275=
472275488112246gmail- m_-7482639618941657928gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">std-p=
roposal...@isocpp.org</a>.<br class=3D"m_-7482639618941657928gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-748263=
9618941657928gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_-7482639618=
941657928gmail_msg"></span></div></div><span class=3D"m_-748263961894165792=
8m_-6275472275488112246gmail- m_-7482639618941657928gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg" target=3D"_bl=
ank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals=
/<wbr>CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw<wbr>cF4gFMF5HP%2B2QFCWvRS4A%<wbr>40mai=
l.gmail.com</a>.<br class=3D"m_-7482639618941657928gmail_msg">
</span></blockquote></div><span class=3D"m_-7482639618941657928gmail_msg"><=
span class=3D"m_-7482639618941657928m_-6275472275488112246gmail- m_-7482639=
618941657928gmail_msg">

<p class=3D"m_-7482639618941657928gmail_msg"></p>

-- <br class=3D"m_-7482639618941657928gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_-7482639618941657928gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blank">https://group=
s.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>=
unsubscribe</a>.<br class=3D"m_-7482639618941657928gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg">std-proposal...@iso=
cpp.org</a>.<span class=3D"m_-7482639618941657928m_-6275472275488112246gmai=
l- m_-7482639618941657928gmail_msg"><br class=3D"m_-7482639618941657928gmai=
l_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_-748263=
9618941657928gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_-7482639618=
941657928gmail_msg"></span></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<=
wbr>CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ<wbr>FkP6CFq55NWM6HFLMgO-A%40mail.<wbr>gm=
ail.com</a>.<br class=3D"m_-7482639618941657928gmail_msg">
</blockquote></div><br class=3D"m_-7482639618941657928gmail_msg"></div><spa=
n class=3D"HOEnZb"><font color=3D"#888888">
</font></span></blockquote></div></blockquote></div><span class=3D"HOEnZb">=
<font color=3D"#888888"><br class=3D"m_-7482639618941657928gmail_msg"></fon=
t></span></div></div></div></div><span class=3D"HOEnZb"><font color=3D"#888=
888">

<p class=3D"m_-7482639618941657928gmail_msg"></p>

-- <br class=3D"m_-7482639618941657928gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_-748263=
9618941657928gmail_msg">
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" class=3D"m_=
-7482639618941657928gmail_msg" target=3D"_blank">std-proposals+unsubscribe@=
<wbr>isocpp.org</a>.<br class=3D"m_-7482639618941657928gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blank">std-propo=
sals@isocpp.org</a>.<br class=3D"m_-7482639618941657928gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" class=3D"m_-7482639618941657928gmail_msg" target=3D"_blank">https://=
groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GGYCVZ=
5C6-j_<wbr>3VOpgBPRkSz%2BBg0bU_%3DE%3D_<wbr>PFe0X4UOkiw%40mail.gmail.com</a=
>.<br class=3D"m_-7482639618941657928gmail_msg">
</font></span></blockquote></div><span class=3D"HOEnZb"><font color=3D"#888=
888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNS=
zw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/<wbr>CAPCFJdQ3nZaF9aUSnFzwE0jm2pSie<wbr>FCLyJNSzw_bWiDVW0oV4=
Q%40mail.<wbr>gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvG=
Wbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%=
3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com</a>.<br />

--001a114a8d341a6e1b0549d4f7e4--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 15:18:45 +0000
Raw View
--001a114ebf306f5bb70549d5104c
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Sorry; my last message should've read "I want to throw away compile-time
type safety [...]".

On Fri, Mar 3, 2017 at 4:11 PM janezz55 . <janezz55@gmail.com> wrote:

> Michal: You haven't read the code, there is a type_id. Types are checked.
>
> 2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>
> So your use-case that's supposed to convince the committee is "I want to
> throw away type safety for my thing, help me with doing that"?
>
> On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:
>
> Edward: Thanks for the suggestions. I didn't presume to think my
> implementation was definitive. It is the closest we can get in C++ to wha=
t
> the scripting languages have, without sacrificing too much, in my opinion=
..
> The conversions you mention could be done, but only at the price of
> significant overhead. Plain std::any does not support conversions when
> casting either. If I wrote my own any, I'd definitely move everything I
> could into the vtable of the holder, as you suggest. The any_function
> implementation is just an example, an idea that occurred to me only
> gradually.
>
> I don't want the user specify the return type, because this is not
> traditionally std::any-like. You can store almost anything into a std::an=
y
> instance, but you don't need to specify anything, there are no template
> instantiations needed. Only when casting, do you need those.
>
> I like your invoke() idea. If something like that were implemented, I'd b=
e
> perfectly pleased with it, but really, why not have a operator() as well?
> It seems prettier to me, scripting language like. We can invoke a variabl=
e,
> just like in a scripting language.
>
> Michal: I'm using this as part of my signal/slot implementation. I don't
> want to specify function signatures of my slots, that's the only reason w=
hy
> I use this. The slots usually don't have many arguments as you want signa=
l
> handling to be fast , also conversions cost time so you don't really want
> them, the single signature problem is not much of a problem. Take a look:
>
> https://github.com/user1095108/crl
>
> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>
> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>
> When you open your browser the use cases are showing in front of your
> eyes, JavaScript programs storing functions in a variable. Python, lua an=
d
> countless other scripts doing the same. I can't believe you haven't seen
> any of this in practice.
>
>
> It works in scripting languages because they have a rich base type (have
> you looked at the size of the PyObject vtable?) that erases all the
> operations the language syntax allows on an object. We don't have that in
> C++ because of overhead and because it's incompatible with a
> Turing-complete compile time type system.
>
> Your proposed facility:
>
> * Requires the target type to have exactly 1 call signature, so it won't
> work with multi-callables, overload combiners, or polymorphic or variadic
> function objects, esp. closure types.
> * Requires the caller to supply exactly the arguments corresponding to th=
e
> signature of the target type (otherwise UB, assert or throw). So no
> arithmetic conversions, cvr conversions or implicit conversions. That's a
> recipe for frustration.
> * Asymmetry between argument and return types; why not require the user t=
o
> specify the return type?
> * Overhead: one extra function pointer plus one extra typeid (for the
> signature type, if extant) per any instance.
>
> Now some constructive suggestions:
>
> * The overhead is a defect of your implementation; you can move those
> members into the vtable, at the cost of an extra indirection.
> * The return type could be provided by having your invoke member function
> take the return type as the first template parameter, or preferably
> providing a non-member invoke. That would also allow supplying argument
> types explicitly:
>
> auto a =3D any{[](std::string, unsigned) { return true; }};
> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>
> Is that useful? I'm not too sure, but at least it's clear what the
> facility can and cannot do. It still can't accept multi-signature callabl=
es.
>
> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>
> You've asked for a feature, and yet you can't produce an example of how
> that feature would be useful. This is the rational argument: we don't nee=
d
> features that don't have use cases.
>
> Do show us examples of how this is useful and we might reconsider this
> feature. Plain and simple like that. Throwing logical fallacies around
> won't change it.
>
> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>
> We don't need C++, ASM is sufficient, or an arbitrary other computer
> language. 640k were sufficient at some point in time. I haven't heard a
> single rational argument from you. I'd hate to have you as a boss.
>
> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>
> You're proposing a feature for the sake of having a feature. Give us
> actual use cases if you think that is not true.
>
> Having a feature that no-one will use is not beneficial.
>
> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>
> As for me being a type ducking proponent... std::any in various forms has
> been around since 2001, I think. All the while until now you could assign=
 a
> function pointer or a member function pointer to it as well as copyable
> function objects. It's nothing new. Adding the invocation feature would
> simply be a natural development in my opinion.
>
> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> What you describe are workarounds. If you want to use a temporary lambda,
> you won't be able to keep the type around. Maybe you don't want to specif=
y
> the function signature and so std::function is not appropriate.
>
> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>
> Show us the actual (i.e. complete) example of why that be useful (and why
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>
> Let's say you store a lambda object into std::any
>
> std::any a =3D [](){};
>
> How are you going to obtain the lambda object back? AFAIK it's locked
> inside the any instance. If std::any had a mechanism of invoking the stor=
ed
> object you could still "reach" it.
>
>
> any_cast. You have to keep the lambda type around of course. If you don't
> want to, wrap the lambda in a std::function first before putting it in an
> std::any.
>
>
>
> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> I already wrote what I needed :) function<any(std::vector<any>)> is simpl=
y
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a funct=
or
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where yo=
u
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructibl=
e
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adapto=
r
> that does the unboxing of the parameters.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1=
GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR=
1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a=
6-4f40-bbc9-77e57123f68e%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73=
a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2=
BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%=
2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
>
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30=
P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV3=
0P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjy=
kbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHj=
ykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9c=
FUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9=
cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
>
>
> --
> 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/CAO9E8GGYCVZ=
5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCV=
Z5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
>
> To unsubscribe from this group and all its topics, 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/CAPCFJdQ3nZa=
F9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZ=
aF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
>
> --
> 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/CAO9E8GGM%3D=
%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3=
D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0VDrQjgtk4H6AFAHJ5ob=
mJw%40mail.gmail.com.

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

<div dir=3D"ltr">Sorry; my last message should&#39;ve read &quot;I want to =
throw away compile-time type safety [...]&quot;.</div><br><div class=3D"gma=
il_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 4:11 PM janezz55 . &lt;<a=
 href=3D"mailto:janezz55@gmail.com">janezz55@gmail.com</a>&gt; wrote:<br></=
div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">Mic=
hal: You haven&#39;t read the code, there is a type_id. Types are checked.<=
/div><div class=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div clas=
s=3D"gmail_quote gmail_msg"></div></div><div class=3D"gmail_extra gmail_msg=
"><div class=3D"gmail_quote gmail_msg">2017-03-03 16:09 GMT+01:00 Micha=C5=
=82 Dominiak <span dir=3D"ltr" class=3D"gmail_msg">&lt;<a href=3D"mailto:gr=
iwes@griwes.info" class=3D"gmail_msg" target=3D"_blank">griwes@griwes.info<=
/a>&gt;</span>:<br class=3D"gmail_msg"></div></div><div class=3D"gmail_extr=
a gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=3D"gmai=
l_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;pa=
dding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">So your use-case that&=
#39;s supposed to convince the committee is &quot;I want to throw away type=
 safety for my thing, help me with doing that&quot;?</div><br class=3D"gmai=
l_msg"><div class=3D"gmail_quote gmail_msg"><div dir=3D"ltr" class=3D"gmail=
_msg">On Fri, Mar 3, 2017 at 4:04 PM janezz55 . &lt;<a href=3D"mailto:janez=
z55@gmail.com" class=3D"gmail_msg" target=3D"_blank">janezz55@gmail.com</a>=
&gt; wrote:<br class=3D"gmail_msg"></div><blockquote class=3D"gmail_quote g=
mail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex"><div dir=3D"ltr" class=3D"m_9039410119375693614m_-748263961894165792=
8gmail_msg gmail_msg">Edward: Thanks for the suggestions. I didn&#39;t pres=
ume to think my implementation was definitive. It is the closest we can get=
 in C++ to what the scripting languages have, without sacrificing too much,=
 in my opinion. The conversions you mention could be done, but only at the =
price of significant overhead. Plain std::any does not support conversions =
when casting either. If I wrote my own any, I&#39;d definitely move everyth=
ing I could into the vtable of the holder, as you suggest. The any_function=
 implementation is just an example, an idea that occurred to me only gradua=
lly.<div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmai=
l_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gm=
ail_msg"></div><div class=3D"m_9039410119375693614m_-7482639618941657928gma=
il_msg gmail_msg">I don&#39;t want the user specify the return type, becaus=
e this is not traditionally std::any-like. You can store almost anything in=
to a std::any instance, but you don&#39;t need to specify anything, there a=
re no template instantiations needed. Only when casting, do you need those.=
</div><div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gm=
ail_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg =
gmail_msg"></div><div class=3D"m_9039410119375693614m_-7482639618941657928g=
mail_msg gmail_msg">I like your invoke() idea. If something like that were =
implemented, I&#39;d be perfectly pleased with it, but really, why not have=
 a operator() as well? It seems prettier to me, scripting language like. We=
 can invoke a variable, just like in a scripting language.<br class=3D"m_90=
39410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=3D"m=
_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><br class=3D=
"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></div><div=
 class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">M=
ichal: I&#39;m using this as part of my signal/slot implementation. I don&#=
39;t want to specify function signatures of my slots, that&#39;s the only r=
eason why I use this. The slots usually don&#39;t have many arguments as yo=
u want signal handling to be fast , also conversions cost time so you don&#=
39;t really want them, the single signature problem is not much of a proble=
m. Take a look:</div><div class=3D"m_9039410119375693614m_-7482639618941657=
928gmail_msg gmail_msg"><br class=3D"m_9039410119375693614m_-74826396189416=
57928gmail_msg gmail_msg"></div><div class=3D"m_9039410119375693614m_-74826=
39618941657928gmail_msg gmail_msg"><a href=3D"https://github.com/user109510=
8/crl" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg" target=3D"_blank">https://github.com/user1095108/crl</a><br class=3D"m=
_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></div></div>=
</div><div dir=3D"ltr" class=3D"m_9039410119375693614m_-7482639618941657928=
gmail_msg gmail_msg"><div class=3D"m_9039410119375693614m_-7482639618941657=
928gmail_msg gmail_msg"><div class=3D"m_9039410119375693614m_-7482639618941=
657928gmail_msg gmail_msg"><div class=3D"gmail_extra m_9039410119375693614m=
_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg"><div class=3D"gmail_quote m_903=
9410119375693614m_-7482639618941657928gmail_msg gmail_msg">2017-03-03 15:22=
 GMT+01:00 Edward Catmur <span dir=3D"ltr" class=3D"m_9039410119375693614m_=
-7482639618941657928gmail_msg gmail_msg">&lt;<a href=3D"mailto:ed@catmur.co=
..uk" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_ms=
g" target=3D"_blank">ed@catmur.co.uk</a>&gt;</span>:<br class=3D"m_90394101=
19375693614m_-7482639618941657928gmail_msg gmail_msg"><blockquote class=3D"=
gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex"><div dir=3D"ltr" class=3D"m_9039410119375693614m_-74826396=
18941657928gmail_msg gmail_msg"><span class=3D"m_9039410119375693614m_-7482=
639618941657928m_-6275472275488112246gmail- m_9039410119375693614m_-7482639=
618941657928gmail_msg gmail_msg">On Friday, 3 March 2017 14:05:46 UTC, jane=
zz55 .  wrote:<blockquote class=3D"gmail_quote m_9039410119375693614m_-7482=
639618941657928gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;borde=
r-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">When yo=
u open your browser the use cases are showing in front of your eyes, JavaSc=
ript programs storing functions in a variable. Python, lua and countless ot=
her scripts doing the same. I can&#39;t believe you haven&#39;t seen any of=
 this in practice.</div></blockquote><div class=3D"m_9039410119375693614m_-=
7482639618941657928gmail_msg gmail_msg"><br class=3D"m_9039410119375693614m=
_-7482639618941657928gmail_msg gmail_msg"></div></span><div class=3D"m_9039=
410119375693614m_-7482639618941657928gmail_msg gmail_msg">It works in scrip=
ting languages because they have a rich base type (have you looked at the s=
ize of the PyObject vtable?) that erases all the operations the language sy=
ntax allows on an object. We don&#39;t have that in C++ because of overhead=
 and because it&#39;s incompatible with a Turing-complete compile time type=
 system.</div><div class=3D"m_9039410119375693614m_-7482639618941657928gmai=
l_msg gmail_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928gm=
ail_msg gmail_msg"></div><div class=3D"m_9039410119375693614m_-748263961894=
1657928gmail_msg gmail_msg"><div class=3D"m_9039410119375693614m_-748263961=
8941657928gmail_msg gmail_msg">Your proposed facility:</div><div class=3D"m=
_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><br class=3D=
"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></div><div=
 class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">*=
 Requires the target type to have exactly 1 call signature, so it won&#39;t=
 work with multi-callables, overload combiners, or polymorphic or variadic =
function objects, esp. closure types.</div><div class=3D"m_9039410119375693=
614m_-7482639618941657928gmail_msg gmail_msg">* Requires the caller to supp=
ly exactly the arguments corresponding to the signature of the target type =
(otherwise UB, assert or throw). So no arithmetic conversions, cvr conversi=
ons or implicit conversions. That&#39;s a recipe for frustration.</div><div=
 class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">*=
 Asymmetry between argument and return types; why not require the user to s=
pecify the return type?</div><div class=3D"m_9039410119375693614m_-74826396=
18941657928gmail_msg gmail_msg">* Overhead: one extra function pointer plus=
 one extra typeid (for the signature type, if extant) per any instance.</di=
v></div><div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg =
gmail_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928gmail_ms=
g gmail_msg"></div><div class=3D"m_9039410119375693614m_-748263961894165792=
8gmail_msg gmail_msg">Now some constructive suggestions:</div><div class=3D=
"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><br class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></div><=
div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg=
">* The overhead is a defect of your implementation; you can move those mem=
bers into the vtable, at the cost of an extra indirection.</div><div class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">* The r=
eturn type could be provided by having your invoke member function take the=
 return type as the first template parameter, or preferably providing a non=
-member invoke. That would also allow supplying argument types explicitly:<=
/div><div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gma=
il_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg g=
mail_msg"></div><div class=3D"m_9039410119375693614m_-7482639618941657928gm=
ail_msg gmail_msg">auto a =3D any{[](std::string, unsigned) { return true; =
}};</div><div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg=
 gmail_msg">auto b =3D invoke&lt;bool, std::string, unsigned&gt;(a, &quot;m=
eow&quot;, 1);</div><div class=3D"m_9039410119375693614m_-74826396189416579=
28gmail_msg gmail_msg"><br class=3D"m_9039410119375693614m_-748263961894165=
7928gmail_msg gmail_msg"></div><div class=3D"m_9039410119375693614m_-748263=
9618941657928gmail_msg gmail_msg">Is that useful? I&#39;m not too sure, but=
 at least it&#39;s clear what the facility can and cannot do. It still can&=
#39;t accept multi-signature callables.</div><div class=3D"m_90394101193756=
93614m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_903941011937=
5693614m_-7482639618941657928gmail_msg gmail_msg"></div><blockquote class=
=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex"><div class=3D"m_9039410119375693614m_-7482639618941657=
928gmail_msg gmail_msg"><div class=3D"gmail_quote m_9039410119375693614m_-7=
482639618941657928gmail_msg gmail_msg"><span class=3D"m_9039410119375693614=
m_-7482639618941657928m_-6275472275488112246gmail- m_9039410119375693614m_-=
7482639618941657928gmail_msg gmail_msg">2017-03-03 14:46 GMT+01:00 Micha=C5=
=82 Dominiak <span dir=3D"ltr" class=3D"m_9039410119375693614m_-74826396189=
41657928gmail_msg gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_90394101193=
75693614m_-7482639618941657928gmail_msg gmail_msg">gri...@griwes.info</a>&g=
t;</span>:<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg=
 gmail_msg"></span><blockquote class=3D"gmail_quote m_9039410119375693614m_=
-7482639618941657928gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;=
border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_9=
039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_9039=
410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div dir=3D"ltr" =
class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">Yo=
u&#39;ve asked for a feature, and yet you can&#39;t produce an example of h=
ow that feature would be useful. This is the rational argument: we don&#39;=
t need features that don&#39;t have use cases.<div class=3D"m_9039410119375=
693614m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_90394101193=
75693614m_-7482639618941657928gmail_msg gmail_msg"></div><div class=3D"m_90=
39410119375693614m_-7482639618941657928gmail_msg gmail_msg">Do show us exam=
ples of how this is useful and we might reconsider this feature. Plain and =
simple like that. Throwing logical fallacies around won&#39;t change it.</d=
iv></div><br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg =
gmail_msg"></span><div class=3D"gmail_quote m_9039410119375693614m_-7482639=
618941657928gmail_msg gmail_msg"><span class=3D"m_9039410119375693614m_-748=
2639618941657928m_-6275472275488112246gmail- m_9039410119375693614m_-748263=
9618941657928gmail_msg gmail_msg"><div class=3D"m_9039410119375693614m_-748=
2639618941657928gmail_msg gmail_msg"><div class=3D"m_9039410119375693614m_-=
7482639618941657928gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">On Fri, Mar 3, 2017 =
at 2:31 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg">jane...@gmail.com</a>&gt; wrote=
:<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_ms=
g"></div></div></div></span><blockquote class=3D"gmail_quote m_903941011937=
5693614m_-7482639618941657928gmail_msg gmail_msg" style=3D"margin:0px 0px 0=
px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div clas=
s=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div c=
lass=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><sp=
an class=3D"m_9039410119375693614m_-7482639618941657928m_-62754722754881122=
46gmail- m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><d=
iv dir=3D"ltr" class=3D"m_9039410119375693614m_-7482639618941657928gmail_ms=
g gmail_msg">We don&#39;t need C++, ASM is sufficient, or an arbitrary othe=
r computer language. 640k were sufficient at some point in time. I haven&#3=
9;t heard a single rational argument from you. I&#39;d hate to have you as =
a boss.</div><div class=3D"m_9039410119375693614m_-7482639618941657928gmail=
_msg gmail_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928gma=
il_msg gmail_msg"><div class=3D"gmail_quote m_9039410119375693614m_-7482639=
618941657928gmail_msg gmail_msg"></div></div></span><span class=3D"m_903941=
0119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_903941011=
9375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=3D"m_903941=
0119375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=3D"gmail=
_quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">2017=
-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_90=
39410119375693614m_-7482639618941657928gmail_msg gmail_msg">&lt;<a rel=3D"n=
ofollow" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmai=
l_msg">gri...@griwes.info</a>&gt;</span>:<br class=3D"m_9039410119375693614=
m_-7482639618941657928gmail_msg gmail_msg"></div></div></span><div class=3D=
"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=
=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg"><blockquote class=3D"gmail_quote m_9039410119375693614m_-7482639618941=
657928gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1p=
x solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_903941011937569=
3614m_-7482639618941657928m_-6275472275488112246gmail- m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_903=
9410119375693614m_-7482639618941657928gmail_msg gmail_msg">You&#39;re propo=
sing a feature for the sake of having a feature. Give us actual use cases i=
f you think that is not true.<div class=3D"m_9039410119375693614m_-74826396=
18941657928gmail_msg gmail_msg"><br class=3D"m_9039410119375693614m_-748263=
9618941657928gmail_msg gmail_msg"></div><div class=3D"m_9039410119375693614=
m_-7482639618941657928gmail_msg gmail_msg">Having a feature that no-one wil=
l use is not beneficial.</div></div><br class=3D"m_9039410119375693614m_-74=
82639618941657928gmail_msg gmail_msg"></span><div class=3D"gmail_quote m_90=
39410119375693614m_-7482639618941657928gmail_msg gmail_msg"><span class=3D"=
m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_9=
039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div dir=3D"lt=
r" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
>On Fri, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a rel=3D"nofollow" class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">jane...=
@gmail.com</a>&gt; wrote:<br class=3D"m_9039410119375693614m_-7482639618941=
657928gmail_msg gmail_msg"></div></span><blockquote class=3D"gmail_quote m_=
9039410119375693614m_-7482639618941657928gmail_msg gmail_msg" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1e=
x"><span class=3D"m_9039410119375693614m_-7482639618941657928m_-62754722754=
88112246gmail- m_9039410119375693614m_-7482639618941657928gmail_msg gmail_m=
sg"><div dir=3D"ltr" class=3D"m_9039410119375693614m_-7482639618941657928gm=
ail_msg gmail_msg">As for me being a type ducking proponent... std::any in =
various forms has been around since 2001, I think. All the while until now =
you could assign a function pointer or a member function pointer to it as w=
ell as copyable function objects. It&#39;s nothing new. Adding the invocati=
on feature would simply be a natural development in my opinion.</div></span=
><div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_m=
sg"><br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail=
_msg"><div class=3D"gmail_quote m_9039410119375693614m_-7482639618941657928=
gmail_msg gmail_msg"><span class=3D"m_9039410119375693614m_-748263961894165=
7928m_-6275472275488112246gmail- m_9039410119375693614m_-748263961894165792=
8gmail_msg gmail_msg">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=3D"lt=
r" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
>&lt;<a rel=3D"nofollow" class=3D"m_9039410119375693614m_-74826396189416579=
28gmail_msg gmail_msg">jane...@gmail.com</a>&gt;</span>:<br class=3D"m_9039=
410119375693614m_-7482639618941657928gmail_msg gmail_msg"></span><blockquot=
e class=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg=
 gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex"><span class=3D"m_9039410119375693614m_-74826396=
18941657928m_-6275472275488112246gmail- m_9039410119375693614m_-74826396189=
41657928gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg">What you describe are workaroun=
ds. If you want to use a temporary lambda, you won&#39;t be able to keep th=
e type around. Maybe you don&#39;t want to specify the function signature a=
nd so std::function is not appropriate.</div></span><div class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=3D"m_9039=
410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=3D"m_9=
039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m=
_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=
=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg"><span class=3D"m_9039410119375693614m_-7482639618941657928m_-627547227=
5488112246gmail- m_9039410119375693614m_-7482639618941657928gmail_msg gmail=
_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" c=
lass=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">&lt=
;<a rel=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gm=
ail_msg gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"m_90394101=
19375693614m_-7482639618941657928gmail_msg gmail_msg"></span><blockquote cl=
ass=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gma=
il_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204=
,204);padding-left:1ex"><span class=3D"m_9039410119375693614m_-748263961894=
1657928m_-6275472275488112246gmail- m_9039410119375693614m_-748263961894165=
7928gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_9039410119375693614m_-=
7482639618941657928gmail_msg gmail_msg"><span class=3D"m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg">On Friday, March 3, 2017 at 11:=
13:02 AM UTC, Micha=C5=82 Dominiak wrote:</span><blockquote class=3D"gmail_=
quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><span class=3D"m_9039410119375693614m_-7482639618941657928gmail_=
msg gmail_msg"><div dir=3D"ltr" class=3D"m_9039410119375693614m_-7482639618=
941657928gmail_msg gmail_msg">Show us the actual (i.e. complete) example of=
 why that be useful (and why you wouldn&#39;t just use `std::function&lt;vo=
id ()&gt;`, or the somewhat proposed function_ref, for that).</div><br clas=
s=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></span=
><span class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg"><div class=3D"gmail_quote m_9039410119375693614m_-7482639618941657928g=
mail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_9039410119375693614m_-74826=
39618941657928gmail_msg gmail_msg">On Fri, Mar 3, 2017 at 12:10 PM janezz55=
 . &lt;<a rel=3D"nofollow" class=3D"m_9039410119375693614m_-748263961894165=
7928gmail_msg gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D"m_903=
9410119375693614m_-7482639618941657928gmail_msg gmail_msg"></div><blockquot=
e class=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg=
 gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_9039410119375693614=
m_-7482639618941657928gmail_msg gmail_msg">Let&#39;s say you store a lambda=
 object into std::any<div class=3D"m_9039410119375693614m_-7482639618941657=
928gmail_msg gmail_msg"><br class=3D"m_9039410119375693614m_-74826396189416=
57928gmail_msg gmail_msg"></div><div class=3D"m_9039410119375693614m_-74826=
39618941657928gmail_msg gmail_msg">std::any a =3D [](){};</div><div class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><br cla=
ss=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></div=
><div class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_m=
sg">How are you going to obtain the lambda object back? AFAIK it&#39;s lock=
ed inside the any instance. If std::any had a mechanism of invoking the sto=
red object you could still &quot;reach&quot; it.</div></div></blockquote></=
div></span></blockquote><div class=3D"m_9039410119375693614m_-7482639618941=
657928gmail_msg gmail_msg"><br class=3D"m_9039410119375693614m_-74826396189=
41657928gmail_msg gmail_msg">any_cast. You have to keep the lambda type aro=
und of course. If you don&#39;t want to, wrap the lambda in a std::function=
 first before putting it in an std::any.<br class=3D"m_9039410119375693614m=
_-7482639618941657928gmail_msg gmail_msg">=C2=A0</div><blockquote class=3D"=
gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex"><div class=3D"gmail_quote m_9039410119375693614m_-74826396=
18941657928gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_90394101=
19375693614m_-7482639618941657928gmail_msg gmail_msg" style=3D"margin:0px 0=
px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div =
class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><b=
r class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">=
<div class=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_=
msg gmail_msg"><span class=3D"m_9039410119375693614m_-7482639618941657928gm=
ail_msg gmail_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" =
class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">&l=
t;<a rel=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928g=
mail_msg gmail_msg">jane...@gmail.com</a>&gt;</span>:<br class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg"></span><blockquote c=
lass=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gm=
ail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex"><span class=3D"m_9039410119375693614m_-74826396189=
41657928gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg">I already wrote what I needed :=
) function&lt;any(std::vector&lt;any&gt;)&gt; is simply blasphemous.</div><=
/span><span class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg g=
mail_msg"><div class=3D"m_9039410119375693614m_-7482639618941657928gmail_ms=
g gmail_msg"><div class=3D"m_9039410119375693614m_-7482639618941657928gmail=
_msg gmail_msg"><div class=3D"m_9039410119375693614m_-7482639618941657928gm=
ail_msg gmail_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928=
gmail_msg gmail_msg"><div class=3D"gmail_quote m_9039410119375693614m_-7482=
639618941657928gmail_msg gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Pie=
ro Deretta <span dir=3D"ltr" class=3D"m_9039410119375693614m_-7482639618941=
657928gmail_msg gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_9039410119375=
693614m_-7482639618941657928gmail_msg gmail_msg">gpde...@gmail.com</a>&gt;<=
/span>:<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gm=
ail_msg"><blockquote class=3D"gmail_quote m_9039410119375693614m_-748263961=
8941657928gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_=
9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">On Thursday, =
March 2, 2017 at 6:26:01 PM UTC, <a class=3D"m_9039410119375693614m_-748263=
9618941657928gmail_msg gmail_msg">jane...@gmail.com</a> wrote:<blockquote c=
lass=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gm=
ail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_9039410119375693614m_-=
7482639618941657928gmail_msg gmail_msg">I believe that std::any should be m=
ade invokable, if an invokable object is stored into it, such as a function=
 pointer, method pointer, or a functor (such as std::function&lt;&gt; and o=
thers). This would raise the level of abstraction C++ offers to one compara=
ble to scripting languages, where you can often invoke an arbitrary variabl=
e. I&#39;ve prepared 2 examples:</div></blockquote><div class=3D"m_90394101=
19375693614m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_903941=
0119375693614m_-7482639618941657928gmail_msg gmail_msg">Any is a polymorphi=
c wrapper for any object modeling the CopyConstructible concept. Anything b=
eyond that is out of scope. In fact any doesn&#39;t even provide equality o=
r ordering, which would seem very basic. <br class=3D"m_9039410119375693614=
m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_90394101193756936=
14m_-7482639618941657928gmail_msg gmail_msg">What you want is std::function=
 (another polymorphic wrapper for types modeling the FunctionObject concept=
) . If you want fully dynamic behavior (including runtime type checking of =
parameters), use function&lt;any(std::vector&lt;any&gt;)&gt; and wrap the s=
tored function in an adaptor that does the unboxing of the parameters.<br c=
lass=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></d=
iv></div></blockquote></div><br class=3D"m_9039410119375693614m_-7482639618=
941657928gmail_msg gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_9039410119375693614m_-=
7482639618941657928gmail_msg gmail_msg"></div><span class=3D"m_903941011937=
5693614m_-7482639618941657928gmail_msg gmail_msg">

<p class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_9039410119375693614m_-74826396189416=
57928gmail_msg gmail_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_903=
9410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">std-pr...@isocpp.org=
</a>.<span class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gm=
ail_msg"><br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg =
gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gmail=
_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/=
msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40m=
ail.gmail.com</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928g=
mail_msg gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"m_9039410119375693614m_-7482639618=
941657928gmail_msg gmail_msg"><span class=3D"m_9039410119375693614m_-748263=
9618941657928m_-6275472275488112246gmail- m_9039410119375693614m_-748263961=
8941657928gmail_msg gmail_msg">

<p class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg" =
target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-propos=
als/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_9039410119375693614m_-748263=
9618941657928gmail_msg gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg=
 gmail_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_903941011937569=
3614m_-7482639618941657928m_-6275472275488112246gmail- m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_9039410119375693=
614m_-7482639618941657928gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">std-pr...@isocpp.org=
</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmai=
l_msg"></span></span><span class=3D"m_9039410119375693614m_-748263961894165=
7928m_-6275472275488112246gmail- m_9039410119375693614m_-748263961894165792=
8gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg" tar=
get=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals=
/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org</a>.<br class=3D"m_90394=
10119375693614m_-7482639618941657928gmail_msg gmail_msg">
</span></blockquote></div><br class=3D"m_9039410119375693614m_-748263961894=
1657928gmail_msg gmail_msg"></div><span class=3D"m_9039410119375693614m_-74=
82639618941657928gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_90=
39410119375693614m_-7482639618941657928gmail_msg gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_9039410119375=
693614m_-7482639618941657928gmail_msg gmail_msg"><font color=3D"#888888" cl=
ass=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><br =
class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"></=
font></span></div><span class=3D"m_9039410119375693614m_-748263961894165792=
8gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg"><span class=3D"m_90394101193756=
93614m_-7482639618941657928m_-6275472275488112246gmail- m_90394101193756936=
14m_-7482639618941657928gmail_msg gmail_msg">

<p class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg"></span><span class=
=3D"m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail-=
 m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_9039410119375693614m_-74826396189416=
57928gmail_msg gmail_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_903=
9410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">std-pr...@isocpp.org=
</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmai=
l_msg"></span><span class=3D"m_9039410119375693614m_-7482639618941657928m_-=
6275472275488112246gmail- m_9039410119375693614m_-7482639618941657928gmail_=
msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928g=
mail_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.or=
g/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwq=
PFAw%40mail.gmail.com</a>.<br class=3D"m_9039410119375693614m_-748263961894=
1657928gmail_msg gmail_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><div cl=
ass=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gmail_msg gma=
il_msg"><blockquote class=3D"gmail_quote m_9039410119375693614m_-7482639618=
941657928gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_903941011937=
5693614m_-7482639618941657928gmail_msg gmail_msg"><font color=3D"#888888" c=
lass=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><sp=
an class=3D"m_9039410119375693614m_-7482639618941657928m_-62754722754881122=
46gmail- m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">

<p class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg" =
target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-propos=
als/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_9039410119375693614m_-748263=
9618941657928gmail_msg gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg=
 gmail_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_903941011937569=
3614m_-7482639618941657928m_-6275472275488112246gmail- m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_9039410119375693=
614m_-7482639618941657928gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">std-pr...@isocpp.org=
</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmai=
l_msg"></span></font></span></blockquote></div></div><div class=3D"m_903941=
0119375693614m_-7482639618941657928gmail_msg gmail_msg"><div class=3D"gmail=
_quote m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"><blo=
ckquote class=3D"gmail_quote m_9039410119375693614m_-7482639618941657928gma=
il_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid r=
gb(204,204,204);padding-left:1ex"><span class=3D"m_9039410119375693614m_-74=
82639618941657928gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_90=
39410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gma=
il_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/=
d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg=
%40mail.gmail.com</a>.<br class=3D"m_9039410119375693614m_-7482639618941657=
928gmail_msg gmail_msg">
</font></span></blockquote></div><br class=3D"m_9039410119375693614m_-74826=
39618941657928gmail_msg gmail_msg"></div><span class=3D"m_90394101193756936=
14m_-7482639618941657928m_-6275472275488112246gmail- m_9039410119375693614m=
_-7482639618941657928gmail_msg gmail_msg">

<p class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg"></span><span class=
=3D"m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail-=
 m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_9039410119375693614m_-74826396189416=
57928gmail_msg gmail_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_903=
9410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">std-pr...@isocpp.org=
</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmai=
l_msg"></span></div></div><span class=3D"m_9039410119375693614m_-7482639618=
941657928m_-6275472275488112246gmail- m_9039410119375693614m_-7482639618941=
657928gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gma=
il_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/=
d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A=
%40mail.gmail.com</a>.<br class=3D"m_9039410119375693614m_-7482639618941657=
928gmail_msg gmail_msg">
</span></blockquote></div><span class=3D"m_9039410119375693614m_-7482639618=
941657928gmail_msg gmail_msg"><span class=3D"m_9039410119375693614m_-748263=
9618941657928m_-6275472275488112246gmail- m_9039410119375693614m_-748263961=
8941657928gmail_msg gmail_msg">

<p class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg" =
target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-propos=
als/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_9039410119375693614m_-748263=
9618941657928gmail_msg gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg=
 gmail_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_903941011937569=
3614m_-7482639618941657928m_-6275472275488112246gmail- m_903941011937569361=
4m_-7482639618941657928gmail_msg gmail_msg"><br class=3D"m_9039410119375693=
614m_-7482639618941657928gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">std-pr...@isocpp.org=
</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmai=
l_msg"></span></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_9039410119375693614m_-7482639618941657928gmail=
_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/=
msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40m=
ail.gmail.com</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928g=
mail_msg gmail_msg">
</blockquote></div><br class=3D"m_9039410119375693614m_-7482639618941657928=
gmail_msg gmail_msg"></div><span class=3D"m_9039410119375693614HOEnZb gmail=
_msg"><font color=3D"#888888" class=3D"gmail_msg">
</font></span></blockquote></div></blockquote></div><span class=3D"m_903941=
0119375693614HOEnZb gmail_msg"><font color=3D"#888888" class=3D"gmail_msg">=
<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg=
"></font></span></div></div></div></div><span class=3D"m_903941011937569361=
4HOEnZb gmail_msg"><font color=3D"#888888" class=3D"gmail_msg">

<p class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_msg"=
></p>

-- <br class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_9039410=
119375693614m_-7482639618941657928gmail_msg gmail_msg">
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" class=3D"m_=
9039410119375693614m_-7482639618941657928gmail_msg gmail_msg" target=3D"_bl=
ank">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"m_90394101193756=
93614m_-7482639618941657928gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_m=
sg" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_903941011=
9375693614m_-7482639618941657928gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" class=3D"m_9039410119375693614m_-7482639618941657928gmail_msg gmail_=
msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-p=
roposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.g=
mail.com</a>.<br class=3D"m_9039410119375693614m_-7482639618941657928gmail_=
msg gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=
=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex"><span class=3D"m_9039410119375693614HOEnZb gmail_ms=
g"><font color=3D"#888888" class=3D"gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"gmail_=
msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-p=
roposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_msg"></font></span>=
</blockquote></div></div><div class=3D"gmail_extra gmail_msg"><div class=3D=
"gmail_quote gmail_msg"><blockquote class=3D"gmail_quote gmail_msg" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span cl=
ass=3D"m_9039410119375693614HOEnZb gmail_msg"><font color=3D"#888888" class=
=3D"gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"gmail_msg" target=
=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.</font></span></blockq=
uote></div></div><div class=3D"gmail_extra gmail_msg"><div class=3D"gmail_q=
uote gmail_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margin=
:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_9=
039410119375693614HOEnZb gmail_msg"><font color=3D"#888888" class=3D"gmail_=
msg"><br class=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg"></font></span></blockquote></div></div><div class=3D"=
gmail_extra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote cla=
ss=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #cc=
c solid;padding-left:1ex"><span class=3D"m_9039410119375693614HOEnZb gmail_=
msg"><font color=3D"#888888" class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNS=
zw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.o=
rg/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4=
Q%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</font></span></blockquote></div><br class=3D"gmail_msg"></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvG=
Wbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isoc=
pp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8N=
cQg0mkgNg%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0VDrQjgtk=
4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9eRWOkpJA=
Pqk8a2sqAOB0VDrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com</a>.<br />

--001a114ebf306f5bb70549d5104c--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 16:27:07 +0100
Raw View
--001a11407f6ec4df410549d52d3a
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Michal: You throw away compile-time type safety every time you use a
std::any, this was the case all the way back to 2001.

2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> Sorry; my last message should've read "I want to throw away compile-time
> type safety [...]".
>
> On Fri, Mar 3, 2017 at 4:11 PM janezz55 . <janezz55@gmail.com> wrote:
>
>> Michal: You haven't read the code, there is a type_id. Types are checked=
..
>>
>> 2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>
>> So your use-case that's supposed to convince the committee is "I want to
>> throw away type safety for my thing, help me with doing that"?
>>
>> On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:
>>
>> Edward: Thanks for the suggestions. I didn't presume to think my
>> implementation was definitive. It is the closest we can get in C++ to wh=
at
>> the scripting languages have, without sacrificing too much, in my opinio=
n.
>> The conversions you mention could be done, but only at the price of
>> significant overhead. Plain std::any does not support conversions when
>> casting either. If I wrote my own any, I'd definitely move everything I
>> could into the vtable of the holder, as you suggest. The any_function
>> implementation is just an example, an idea that occurred to me only
>> gradually.
>>
>> I don't want the user specify the return type, because this is not
>> traditionally std::any-like. You can store almost anything into a std::a=
ny
>> instance, but you don't need to specify anything, there are no template
>> instantiations needed. Only when casting, do you need those.
>>
>> I like your invoke() idea. If something like that were implemented, I'd
>> be perfectly pleased with it, but really, why not have a operator() as
>> well? It seems prettier to me, scripting language like. We can invoke a
>> variable, just like in a scripting language.
>>
>> Michal: I'm using this as part of my signal/slot implementation. I don't
>> want to specify function signatures of my slots, that's the only reason =
why
>> I use this. The slots usually don't have many arguments as you want sign=
al
>> handling to be fast , also conversions cost time so you don't really wan=
t
>> them, the single signature problem is not much of a problem. Take a look=
:
>>
>> https://github.com/user1095108/crl
>>
>> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>>
>> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>>
>> When you open your browser the use cases are showing in front of your
>> eyes, JavaScript programs storing functions in a variable. Python, lua a=
nd
>> countless other scripts doing the same. I can't believe you haven't seen
>> any of this in practice.
>>
>>
>> It works in scripting languages because they have a rich base type (have
>> you looked at the size of the PyObject vtable?) that erases all the
>> operations the language syntax allows on an object. We don't have that i=
n
>> C++ because of overhead and because it's incompatible with a
>> Turing-complete compile time type system.
>>
>> Your proposed facility:
>>
>> * Requires the target type to have exactly 1 call signature, so it won't
>> work with multi-callables, overload combiners, or polymorphic or variadi=
c
>> function objects, esp. closure types.
>> * Requires the caller to supply exactly the arguments corresponding to
>> the signature of the target type (otherwise UB, assert or throw). So no
>> arithmetic conversions, cvr conversions or implicit conversions. That's =
a
>> recipe for frustration.
>> * Asymmetry between argument and return types; why not require the user
>> to specify the return type?
>> * Overhead: one extra function pointer plus one extra typeid (for the
>> signature type, if extant) per any instance.
>>
>> Now some constructive suggestions:
>>
>> * The overhead is a defect of your implementation; you can move those
>> members into the vtable, at the cost of an extra indirection.
>> * The return type could be provided by having your invoke member functio=
n
>> take the return type as the first template parameter, or preferably
>> providing a non-member invoke. That would also allow supplying argument
>> types explicitly:
>>
>> auto a =3D any{[](std::string, unsigned) { return true; }};
>> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>>
>> Is that useful? I'm not too sure, but at least it's clear what the
>> facility can and cannot do. It still can't accept multi-signature callab=
les.
>>
>> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>
>> You've asked for a feature, and yet you can't produce an example of how
>> that feature would be useful. This is the rational argument: we don't ne=
ed
>> features that don't have use cases.
>>
>> Do show us examples of how this is useful and we might reconsider this
>> feature. Plain and simple like that. Throwing logical fallacies around
>> won't change it.
>>
>> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> We don't need C++, ASM is sufficient, or an arbitrary other computer
>> language. 640k were sufficient at some point in time. I haven't heard a
>> single rational argument from you. I'd hate to have you as a boss.
>>
>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>
>> You're proposing a feature for the sake of having a feature. Give us
>> actual use cases if you think that is not true.
>>
>> Having a feature that no-one will use is not beneficial.
>>
>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> As for me being a type ducking proponent... std::any in various forms ha=
s
>> been around since 2001, I think. All the while until now you could assig=
n a
>> function pointer or a member function pointer to it as well as copyable
>> function objects. It's nothing new. Adding the invocation feature would
>> simply be a natural development in my opinion.
>>
>> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> What you describe are workarounds. If you want to use a temporary lambda=
,
>> you won't be able to keep the type around. Maybe you don't want to speci=
fy
>> the function signature and so std::function is not appropriate.
>>
>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>>
>> Show us the actual (i.e. complete) example of why that be useful (and wh=
y
>> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
>> function_ref, for that).
>>
>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> Let's say you store a lambda object into std::any
>>
>> std::any a =3D [](){};
>>
>> How are you going to obtain the lambda object back? AFAIK it's locked
>> inside the any instance. If std::any had a mechanism of invoking the sto=
red
>> object you could still "reach" it.
>>
>>
>> any_cast. You have to keep the lambda type around of course. If you don'=
t
>> want to, wrap the lambda in a std::function first before putting it in a=
n
>> std::any.
>>
>>
>>
>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> I already wrote what I needed :) function<any(std::vector<any>)> is
>> simply blasphemous.
>>
>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very bas=
ic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavio=
r
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYu
>> p5XegKF253kwet6TFZBjg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2G=
R1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-
>> bbc9-77e57123f68e%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-7=
3a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%
>> 2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs=
%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>>
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%
>> 3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV=
30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw
>> cF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrH=
jykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ
>> FkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx=
9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_
>> 3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYC=
VZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>
>> To unsubscribe from this group and all its topics, 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/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSie
>> FCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3n=
ZaF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_
>> e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%=
3D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0V
> DrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9eR=
WOkpJAPqk8a2sqAOB0VDrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GEhviWUpteV%2BS3u3pDC4oVny2gX3MNRH4o-%2B%2=
Bx%2B9AXdTg%40mail.gmail.com.

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

<div dir=3D"ltr">Michal: You throw away compile-time type safety every time=
 you use a std::any, this was the case all the way back to 2001.</div><div =
class=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-03 16:18 GMT+0=
1:00 Micha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a href=3D"mailto:griwes@gr=
iwes.info" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc s=
olid;padding-left:1ex"><div dir=3D"ltr">Sorry; my last message should&#39;v=
e read &quot;I want to throw away compile-time type safety [...]&quot;.</di=
v><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 4:=
11 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com" target=3D"_blank=
">janezz55@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div dir=3D"ltr" class=3D"m_1425532395565240008gmail_msg">Michal: You have=
n&#39;t read the code, there is a type_id. Types are checked.</div><div cla=
ss=3D"gmail_extra m_1425532395565240008gmail_msg"><br class=3D"m_1425532395=
565240008gmail_msg"><div class=3D"gmail_quote m_1425532395565240008gmail_ms=
g"></div></div><div class=3D"gmail_extra m_1425532395565240008gmail_msg"><d=
iv class=3D"gmail_quote m_1425532395565240008gmail_msg">2017-03-03 16:09 GM=
T+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_14255323955652400=
08gmail_msg">&lt;<a href=3D"mailto:griwes@griwes.info" class=3D"m_142553239=
5565240008gmail_msg" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<b=
r class=3D"m_1425532395565240008gmail_msg"></div></div><div class=3D"gmail_=
extra m_1425532395565240008gmail_msg"><div class=3D"gmail_quote m_142553239=
5565240008gmail_msg"><blockquote class=3D"gmail_quote m_1425532395565240008=
gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div dir=3D"ltr" class=3D"m_1425532395565240008gmail_msg">So your u=
se-case that&#39;s supposed to convince the committee is &quot;I want to th=
row away type safety for my thing, help me with doing that&quot;?</div><br =
class=3D"m_1425532395565240008gmail_msg"><div class=3D"gmail_quote m_142553=
2395565240008gmail_msg"><div dir=3D"ltr" class=3D"m_1425532395565240008gmai=
l_msg">On Fri, Mar 3, 2017 at 4:04 PM janezz55 . &lt;<a href=3D"mailto:jane=
zz55@gmail.com" class=3D"m_1425532395565240008gmail_msg" target=3D"_blank">=
janezz55@gmail.com</a>&gt; wrote:<br class=3D"m_1425532395565240008gmail_ms=
g"></div><blockquote class=3D"gmail_quote m_1425532395565240008gmail_msg" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
 dir=3D"ltr" class=3D"m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_1425532395565240008gmail_msg">Edward: Thanks for the=
 suggestions. I didn&#39;t presume to think my implementation was definitiv=
e. It is the closest we can get in C++ to what the scripting languages have=
, without sacrificing too much, in my opinion. The conversions you mention =
could be done, but only at the price of significant overhead. Plain std::an=
y does not support conversions when casting either. If I wrote my own any, =
I&#39;d definitely move everything I could into the vtable of the holder, a=
s you suggest. The any_function implementation is just an example, an idea =
that occurred to me only gradually.<div class=3D"m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_=
msg"><br class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_1425532395565240008gmail_msg"></div><div class=3D"m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255=
32395565240008gmail_msg">I don&#39;t want the user specify the return type,=
 because this is not traditionally std::any-like. You can store almost anyt=
hing into a std::any instance, but you don&#39;t need to specify anything, =
there are no template instantiations needed. Only when casting, do you need=
 those.</div><div class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg"><br class=3D"m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142=
5532395565240008gmail_msg"></div><div class=3D"m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_ms=
g">I like your invoke() idea. If something like that were implemented, I&#3=
9;d be perfectly pleased with it, but really, why not have a operator() as =
well? It seems prettier to me, scripting language like. We can invoke a var=
iable, just like in a scripting language.<br class=3D"m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008g=
mail_msg"><div class=3D"m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_1425532395565240008gmail_msg"><br class=3D"m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553=
2395565240008gmail_msg"></div><div class=3D"m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">=
Michal: I&#39;m using this as part of my signal/slot implementation. I don&=
#39;t want to specify function signatures of my slots, that&#39;s the only =
reason why I use this. The slots usually don&#39;t have many arguments as y=
ou want signal handling to be fast , also conversions cost time so you don&=
#39;t really want them, the single signature problem is not much of a probl=
em. Take a look:</div><div class=3D"m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><br clas=
s=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_1425532395565240008gmail_msg"></div><div class=3D"m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239556524000=
8gmail_msg"><a href=3D"https://github.com/user1095108/crl" class=3D"m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553=
2395565240008gmail_msg" target=3D"_blank">https://github.com/<wbr>user10951=
08/crl</a><br class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg"></div></div></div><di=
v dir=3D"ltr" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D"m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553=
2395565240008gmail_msg"><div class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div c=
lass=3D"gmail_extra m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_1425532395565240008gmail_msg"><br class=3D"m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395=
565240008gmail_msg"><div class=3D"gmail_quote m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg=
">2017-03-03 15:22 GMT+01:00 Edward Catmur <span dir=3D"ltr" class=3D"m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425=
532395565240008gmail_msg">&lt;<a href=3D"mailto:ed@catmur.co.uk" class=3D"m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
1425532395565240008gmail_msg" target=3D"_blank">ed@catmur.co.uk</a>&gt;</sp=
an>:<br class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_1425532395565240008gmail_msg"><blockquote class=3D"gmail_=
quote m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_1425532395565240008gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bord=
er-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg"><span class=3D"m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553=
2395565240008gmail_msg">On Friday, 3 March 2017 14:05:46 UTC, janezz55 .  w=
rote:<blockquote class=3D"gmail_quote m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><div dir=3D"ltr" class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">When yo=
u open your browser the use cases are showing in front of your eyes, JavaSc=
ript programs storing functions in a variable. Python, lua and countless ot=
her scripts doing the same. I can&#39;t believe you haven&#39;t seen any of=
 this in practice.</div></blockquote><div class=3D"m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmai=
l_msg"><br class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_1425532395565240008gmail_msg"></div></span><div class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg">It works in scripting languages because =
they have a rich base type (have you looked at the size of the PyObject vta=
ble?) that erases all the operations the language syntax allows on an objec=
t. We don&#39;t have that in C++ because of overhead and because it&#39;s i=
ncompatible with a Turing-complete compile time type system.</div><div clas=
s=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_1425532395565240008gmail_msg"><br class=3D"m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_=
msg"></div><div class=3D"m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D"m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425=
532395565240008gmail_msg">Your proposed facility:</div><div class=3D"m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255=
32395565240008gmail_msg"><br class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div>=
<div class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_1425532395565240008gmail_msg">* Requires the target type to =
have exactly 1 call signature, so it won&#39;t work with multi-callables, o=
verload combiners, or polymorphic or variadic function objects, esp. closur=
e types.</div><div class=3D"m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_1425532395565240008gmail_msg">* Requires the c=
aller to supply exactly the arguments corresponding to the signature of the=
 target type (otherwise UB, assert or throw). So no arithmetic conversions,=
 cvr conversions or implicit conversions. That&#39;s a recipe for frustrati=
on.</div><div class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">* Asymmetry between a=
rgument and return types; why not require the user to specify the return ty=
pe?</div><div class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">* Overhead: one extra=
 function pointer plus one extra typeid (for the signature type, if extant)=
 per any instance.</div></div><div class=3D"m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">=
<br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_1425532395565240008gmail_msg"></div><div class=3D"m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395=
565240008gmail_msg">Now some constructive suggestions:</div><div class=3D"m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
1425532395565240008gmail_msg"><br class=3D"m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><=
/div><div class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_1425532395565240008gmail_msg">* The overhead is a defec=
t of your implementation; you can move those members into the vtable, at th=
e cost of an extra indirection.</div><div class=3D"m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmai=
l_msg">* The return type could be provided by having your invoke member fun=
ction take the return type as the first template parameter, or preferably p=
roviding a non-member invoke. That would also allow supplying argument type=
s explicitly:</div><div class=3D"m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><br class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg"></div><div class=3D"m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008=
gmail_msg">auto a =3D any{[](std::string, unsigned) { return true; }};</div=
><div class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_1425532395565240008gmail_msg">auto b =3D invoke&lt;bool, st=
d::string, unsigned&gt;(a, &quot;meow&quot;, 1);</div><div class=3D"m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553=
2395565240008gmail_msg"><br class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div><=
div class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_1425532395565240008gmail_msg">Is that useful? I&#39;m not too=
 sure, but at least it&#39;s clear what the facility can and cannot do. It =
still can&#39;t accept multi-signature callables.</div><div class=3D"m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255=
32395565240008gmail_msg"><br class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div>=
<blockquote class=3D"gmail_quote m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg" style=3D"ma=
rgin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:=
1ex"><div class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D"gmail_quote=
 m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_1425532395565240008gmail_msg"><span class=3D"m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239=
5565240008gmail_msg">2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <span =
dir=3D"ltr" class=3D"m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_1425532395565240008gmail_msg">&lt;<a rel=3D"nofollow"=
 class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_1425532395565240008gmail_msg">gri...@griwes.info</a>&gt;</span>:=
<br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_1425532395565240008gmail_msg"></span><blockquote class=3D"gma=
il_quote m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_1425532395565240008gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;b=
order-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928m_-627547227548=
8112246gmail- m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_1425532395565240008gmail_msg"><div dir=3D"ltr" class=3D"m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142=
5532395565240008gmail_msg">You&#39;ve asked for a feature, and yet you can&=
#39;t produce an example of how that feature would be useful. This is the r=
ational argument: we don&#39;t need features that don&#39;t have use cases.=
<div class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_1425532395565240008gmail_msg"><br class=3D"m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240=
008gmail_msg"></div><div class=3D"m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">Do show us=
 examples of how this is useful and we might reconsider this feature. Plain=
 and simple like that. Throwing logical fallacies around won&#39;t change i=
t.</div></div><br class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg"></span><div class=
=3D"gmail_quote m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg"><span class=3D"m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gm=
ail- m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_1425532395565240008gmail_msg"><div class=3D"m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail=
_msg"><div class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_1425532395565240008gmail_msg"><div dir=3D"ltr" class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg">On Fri, Mar 3, 2017 at 2:31 PM janezz55 =
.. &lt;<a rel=3D"nofollow" class=3D"m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">jane...@g=
mail.com</a>&gt; wrote:<br class=3D"m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div></=
div></div></span><blockquote class=3D"gmail_quote m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail=
_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2=
04);padding-left:1ex"><div class=3D"m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div cla=
ss=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_1425532395565240008gmail_msg"><span class=3D"m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425=
532395565240008gmail_msg"><div dir=3D"ltr" class=3D"m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gma=
il_msg">We don&#39;t need C++, ASM is sufficient, or an arbitrary other com=
puter language. 640k were sufficient at some point in time. I haven&#39;t h=
eard a single rational argument from you. I&#39;d hate to have you as a bos=
s.</div><div class=3D"m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_1425532395565240008gmail_msg"><br class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg"><div class=3D"gmail_quote m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_m=
sg"></div></div></span><span class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928m_-6275472275488112246gmail- m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239556524000=
8gmail_msg"><div class=3D"m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D"gmai=
l_quote m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_1425532395565240008gmail_msg">2017-03-03 14:25 GMT+01:00 Micha=C5=
=82 Dominiak <span dir=3D"ltr" class=3D"m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">&lt;=
<a rel=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg">gri...@griwes.i=
nfo</a>&gt;</span>:<br class=3D"m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div></div>=
</span><div class=3D"m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D"gmail_quo=
te m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_1425532395565240008gmail_msg"><blockquote class=3D"gmail_quote m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532=
395565240008gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px so=
lid rgb(204,204,204);padding-left:1ex"><span class=3D"m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14=
25532395565240008gmail_msg"><div dir=3D"ltr" class=3D"m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008g=
mail_msg">You&#39;re proposing a feature for the sake of having a feature. =
Give us actual use cases if you think that is not true.<div class=3D"m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255=
32395565240008gmail_msg"><br class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div>=
<div class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_1425532395565240008gmail_msg">Having a feature that no-one w=
ill use is not beneficial.</div></div><br class=3D"m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmai=
l_msg"></span><div class=3D"gmail_quote m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><spa=
n class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
m_-6275472275488112246gmail- m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div dir=3D"ltr=
" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_1425532395565240008gmail_msg">On Fri, Mar 3, 2017 at 12:59 PM j=
anezz55 . &lt;<a rel=3D"nofollow" class=3D"m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">j=
ane...@gmail.com</a>&gt; wrote:<br class=3D"m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">=
</div></span><blockquote class=3D"gmail_quote m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex"><span class=3D"m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928m_-6275472275488112246gmail- m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmai=
l_msg"><div dir=3D"ltr" class=3D"m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">As for me b=
eing a type ducking proponent... std::any in various forms has been around =
since 2001, I think. All the while until now you could assign a function po=
inter or a member function pointer to it as well as copyable function objec=
ts. It&#39;s nothing new. Adding the invocation feature would simply be a n=
atural development in my opinion.</div></span><div class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"><br class=3D"m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D"g=
mail_quote m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_1425532395565240008gmail_msg"><span class=3D"m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- =
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_1425532395565240008gmail_msg">2017-03-03 12:47 GMT+01:00 janezz55 . <span =
dir=3D"ltr" class=3D"m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_1425532395565240008gmail_msg">&lt;<a rel=3D"nofollow"=
 class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_1425532395565240008gmail_msg">jane...@gmail.com</a>&gt;</span>:<=
br class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></span><blockquote class=3D"gmai=
l_quote m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_1425532395565240008gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928m_-6275472275488=
112246gmail- m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_1425532395565240008gmail_msg"><div dir=3D"ltr" class=3D"m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425=
532395565240008gmail_msg">What you describe are workarounds. If you want to=
 use a temporary lambda, you won&#39;t be able to keep the type around. May=
be you don&#39;t want to specify the function signature and so std::functio=
n is not appropriate.</div></span><div class=3D"m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_m=
sg"><div class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D"m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955=
65240008gmail_msg"><br class=3D"m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div class=
=3D"gmail_quote m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg"><span class=3D"m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gm=
ail- m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_1425532395565240008gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Pie=
ro Deretta <span dir=3D"ltr" class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">&lt;<a=
 rel=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg">gpde...@gmail.com=
</a>&gt;</span>:<br class=3D"m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg"></span><blockqu=
ote class=3D"gmail_quote m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_1425532395565240008gmail_msg" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><sp=
an class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8m_-6275472275488112246gmail- m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div dir=3D"lt=
r" class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"><span class=3D"m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240=
008gmail_msg">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Domi=
niak wrote:</span><blockquote class=3D"gmail_quote m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmai=
l_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,=
204);padding-left:1ex"><span class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div d=
ir=3D"ltr" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_1425532395565240008gmail_msg">Show us the actual (i.e.=
 complete) example of why that be useful (and why you wouldn&#39;t just use=
 `std::function&lt;void ()&gt;`, or the somewhat proposed function_ref, for=
 that).</div><br class=3D"m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_1425532395565240008gmail_msg"></span><span class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg"><div class=3D"gmail_quote m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565=
240008gmail_msg"><div dir=3D"ltr" class=3D"m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">O=
n Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_1425532395565240008gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D=
"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_1425532395565240008gmail_msg"></div><blockquote class=3D"gmail_quote m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142=
5532395565240008gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1p=
x solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255=
32395565240008gmail_msg">Let&#39;s say you store a lambda object into std::=
any<div class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_1425532395565240008gmail_msg"><br class=3D"m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565=
240008gmail_msg"></div><div class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">std::an=
y a =3D [](){};</div><div class=3D"m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><br class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg"></div><div class=3D"m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008=
gmail_msg">How are you going to obtain the lambda object back? AFAIK it&#39=
;s locked inside the any instance. If std::any had a mechanism of invoking =
the stored object you could still &quot;reach&quot; it.</div></div></blockq=
uote></div></span></blockquote><div class=3D"m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"=
><br class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_1425532395565240008gmail_msg">any_cast. You have to keep the=
 lambda type around of course. If you don&#39;t want to, wrap the lambda in=
 a std::function first before putting it in an std::any.<br class=3D"m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255=
32395565240008gmail_msg">=C2=A0</div><blockquote class=3D"gmail_quote m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425=
532395565240008gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex"><div class=3D"gmail_quote m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553=
2395565240008gmail_msg"><blockquote class=3D"gmail_quote m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652400=
08gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20=
4,204,204);padding-left:1ex"><div class=3D"m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><=
br class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"><div class=3D"gmail_quote m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255=
32395565240008gmail_msg"><span class=3D"m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">2017=
-03-03 11:15 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565=
240008gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail=
_msg">jane...@gmail.com</a>&gt;</span>:<br class=3D"m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gma=
il_msg"></span><blockquote class=3D"gmail_quote m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_m=
sg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204=
);padding-left:1ex"><span class=3D"m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div dir=
=3D"ltr" class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_1425532395565240008gmail_msg">I already wrote what I nee=
ded :) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; is simply blasphemo=
us.</div></span><span class=3D"m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><div class=3D=
"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_1425532395565240008gmail_msg"><div class=3D"m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg=
"><div class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg"><br class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"><div class=3D"gmail_quote m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">20=
17-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_1425532395565240008gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395=
565240008gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg"><blockquote class=3D"gmail_quote m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008=
gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,=
204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gm=
ail_msg">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a class=3D"m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532=
395565240008gmail_msg">jane...@gmail.com</a> wrote:<blockquote class=3D"gma=
il_quote m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_1425532395565240008gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;b=
order-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" cl=
ass=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_1425532395565240008gmail_msg">I believe that std::any should be mad=
e invokable, if an invokable object is stored into it, such as a function p=
ointer, method pointer, or a functor (such as std::function&lt;&gt; and oth=
ers). This would raise the level of abstraction C++ offers to one comparabl=
e to scripting languages, where you can often invoke an arbitrary variable.=
 I&#39;ve prepared 2 examples:</div></blockquote><div class=3D"m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955=
65240008gmail_msg"><br class=3D"m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">Any is a pol=
ymorphic wrapper for any object modeling the CopyConstructible concept. Any=
thing beyond that is out of scope. In fact any doesn&#39;t even provide equ=
ality or ordering, which would seem very basic. <br class=3D"m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565=
240008gmail_msg"><br class=3D"m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_1425532395565240008gmail_msg">What you want =
is std::function (another polymorphic wrapper for types modeling the Functi=
onObject concept) . If you want fully dynamic behavior (including runtime t=
ype checking of parameters), use function&lt;any(std::vector&lt;any&gt;)<wb=
r>&gt; and wrap the stored function in an adaptor that does the unboxing of=
 the parameters.<br class=3D"m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div></div></b=
lockquote></div><br class=3D"m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmai=
l_msg"></div><span class=3D"m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_1425532395565240008gmail_msg">

<p class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">std-pro=
posal...@isocpp.org</a>.<br class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg">std-pr...@isocpp.org</a>.<span class=3D"m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239556=
5240008gmail_msg"><br class=3D"m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg" target=3D"_blank"=
>https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wb=
r>CAO9E8GE2GR1GQRos5BCUJzLi5yaYu<wbr>p5XegKF253kwet6TFZBjg%40mail.<wbr>gmai=
l.com</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><sp=
an class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8m_-6275472275488112246gmail- m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_1425532395565240008gmail_msg">

<p class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_1425532395565240008gmail_msg" target=3D"_blank">https://groups.=
google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>un=
subscribe</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">std-proposal...@isocp=
p.org</a>.<span class=3D"m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><=
br class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"></span></span><span class=3D"m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955=
65240008gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_1425532395565240008gmail_msg" target=3D"_blank">https://groups.goo=
gle.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/a6013d8d-73a6-4f40-<wb=
r>bbc9-77e57123f68e%40isocpp.org</a><wbr>.<br class=3D"m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008=
gmail_msg">
</span></blockquote></div><br class=3D"m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div=
><span class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg"><font color=3D"#888888" clas=
s=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_1425532395565240008gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"><font color=3D"#888888" class=3D"m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_=
msg"><br class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_1425532395565240008gmail_msg"></font></span></div><span =
class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_1425532395565240008gmail_msg"><font color=3D"#888888" class=3D"m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1=
425532395565240008gmail_msg"><span class=3D"m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928m_-6275472275488112246gmail- m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239556=
5240008gmail_msg">

<p class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg"></span><span class=3D"m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928m_-6275472275488112246gmail- m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239556=
5240008gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">std-pro=
posal...@isocpp.org</a>.<br class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"></span><span class=3D"m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928m_-6275472275488112246gmail- m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239556524000=
8gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_1425532395565240008gmail_msg" target=3D"_bl=
ank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals=
/CAO9E8GEDs%<wbr>2BmqoyCxakK0v-hKoWcBYJE%<wbr>2B9rdXuNUyGMTRwqPFAw%40mail.<=
wbr>gmail.com</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg"><div class=3D"gmail_quote m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565=
240008gmail_msg"><blockquote class=3D"gmail_quote m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail=
_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2=
04);padding-left:1ex"><span class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><font c=
olor=3D"#888888" class=3D"m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_1425532395565240008gmail_msg"><span class=3D"m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928m_-62754722754=
88112246gmail- m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_1425532395565240008gmail_msg">

<p class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_1425532395565240008gmail_msg" target=3D"_blank">https://groups.=
google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>un=
subscribe</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">std-proposal...@isocp=
p.org</a>.<span class=3D"m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><=
br class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"></span></font></span></blockquote></div></div><div class=3D=
"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_1425532395565240008gmail_msg"><div class=3D"gmail_quote m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_1425532395565240=
008gmail_msg"><blockquote class=3D"gmail_quote m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_ms=
g" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex"><span class=3D"m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><font colo=
r=3D"#888888" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/C=
APCFJdSFV30P%<wbr>3DdEQoooHcn05s6WqBiaV4XpyuQY4P<wbr>3jLkM5Dqg%40mail.gmail=
..com</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_1425532395565240008gmail_msg">
</font></span></blockquote></div><br class=3D"m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg=
"></div><span class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928m_-6275472275488112246gmail- m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">

<p class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg"></span><span class=3D"m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928m_-6275472275488112246gmail- m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553239556=
5240008gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">std-pro=
posal...@isocpp.org</a>.<br class=3D"m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"></span></div></div><span class=3D"m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_142553=
2395565240008gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_1425532395565240008gmail_msg" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<=
wbr>CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw<wbr>cF4gFMF5HP%2B2QFCWvRS4A%<wbr>40mail.=
gmail.com</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg">
</span></blockquote></div><span class=3D"m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><sp=
an class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8m_-6275472275488112246gmail- m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_1425532395565240008gmail_msg">

<p class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_1425532395565240008gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_1425532395565240008gmail_msg" target=3D"_blank">https://groups.=
google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>un=
subscribe</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">std-proposal...@isocp=
p.org</a>.<span class=3D"m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"><=
br class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323955652=
40008gmail_msg"></span></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_1425532395565240008gmail_msg" target=3D"_blank"=
>https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wb=
r>CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ<wbr>FkP6CFq55NWM6HFLMgO-A%40mail.<wbr>gmai=
l.com</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_1425532395565240008gmail_msg">
</blockquote></div><br class=3D"m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_1425532395565240008gmail_msg"></div><span =
class=3D"m_1425532395565240008m_9039410119375693614HOEnZb m_142553239556524=
0008gmail_msg"><font color=3D"#888888" class=3D"m_1425532395565240008gmail_=
msg">
</font></span></blockquote></div></blockquote></div><span class=3D"m_142553=
2395565240008m_9039410119375693614HOEnZb m_1425532395565240008gmail_msg"><f=
ont color=3D"#888888" class=3D"m_1425532395565240008gmail_msg"><br class=3D=
"m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_1425532395565240008gmail_msg"></font></span></div></div></div></div><span=
 class=3D"m_1425532395565240008m_9039410119375693614HOEnZb m_14255323955652=
40008gmail_msg"><font color=3D"#888888" class=3D"m_1425532395565240008gmail=
_msg">

<p class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_14255323=
95565240008gmail_msg">
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" class=3D"m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_1=
425532395565240008gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<w=
br>isocpp.org</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_1425532395565240008gmail_msg" target=3D"_blank">std-proposa=
ls@isocpp.org</a>.<br class=3D"m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_1425532395565240008gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_1425532395565240008gmail_msg" target=3D"_blank">https://gr=
oups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GGYCVZ5C=
6-j_<wbr>3VOpgBPRkSz%2BBg0bU_%3DE%3D_<wbr>PFe0X4UOkiw%40mail.gmail.com</a>.=
<br class=3D"m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_1425532395565240008gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_1425532395565240008gmail_msg"><div class=3D"gmail_quote m_142553=
2395565240008gmail_msg"><blockquote class=3D"gmail_quote m_1425532395565240=
008gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><span class=3D"m_1425532395565240008m_9039410119375693614HOEnZb =
m_1425532395565240008gmail_msg"><font color=3D"#888888" class=3D"m_14255323=
95565240008gmail_msg">

<p class=3D"m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_1425532395565240008gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_1425=
532395565240008gmail_msg" target=3D"_blank">https://groups.google.com/a/<wb=
r>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<b=
r class=3D"m_1425532395565240008gmail_msg"></font></span></blockquote></div=
></div><div class=3D"gmail_extra m_1425532395565240008gmail_msg"><div class=
=3D"gmail_quote m_1425532395565240008gmail_msg"><blockquote class=3D"gmail_=
quote m_1425532395565240008gmail_msg" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><span class=3D"m_1425532395565240008m_90=
39410119375693614HOEnZb m_1425532395565240008gmail_msg"><font color=3D"#888=
888" class=3D"m_1425532395565240008gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_142553239556524=
0008gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<wbr>isocpp.org<=
/a>.</font></span></blockquote></div></div><div class=3D"gmail_extra m_1425=
532395565240008gmail_msg"><div class=3D"gmail_quote m_1425532395565240008gm=
ail_msg"><blockquote class=3D"gmail_quote m_1425532395565240008gmail_msg" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><spa=
n class=3D"m_1425532395565240008m_9039410119375693614HOEnZb m_1425532395565=
240008gmail_msg"><font color=3D"#888888" class=3D"m_1425532395565240008gmai=
l_msg"><br class=3D"m_1425532395565240008gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_1425532395565240008gmail_msg" target=3D"_blank">std-propos=
als@isocpp.org</a>.<br class=3D"m_1425532395565240008gmail_msg"></font></sp=
an></blockquote></div></div><div class=3D"gmail_extra m_1425532395565240008=
gmail_msg"><div class=3D"gmail_quote m_1425532395565240008gmail_msg"><block=
quote class=3D"gmail_quote m_1425532395565240008gmail_msg" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_14=
25532395565240008m_9039410119375693614HOEnZb m_1425532395565240008gmail_msg=
"><font color=3D"#888888" class=3D"m_1425532395565240008gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNS=
zw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"m_1425532395565240008gmail_msg" target=3D"_blank">https://groups.=
google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wbr>CAPCFJdQ3nZaF9=
aUSnFzwE0jm2pSie<wbr>FCLyJNSzw_bWiDVW0oV4Q%40mail.<wbr>gmail.com</a>.<br cl=
ass=3D"m_1425532395565240008gmail_msg">
</font></span></blockquote></div><br class=3D"m_1425532395565240008gmail_ms=
g"></div><span class=3D"HOEnZb"><font color=3D"#888888">

<p class=3D"m_1425532395565240008gmail_msg"></p>

-- <br class=3D"m_1425532395565240008gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_1425532=
395565240008gmail_msg">
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" class=3D"m_=
1425532395565240008gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<=
wbr>isocpp.org</a>.<br class=3D"m_1425532395565240008gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_1425532395565240008gmail_msg" target=3D"_blank">std-propos=
als@isocpp.org</a>.<br class=3D"m_1425532395565240008gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvG=
Wbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_1425532395565240008gmail_msg" target=3D"_blank">https://gro=
ups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GGM%3D%3D=
cAn_<wbr>e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg<wbr>0mkgNg%40mail.gmail.com</a>.<br=
 class=3D"m_1425532395565240008gmail_msg">
</font></span></blockquote></div><span class=3D"HOEnZb"><font color=3D"#888=
888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0VDrQjgtk=
4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/<wbr>CAPCFJdS9eRWOkpJAPqk8a2sqAOB0V<wbr>DrQjgtk4H6AFAHJ5obmJ=
w%40mail.<wbr>gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEhviWUpteV%2BS3u3pDC4oVny2gX3M=
NRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoo=
ter">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEh=
viWUpteV%2BS3u3pDC4oVny2gX3MNRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com</a>.<br=
 />

--001a11407f6ec4df410549d52d3a--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Fri, 03 Mar 2017 15:31:11 +0000
Raw View
--001a113dc5e4e8adf00549d53c5f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Yes; my point is you're asking for an ability to throw away more of it, *wi=
th
an additional cost for everyone who doesn't use this *(which is pretty
directly against what C++ stands for). I'm pretty confident that this is
not the right direction.

Go on, write a paper. We'll see whose opinion the LEWG favors more.

On Fri, Mar 3, 2017 at 4:27 PM janezz55 . <janezz55@gmail.com> wrote:

> Michal: You throw away compile-time type safety every time you use a
> std::any, this was the case all the way back to 2001.
>
> 2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>
> Sorry; my last message should've read "I want to throw away compile-time
> type safety [...]".
>
> On Fri, Mar 3, 2017 at 4:11 PM janezz55 . <janezz55@gmail.com> wrote:
>
> Michal: You haven't read the code, there is a type_id. Types are checked.
>
> 2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>
> So your use-case that's supposed to convince the committee is "I want to
> throw away type safety for my thing, help me with doing that"?
>
> On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:
>
> Edward: Thanks for the suggestions. I didn't presume to think my
> implementation was definitive. It is the closest we can get in C++ to wha=
t
> the scripting languages have, without sacrificing too much, in my opinion=
..
> The conversions you mention could be done, but only at the price of
> significant overhead. Plain std::any does not support conversions when
> casting either. If I wrote my own any, I'd definitely move everything I
> could into the vtable of the holder, as you suggest. The any_function
> implementation is just an example, an idea that occurred to me only
> gradually.
>
> I don't want the user specify the return type, because this is not
> traditionally std::any-like. You can store almost anything into a std::an=
y
> instance, but you don't need to specify anything, there are no template
> instantiations needed. Only when casting, do you need those.
>
> I like your invoke() idea. If something like that were implemented, I'd b=
e
> perfectly pleased with it, but really, why not have a operator() as well?
> It seems prettier to me, scripting language like. We can invoke a variabl=
e,
> just like in a scripting language.
>
> Michal: I'm using this as part of my signal/slot implementation. I don't
> want to specify function signatures of my slots, that's the only reason w=
hy
> I use this. The slots usually don't have many arguments as you want signa=
l
> handling to be fast , also conversions cost time so you don't really want
> them, the single signature problem is not much of a problem. Take a look:
>
> https://github.com/user1095108/crl
>
> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>
> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>
> When you open your browser the use cases are showing in front of your
> eyes, JavaScript programs storing functions in a variable. Python, lua an=
d
> countless other scripts doing the same. I can't believe you haven't seen
> any of this in practice.
>
>
> It works in scripting languages because they have a rich base type (have
> you looked at the size of the PyObject vtable?) that erases all the
> operations the language syntax allows on an object. We don't have that in
> C++ because of overhead and because it's incompatible with a
> Turing-complete compile time type system.
>
> Your proposed facility:
>
> * Requires the target type to have exactly 1 call signature, so it won't
> work with multi-callables, overload combiners, or polymorphic or variadic
> function objects, esp. closure types.
> * Requires the caller to supply exactly the arguments corresponding to th=
e
> signature of the target type (otherwise UB, assert or throw). So no
> arithmetic conversions, cvr conversions or implicit conversions. That's a
> recipe for frustration.
> * Asymmetry between argument and return types; why not require the user t=
o
> specify the return type?
> * Overhead: one extra function pointer plus one extra typeid (for the
> signature type, if extant) per any instance.
>
> Now some constructive suggestions:
>
> * The overhead is a defect of your implementation; you can move those
> members into the vtable, at the cost of an extra indirection.
> * The return type could be provided by having your invoke member function
> take the return type as the first template parameter, or preferably
> providing a non-member invoke. That would also allow supplying argument
> types explicitly:
>
> auto a =3D any{[](std::string, unsigned) { return true; }};
> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>
> Is that useful? I'm not too sure, but at least it's clear what the
> facility can and cannot do. It still can't accept multi-signature callabl=
es.
>
> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>
> You've asked for a feature, and yet you can't produce an example of how
> that feature would be useful. This is the rational argument: we don't nee=
d
> features that don't have use cases.
>
> Do show us examples of how this is useful and we might reconsider this
> feature. Plain and simple like that. Throwing logical fallacies around
> won't change it.
>
> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>
> We don't need C++, ASM is sufficient, or an arbitrary other computer
> language. 640k were sufficient at some point in time. I haven't heard a
> single rational argument from you. I'd hate to have you as a boss.
>
> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>
> You're proposing a feature for the sake of having a feature. Give us
> actual use cases if you think that is not true.
>
> Having a feature that no-one will use is not beneficial.
>
> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>
> As for me being a type ducking proponent... std::any in various forms has
> been around since 2001, I think. All the while until now you could assign=
 a
> function pointer or a member function pointer to it as well as copyable
> function objects. It's nothing new. Adding the invocation feature would
> simply be a natural development in my opinion.
>
> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> What you describe are workarounds. If you want to use a temporary lambda,
> you won't be able to keep the type around. Maybe you don't want to specif=
y
> the function signature and so std::function is not appropriate.
>
> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>
> Show us the actual (i.e. complete) example of why that be useful (and why
> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
> function_ref, for that).
>
> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>
> Let's say you store a lambda object into std::any
>
> std::any a =3D [](){};
>
> How are you going to obtain the lambda object back? AFAIK it's locked
> inside the any instance. If std::any had a mechanism of invoking the stor=
ed
> object you could still "reach" it.
>
>
> any_cast. You have to keep the lambda type around of course. If you don't
> want to, wrap the lambda in a std::function first before putting it in an
> std::any.
>
>
>
> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>
> I already wrote what I needed :) function<any(std::vector<any>)> is simpl=
y
> blasphemous.
>
> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>
> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object
> is stored into it, such as a function pointer, method pointer, or a funct=
or
> (such as std::function<> and others). This would raise the level of
> abstraction C++ offers to one comparable to scripting languages, where yo=
u
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
>
> Any is a polymorphic wrapper for any object modeling the CopyConstructibl=
e
> concept. Anything beyond that is out of scope. In fact any doesn't even
> provide equality or ordering, which would seem very basic.
>
> What you want is std::function (another polymorphic wrapper for types
> modeling the FunctionObject concept) . If you want fully dynamic behavior
> (including runtime type checking of parameters), use
> function<any(std::vector<any>)> and wrap the stored function in an adapto=
r
> that does the unboxing of the parameters.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1=
GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR=
1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a=
6-4f40-bbc9-77e57123f68e%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73=
a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2=
BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%=
2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
>
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30=
P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV3=
0P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjy=
kbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHj=
ykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposal...@isocpp.org.
> To post to this group, send email to std-pr...@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9c=
FUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9=
cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
>
>
> --
> 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/CAO9E8GGYCVZ=
5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCV=
Z5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
>
> To unsubscribe from this group and all its topics, 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/CAPCFJdQ3nZa=
F9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZ=
aF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
>
> --
> 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/CAO9E8GGM%3D=
%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3=
D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, 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/CAPCFJdS9eRW=
OkpJAPqk8a2sqAOB0VDrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9eR=
WOkpJAPqk8a2sqAOB0VDrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>
>
> --
> 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/CAO9E8GEhviW=
UpteV%2BS3u3pDC4oVny2gX3MNRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEhvi=
WUpteV%2BS3u3pDC4oVny2gX3MNRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com?utm_mediu=
m=3Demail&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAPCFJdT6jP_r6qqd9ukUvyK0rFUPt3S5VWbOeHagKC7czwM=
8oQ%40mail.gmail.com.

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

<div dir=3D"ltr">Yes; my point is you&#39;re asking for an ability to throw=
 away more of it, <i>with an additional cost for everyone who doesn&#39;t u=
se this </i>(which is pretty directly against what C++ stands for). I&#39;m=
 pretty confident that this is not the right direction.<div><br></div><div>=
Go on, write a paper. We&#39;ll see whose opinion the LEWG favors more.</di=
v></div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017=
 at 4:27 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com">janezz55@g=
mail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D=
"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr" class=3D"gmail_msg">Michal: You throw away compile-time type safety e=
very time you use a std::any, this was the case all the way back to 2001.</=
div><div class=3D"gmail_extra gmail_msg"><br class=3D"gmail_msg"><div class=
=3D"gmail_quote gmail_msg"></div></div><div class=3D"gmail_extra gmail_msg"=
><div class=3D"gmail_quote gmail_msg">2017-03-03 16:18 GMT+01:00 Micha=C5=
=82 Dominiak <span dir=3D"ltr" class=3D"gmail_msg">&lt;<a href=3D"mailto:gr=
iwes@griwes.info" class=3D"gmail_msg" target=3D"_blank">griwes@griwes.info<=
/a>&gt;</span>:<br class=3D"gmail_msg"></div></div><div class=3D"gmail_extr=
a gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=3D"gmai=
l_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;pa=
dding-left:1ex"><div dir=3D"ltr" class=3D"gmail_msg">Sorry; my last message=
 should&#39;ve read &quot;I want to throw away compile-time type safety [..=
..]&quot;.</div><br class=3D"gmail_msg"><div class=3D"gmail_quote gmail_msg"=
><div dir=3D"ltr" class=3D"gmail_msg">On Fri, Mar 3, 2017 at 4:11 PM janezz=
55 . &lt;<a href=3D"mailto:janezz55@gmail.com" class=3D"gmail_msg" target=
=3D"_blank">janezz55@gmail.com</a>&gt; wrote:<br class=3D"gmail_msg"></div>=
<blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_862085=
7624651409115m_1425532395565240008gmail_msg gmail_msg">Michal: You haven&#3=
9;t read the code, there is a type_id. Types are checked.</div><div class=
=3D"gmail_extra m_8620857624651409115m_1425532395565240008gmail_msg gmail_m=
sg"><br class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_=
msg"><div class=3D"gmail_quote m_8620857624651409115m_1425532395565240008gm=
ail_msg gmail_msg"></div></div><div class=3D"gmail_extra m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"><div class=3D"gmail_quote m_86=
20857624651409115m_1425532395565240008gmail_msg gmail_msg">2017-03-03 16:09=
 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_86208576246514=
09115m_1425532395565240008gmail_msg gmail_msg">&lt;<a href=3D"mailto:griwes=
@griwes.info" class=3D"m_8620857624651409115m_1425532395565240008gmail_msg =
gmail_msg" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br class=3D=
"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></div></div=
><div class=3D"gmail_extra m_8620857624651409115m_1425532395565240008gmail_=
msg gmail_msg"><div class=3D"gmail_quote m_8620857624651409115m_14255323955=
65240008gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_86208576246=
51409115m_1425532395565240008gmail_msg gmail_msg" style=3D"margin:0 0 0 .8e=
x;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_=
8620857624651409115m_1425532395565240008gmail_msg gmail_msg">So your use-ca=
se that&#39;s supposed to convince the committee is &quot;I want to throw a=
way type safety for my thing, help me with doing that&quot;?</div><br class=
=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><div cla=
ss=3D"gmail_quote m_8620857624651409115m_1425532395565240008gmail_msg gmail=
_msg"><div dir=3D"ltr" class=3D"m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg">On Fri, Mar 3, 2017 at 4:04 PM janezz55 . &lt;<a href=
=3D"mailto:janezz55@gmail.com" class=3D"m_8620857624651409115m_142553239556=
5240008gmail_msg gmail_msg" target=3D"_blank">janezz55@gmail.com</a>&gt; wr=
ote:<br class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_=
msg"></div><blockquote class=3D"gmail_quote m_8620857624651409115m_14255323=
95565240008gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px =
#ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">Edward: Than=
ks for the suggestions. I didn&#39;t presume to think my implementation was=
 definitive. It is the closest we can get in C++ to what the scripting lang=
uages have, without sacrificing too much, in my opinion. The conversions yo=
u mention could be done, but only at the price of significant overhead. Pla=
in std::any does not support conversions when casting either. If I wrote my=
 own any, I&#39;d definitely move everything I could into the vtable of the=
 holder, as you suggest. The any_function implementation is just an example=
, an idea that occurred to me only gradually.<div class=3D"m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><br clas=
s=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_ms=
g gmail_msg"></div><div class=3D"m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m=
_1425532395565240008gmail_msg gmail_msg">I don&#39;t want the user specify =
the return type, because this is not traditionally std::any-like. You can s=
tore almost anything into a std::any instance, but you don&#39;t need to sp=
ecify anything, there are no template instantiations needed. Only when cast=
ing, do you need those.</div><div class=3D"m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></d=
iv><div class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524=
0008gmail_msg gmail_msg">I like your invoke() idea. If something like that =
were implemented, I&#39;d be perfectly pleased with it, but really, why not=
 have a operator() as well? It seems prettier to me, scripting language lik=
e. We can invoke a variable, just like in a scripting language.<br class=3D=
"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gm=
ail_msg"><div class=3D"m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239=
5565240008gmail_msg gmail_msg"><br class=3D"m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762=
4651409115m_1425532395565240008gmail_msg gmail_msg"></div><div class=3D"m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_=
msg">Michal: I&#39;m using this as part of my signal/slot implementation. I=
 don&#39;t want to specify function signatures of my slots, that&#39;s the =
only reason why I use this. The slots usually don&#39;t have many arguments=
 as you want signal handling to be fast , also conversions cost time so you=
 don&#39;t really want them, the single signature problem is not much of a =
problem. Take a look:</div><div class=3D"m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465=
1409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></div=
><div class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg"><a href=3D"https://github.com/user1095108/crl" class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg" target=3D"_blank">https://github.com/user1095108/crl</a><br cla=
ss=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_m=
sg gmail_msg"></div></div></div><div dir=3D"ltr" class=3D"m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><div clas=
s=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_ms=
g gmail_msg"><div class=3D"m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255=
32395565240008gmail_msg gmail_msg"><div class=3D"gmail_extra m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><br cl=
ass=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_=
msg gmail_msg"><div class=3D"gmail_quote m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465=
1409115m_1425532395565240008gmail_msg gmail_msg">2017-03-03 15:22 GMT+01:00=
 Edward Catmur <span dir=3D"ltr" class=3D"m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246=
51409115m_1425532395565240008gmail_msg gmail_msg">&lt;<a href=3D"mailto:ed@=
catmur.co.uk" class=3D"m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239=
5565240008gmail_msg gmail_msg" target=3D"_blank">ed@catmur.co.uk</a>&gt;</s=
pan>:<br class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652=
40008gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg" style=3D=
"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-le=
ft:1ex"><div dir=3D"ltr" class=3D"m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115=
m_1425532395565240008gmail_msg gmail_msg"><span class=3D"m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-62754=
72275488112246gmail- m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955=
65240008gmail_msg gmail_msg">On Friday, 3 March 2017 14:05:46 UTC, janezz55=
 .  wrote:<blockquote class=3D"gmail_quote m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr" class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652=
40008gmail_msg gmail_msg">When you open your browser the use cases are show=
ing in front of your eyes, JavaScript programs storing functions in a varia=
ble. Python, lua and countless other scripts doing the same. I can&#39;t be=
lieve you haven&#39;t seen any of this in practice.</div></blockquote><div =
class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmai=
l_msg gmail_msg"><br class=3D"m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14=
25532395565240008gmail_msg gmail_msg"></div></span><div class=3D"m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">It=
 works in scripting languages because they have a rich base type (have you =
looked at the size of the PyObject vtable?) that erases all the operations =
the language syntax allows on an object. We don&#39;t have that in C++ beca=
use of overhead and because it&#39;s incompatible with a Turing-complete co=
mpile time type system.</div><div class=3D"m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></d=
iv><div class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524=
0008gmail_msg gmail_msg"><div class=3D"m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514=
09115m_1425532395565240008gmail_msg gmail_msg">Your proposed facility:</div=
><div class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg"><br class=3D"m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514091=
15m_1425532395565240008gmail_msg gmail_msg"></div><div class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">* R=
equires the target type to have exactly 1 call signature, so it won&#39;t w=
ork with multi-callables, overload combiners, or polymorphic or variadic fu=
nction objects, esp. closure types.</div><div class=3D"m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">* Requires t=
he caller to supply exactly the arguments corresponding to the signature of=
 the target type (otherwise UB, assert or throw). So no arithmetic conversi=
ons, cvr conversions or implicit conversions. That&#39;s a recipe for frust=
ration.</div><div class=3D"m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255=
32395565240008gmail_msg gmail_msg">* Asymmetry between argument and return =
types; why not require the user to specify the return type?</div><div class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">* Overhead: one extra function pointer plus one extra typeid (f=
or the signature type, if extant) per any instance.</div></div><div class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg"><br class=3D"m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532=
395565240008gmail_msg gmail_msg"></div><div class=3D"m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
8620857624651409115m_1425532395565240008gmail_msg gmail_msg">Now some const=
ructive suggestions:</div><div class=3D"m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651=
409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></div>=
<div class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524000=
8gmail_msg gmail_msg">* The overhead is a defect of your implementation; yo=
u can move those members into the vtable, at the cost of an extra indirecti=
on.</div><div class=3D"m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239=
5565240008gmail_msg gmail_msg">* The return type could be provided by havin=
g your invoke member function take the return type as the first template pa=
rameter, or preferably providing a non-member invoke. That would also allow=
 supplying argument types explicitly:</div><div class=3D"m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><br class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg"></div><div class=3D"m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_=
1425532395565240008gmail_msg gmail_msg">auto a =3D any{[](std::string, unsi=
gned) { return true; }};</div><div class=3D"m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762=
4651409115m_1425532395565240008gmail_msg gmail_msg">auto b =3D invoke&lt;bo=
ol, std::string, unsigned&gt;(a, &quot;meow&quot;, 1);</div><div class=3D"m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmai=
l_msg"><br class=3D"m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556=
5240008gmail_msg gmail_msg"></div><div class=3D"m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208=
57624651409115m_1425532395565240008gmail_msg gmail_msg">Is that useful? I&#=
39;m not too sure, but at least it&#39;s clear what the facility can and ca=
nnot do. It still can&#39;t accept multi-signature callables.</div><div cla=
ss=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_m=
sg gmail_msg"><br class=3D"m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255=
32395565240008gmail_msg gmail_msg"></div><blockquote class=3D"gmail_quote m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmai=
l_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,=
204);padding-left:1ex"><div class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"><div class=3D"gmail_quote m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_m=
sg"><span class=3D"m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928m_-6275472275488112246gmail- m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">2017-03-0=
3 14:46 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">&=
lt;<a rel=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_=
1425532395565240008gmail_msg gmail_msg">gri...@griwes.info</a>&gt;</span>:<=
br class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></span><blockquote class=3D"gmail_quote m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><span class=3D"m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><d=
iv dir=3D"ltr" class=3D"m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323=
95565240008gmail_msg gmail_msg">You&#39;ve asked for a feature, and yet you=
 can&#39;t produce an example of how that feature would be useful. This is =
the rational argument: we don&#39;t need features that don&#39;t have use c=
ases.<div class=3D"m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565=
240008gmail_msg gmail_msg"><br class=3D"m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651=
409115m_1425532395565240008gmail_msg gmail_msg"></div><div class=3D"m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"=
>Do show us examples of how this is useful and we might reconsider this fea=
ture. Plain and simple like that. Throwing logical fallacies around won&#39=
;t change it.</div></div><br class=3D"m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg"></span><div class=3D"gmail_qu=
ote m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg"><span class=3D"m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><=
div class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008=
gmail_msg gmail_msg"><div class=3D"m_8620857624651409115m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140911=
5m_1425532395565240008gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg=
">On Fri, Mar 3, 2017 at 2:31 PM janezz55 . &lt;<a rel=3D"nofollow" class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D"m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></div></di=
v></div></span><blockquote class=3D"gmail_quote m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208=
57624651409115m_1425532395565240008gmail_msg gmail_msg" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><di=
v class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gm=
ail_msg gmail_msg"><div class=3D"m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m=
_1425532395565240008gmail_msg gmail_msg"><span class=3D"m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-627547=
2275488112246gmail- m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556=
5240008gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">We don&#39;t =
need C++, ASM is sufficient, or an arbitrary other computer language. 640k =
were sufficient at some point in time. I haven&#39;t heard a single rationa=
l argument from you. I&#39;d hate to have you as a boss.</div><div class=3D=
"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gm=
ail_msg"><br class=3D"m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395=
565240008gmail_msg gmail_msg"><div class=3D"gmail_quote m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></div></div=
></span><span class=3D"m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928m_-6275472275488112246gmail- m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><div =
class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmai=
l_msg gmail_msg"><div class=3D"gmail_quote m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg">2017-03-03 14:25 GMT+01:=
00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86=
20857624651409115m_1425532395565240008gmail_msg gmail_msg">&lt;<a rel=3D"no=
follow" class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524=
0008gmail_msg gmail_msg">gri...@griwes.info</a>&gt;</span>:<br class=3D"m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_=
msg"></div></div></span><div class=3D"m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg"><div class=3D"gmail_quote m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_=
msg"><blockquote class=3D"gmail_quote m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0=
..8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"><div dir=3D"ltr" class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">You&#39;re proposing a feature for the sake of having a feature=
.. Give us actual use cases if you think that is not true.<div class=3D"m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_m=
sg"><br class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524=
0008gmail_msg gmail_msg"></div><div class=3D"m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576=
24651409115m_1425532395565240008gmail_msg gmail_msg">Having a feature that =
no-one will use is not beneficial.</div></div><br class=3D"m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></span><=
div class=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532=
395565240008gmail_msg gmail_msg"><span class=3D"m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928m_-62754722754881=
12246gmail- m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857=
624651409115m_1425532395565240008gmail_msg gmail_msg">On Fri, Mar 3, 2017 a=
t 12:59 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">jane...@gmai=
l.com</a>&gt; wrote:<br class=3D"m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m=
_1425532395565240008gmail_msg gmail_msg"></div></span><blockquote class=3D"=
gmail_quote m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex"><span class=3D"m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928m_-62754722754=
88112246gmail- m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620=
857624651409115m_1425532395565240008gmail_msg gmail_msg">As for me being a =
type ducking proponent... std::any in various forms has been around since 2=
001, I think. All the while until now you could assign a function pointer o=
r a member function pointer to it as well as copyable function objects. It&=
#39;s nothing new. Adding the invocation feature would simply be a natural =
development in my opinion.</div></span><div class=3D"m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmai=
l_msg"><div class=3D"gmail_quote m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m=
_1425532395565240008gmail_msg gmail_msg"><span class=3D"m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-627547=
2275488112246gmail- m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556=
5240008gmail_msg gmail_msg">2017-03-03 12:47 GMT+01:00 janezz55 . <span dir=
=3D"ltr" class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652=
40008gmail_msg gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">jane...@=
gmail.com</a>&gt;</span>:<br class=3D"m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg"></span><blockquote class=3D"g=
mail_quote m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gm=
ail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex"><span class=3D"m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928m_-627547227548=
8112246gmail- m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524000=
8gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208=
57624651409115m_1425532395565240008gmail_msg gmail_msg">What you describe a=
re workarounds. If you want to use a temporary lambda, you won&#39;t be abl=
e to keep the type around. Maybe you don&#39;t want to specify the function=
 signature and so std::function is not appropriate.</div></span><div class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg"><div class=3D"m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553=
2395565240008gmail_msg gmail_msg"><div class=3D"m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208=
57624651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg=
"><div class=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425=
532395565240008gmail_msg gmail_msg"><span class=3D"m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928m_-62754722754=
88112246gmail- m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <s=
pan dir=3D"ltr" class=3D"m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532=
395565240008gmail_msg gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">g=
pde...@gmail.com</a>&gt;</span>:<br class=3D"m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576=
24651409115m_1425532395565240008gmail_msg gmail_msg"></span><blockquote cla=
ss=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652=
40008gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-62754=
72275488112246gmail- m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955=
65240008gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><span class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Domini=
ak wrote:</span><blockquote class=3D"gmail_quote m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620=
857624651409115m_1425532395565240008gmail_msg gmail_msg" style=3D"margin:0p=
x 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><s=
pan class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008=
gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085=
7624651409115m_1425532395565240008gmail_msg gmail_msg">Show us the actual (=
i.e. complete) example of why that be useful (and why you wouldn&#39;t just=
 use `std::function&lt;void ()&gt;`, or the somewhat proposed function_ref,=
 for that).</div><br class=3D"m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14=
25532395565240008gmail_msg gmail_msg"></span><span class=3D"m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><div cl=
ass=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565=
240008gmail_msg gmail_msg"><div dir=3D"ltr" class=3D"m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
8620857624651409115m_1425532395565240008gmail_msg gmail_msg">On Fri, Mar 3,=
 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">jane.=
...@gmail.com</a>&gt; wrote:<br class=3D"m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651=
409115m_1425532395565240008gmail_msg gmail_msg"></div><blockquote class=3D"=
gmail_quote m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">Let&#=
39;s say you store a lambda object into std::any<div class=3D"m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><br c=
lass=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail=
_msg gmail_msg"></div><div class=3D"m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514091=
15m_1425532395565240008gmail_msg gmail_msg">std::any a =3D [](){};</div><di=
v class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gm=
ail_msg gmail_msg"><br class=3D"m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_=
1425532395565240008gmail_msg gmail_msg"></div><div class=3D"m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">How are=
 you going to obtain the lambda object back? AFAIK it&#39;s locked inside t=
he any instance. If std::any had a mechanism of invoking the stored object =
you could still &quot;reach&quot; it.</div></div></blockquote></div></span>=
</blockquote><div class=3D"m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255=
32395565240008gmail_msg gmail_msg"><br class=3D"m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208=
57624651409115m_1425532395565240008gmail_msg gmail_msg">any_cast. You have =
to keep the lambda type around of course. If you don&#39;t want to, wrap th=
e lambda in a std::function first before putting it in an std::any.<br clas=
s=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_ms=
g gmail_msg">=C2=A0</div><blockquote class=3D"gmail_quote m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex"><div class=3D"gmail_quote m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m=
_1425532395565240008gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmai=
l_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,=
204);padding-left:1ex"><div class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><div clas=
s=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524=
0008gmail_msg gmail_msg"><span class=3D"m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651=
409115m_1425532395565240008gmail_msg gmail_msg">2017-03-03 11:15 GMT+01:00 =
janezz55 . <span dir=3D"ltr" class=3D"m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg">&lt;<a rel=3D"nofollow" class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">jane...@gmail.com</a>&gt;</span>:<br class=3D"m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></span><b=
lockquote class=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1=
425532395565240008gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_ms=
g"><div dir=3D"ltr" class=3D"m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142=
5532395565240008gmail_msg gmail_msg">I already wrote what I needed :) funct=
ion&lt;any(std::vector&lt;any&gt;)&gt; is simply blasphemous.</div></span><=
span class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524000=
8gmail_msg gmail_msg"><div class=3D"m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514091=
15m_1425532395565240008gmail_msg gmail_msg"><div class=3D"m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><div clas=
s=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_ms=
g gmail_msg"><br class=3D"m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553=
2395565240008gmail_msg gmail_msg"><div class=3D"gmail_quote m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">2017-03=
-03 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_ms=
g">&lt;<a rel=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514091=
15m_1425532395565240008gmail_msg gmail_msg">gpde...@gmail.com</a>&gt;</span=
>:<br class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg" style=3D"ma=
rgin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:=
1ex"><div dir=3D"ltr" class=3D"m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1=
425532395565240008gmail_msg gmail_msg">On Thursday, March 2, 2017 at 6:26:0=
1 PM UTC, <a class=3D"m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395=
565240008gmail_msg gmail_msg">jane...@gmail.com</a> wrote:<blockquote class=
=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px s=
olid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">I=
 believe that std::any should be made invokable, if an invokable object is =
stored into it, such as a function pointer, method pointer, or a functor (s=
uch as std::function&lt;&gt; and others). This would raise the level of abs=
traction C++ offers to one comparable to scripting languages, where you can=
 often invoke an arbitrary variable. I&#39;ve prepared 2 examples:</div></b=
lockquote><div class=3D"m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323=
95565240008gmail_msg gmail_msg"><br class=3D"m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576=
24651409115m_1425532395565240008gmail_msg gmail_msg">Any is a polymorphic w=
rapper for any object modeling the CopyConstructible concept. Anything beyo=
nd that is out of scope. In fact any doesn&#39;t even provide equality or o=
rdering, which would seem very basic. <br class=3D"m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86=
20857624651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_=
msg">What you want is std::function (another polymorphic wrapper for types =
modeling the FunctionObject concept) . If you want fully dynamic behavior (=
including runtime type checking of parameters), use function&lt;any(std::ve=
ctor&lt;any&gt;)&gt; and wrap the stored function in an adaptor that does t=
he unboxing of the parameters.<br class=3D"m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"></div></div></blockquote=
></div><br class=3D"m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556=
5240008gmail_msg gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86=
20857624651409115m_1425532395565240008gmail_msg gmail_msg"></div><span clas=
s=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_ms=
g gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><=
/span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg">std-proposal...@isocpp.org</a>=
..<br class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524000=
8gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">s=
td-pr...@isocpp.org</a>.<span class=3D"m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514=
09115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255=
32395565240008gmail_msg gmail_msg" target=3D"_blank">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegK=
F253kwet6TFZBjg%40mail.gmail.com</a>.<br class=3D"m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862=
0857624651409115m_1425532395565240008gmail_msg gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465=
1409115m_1425532395565240008gmail_msg gmail_msg"><span class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m=
_-6275472275488112246gmail- m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425=
532395565240008gmail_msg gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gm=
ail_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org=
/d/topic/std-proposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></s=
pan>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239=
5565240008gmail_msg gmail_msg">std-proposal...@isocpp.org</a>.<span class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">s=
td-pr...@isocpp.org</a>.<br class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"></span></span><span class=3D"m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928m_-6275472275488112246gmail- m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail=
_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/=
msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%40isocpp.org</a>.<=
br class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg">
</span></blockquote></div><br class=3D"m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514=
09115m_1425532395565240008gmail_msg gmail_msg"></div><span class=3D"m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"=
><font color=3D"#888888" class=3D"m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115=
m_1425532395565240008gmail_msg gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><font c=
olor=3D"#888888" class=3D"m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553=
2395565240008gmail_msg gmail_msg"><br class=3D"m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085=
7624651409115m_1425532395565240008gmail_msg gmail_msg"></font></span></div>=
<span class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><span class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><=
/span><span class=3D"m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928m_-6275472275488112246gmail- m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg">std-proposal...@isocpp.org</a>=
..<br class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524000=
8gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">s=
td-pr...@isocpp.org</a>.<br class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"></span><span class=3D"m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28m_-6275472275488112246gmail- m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1=
425532395565240008gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1=
425532395565240008gmail_msg gmail_msg" target=3D"_blank">https://groups.goo=
gle.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBY=
JE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com</a>.<br class=3D"m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg"><div class=3D"gmail_quote m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg"><blockquote class=3D"gmail_qu=
ote m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex"><span class=3D"m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"><font color=3D"#888888" =
class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmai=
l_msg gmail_msg"><span class=3D"m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_m=
sg">

<p class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gm=
ail_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org=
/d/topic/std-proposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></s=
pan>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239=
5565240008gmail_msg gmail_msg">std-proposal...@isocpp.org</a>.<span class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">s=
td-pr...@isocpp.org</a>.<br class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"></span></font></span></blockqu=
ote></div></div><div class=3D"m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14=
25532395565240008gmail_msg gmail_msg"><div class=3D"gmail_quote m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><bl=
ockquote class=3D"gmail_quote m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14=
25532395565240008gmail_msg gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bor=
der-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg=
"><font color=3D"#888888" class=3D"m_8620857624651409115m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465140911=
5m_1425532395565240008gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142=
5532395565240008gmail_msg gmail_msg" target=3D"_blank">https://groups.googl=
e.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBia=
V4XpyuQY4P3jLkM5Dqg%40mail.gmail.com</a>.<br class=3D"m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
</font></span></blockquote></div><br class=3D"m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857=
624651409115m_1425532395565240008gmail_msg gmail_msg"></div><span class=3D"=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928m_-6275472275488112246gmail- m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576246514=
09115m_1425532395565240008gmail_msg gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><=
/span><span class=3D"m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928m_-6275472275488112246gmail- m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg">std-proposal...@isocpp.org</a>=
..<br class=3D"m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239556524000=
8gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">s=
td-pr...@isocpp.org</a>.<br class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"></span></div></div><span class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142=
5532395565240008gmail_msg gmail_msg" target=3D"_blank">https://groups.googl=
e.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4g=
FMF5HP%2B2QFCWvRS4A%40mail.gmail.com</a>.<br class=3D"m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
</span></blockquote></div><span class=3D"m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862085762465=
1409115m_1425532395565240008gmail_msg gmail_msg"><span class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m=
_-6275472275488112246gmail- m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425=
532395565240008gmail_msg gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gm=
ail_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.org=
/d/topic/std-proposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"></s=
pan>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_142553239=
5565240008gmail_msg gmail_msg">std-proposal...@isocpp.org</a>.<span class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928m_-6275472275488112246gmail- m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">s=
td-pr...@isocpp.org</a>.<br class=3D"m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409=
115m_1425532395565240008gmail_msg gmail_msg"></span></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255=
32395565240008gmail_msg gmail_msg" target=3D"_blank">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CF=
q55NWM6HFLMgO-A%40mail.gmail.com</a>.<br class=3D"m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_862=
0857624651409115m_1425532395565240008gmail_msg gmail_msg">
</blockquote></div><br class=3D"m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_8620857624651409115m_=
1425532395565240008gmail_msg gmail_msg"></div><span class=3D"m_862085762465=
1409115m_1425532395565240008m_9039410119375693614HOEnZb m_86208576246514091=
15m_1425532395565240008gmail_msg gmail_msg"><font color=3D"#888888" class=
=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
</font></span></blockquote></div></blockquote></div><span class=3D"m_862085=
7624651409115m_1425532395565240008m_9039410119375693614HOEnZb m_86208576246=
51409115m_1425532395565240008gmail_msg gmail_msg"><font color=3D"#888888" c=
lass=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><br =
class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmai=
l_msg gmail_msg"></font></span></div></div></div></div><span class=3D"m_862=
0857624651409115m_1425532395565240008m_9039410119375693614HOEnZb m_86208576=
24651409115m_1425532395565240008gmail_msg gmail_msg"><font color=3D"#888888=
" class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008g=
mail_msg gmail_msg"></p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
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" class=3D"m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg gmail=
_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br class=
=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail_msg=
 gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<br c=
lass=3D"m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_8620857624651409115m_1425532395565240008gmail=
_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" class=3D"m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_8620857624651409115m_1425532395565240=
008gmail_msg gmail_msg" target=3D"_blank">https://groups.google.com/a/isocp=
p.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_P=
Fe0X4UOkiw%40mail.gmail.com</a>.<br class=3D"m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_86208576=
24651409115m_1425532395565240008gmail_msg gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><di=
v class=3D"gmail_quote m_8620857624651409115m_1425532395565240008gmail_msg =
gmail_msg"><blockquote class=3D"gmail_quote m_8620857624651409115m_14255323=
95565240008gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px =
#ccc solid;padding-left:1ex"><span class=3D"m_8620857624651409115m_14255323=
95565240008m_9039410119375693614HOEnZb m_8620857624651409115m_1425532395565=
240008gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_8620857624651=
409115m_1425532395565240008gmail_msg gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">=
</p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_m=
sg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_8620=
857624651409115m_1425532395565240008gmail_msg gmail_msg" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/un=
subscribe</a>.<br class=3D"m_8620857624651409115m_1425532395565240008gmail_=
msg gmail_msg"></font></span></blockquote></div></div><div class=3D"gmail_e=
xtra m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"><div cl=
ass=3D"gmail_quote m_8620857624651409115m_1425532395565240008gmail_msg gmai=
l_msg"><blockquote class=3D"gmail_quote m_8620857624651409115m_142553239556=
5240008gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><span class=3D"m_8620857624651409115m_142553239556=
5240008m_9039410119375693614HOEnZb m_8620857624651409115m_14255323955652400=
08gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_86208576246514091=
15m_1425532395565240008gmail_msg gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg" target=3D"_blank">std-proposa=
ls+unsubscribe@isocpp.org</a>.</font></span></blockquote></div></div><div c=
lass=3D"gmail_extra m_8620857624651409115m_1425532395565240008gmail_msg gma=
il_msg"><div class=3D"gmail_quote m_8620857624651409115m_142553239556524000=
8gmail_msg gmail_msg"><blockquote class=3D"gmail_quote m_862085762465140911=
5m_1425532395565240008gmail_msg gmail_msg" style=3D"margin:0 0 0 .8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_862085762465140911=
5m_1425532395565240008m_9039410119375693614HOEnZb m_8620857624651409115m_14=
25532395565240008gmail_msg gmail_msg"><font color=3D"#888888" class=3D"m_86=
20857624651409115m_1425532395565240008gmail_msg gmail_msg"><br class=3D"m_8=
620857624651409115m_1425532395565240008gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_ms=
g" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg"></font></span></blockquo=
te></div></div><div class=3D"gmail_extra m_8620857624651409115m_14255323955=
65240008gmail_msg gmail_msg"><div class=3D"gmail_quote m_862085762465140911=
5m_1425532395565240008gmail_msg gmail_msg"><blockquote class=3D"gmail_quote=
 m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg" style=3D"ma=
rgin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D=
"m_8620857624651409115m_1425532395565240008m_9039410119375693614HOEnZb m_86=
20857624651409115m_1425532395565240008gmail_msg gmail_msg"><font color=3D"#=
888888" class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_=
msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNS=
zw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg" ta=
rget=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-proposal=
s/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com</a>.=
<br class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg"=
>
</font></span></blockquote></div><br class=3D"m_8620857624651409115m_142553=
2395565240008gmail_msg gmail_msg"></div><span class=3D"m_862085762465140911=
5HOEnZb gmail_msg"><font color=3D"#888888" class=3D"gmail_msg">

<p class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg">=
</p>

-- <br class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_m=
sg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_8620857=
624651409115m_1425532395565240008gmail_msg gmail_msg">
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" class=3D"m_=
8620857624651409115m_1425532395565240008gmail_msg gmail_msg" target=3D"_bla=
nk">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"m_862085762465140=
9115m_1425532395565240008gmail_msg gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_ms=
g" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_8620857624=
651409115m_1425532395565240008gmail_msg gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvG=
Wbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gmail_msg=
" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-prop=
osals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.=
com</a>.<br class=3D"m_8620857624651409115m_1425532395565240008gmail_msg gm=
ail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote class=
=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex"><span class=3D"m_8620857624651409115HOEnZb gmail_ms=
g"><font color=3D"#888888" class=3D"gmail_msg">

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"gmail_=
msg" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/topic/std-p=
roposals/cJD8urBWN7c/unsubscribe</a>.<br class=3D"gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"gmail_msg" target=
=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br class=3D"gmail_msg=
">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg"></font></span></blockquote></div></div><div class=3D"=
gmail_extra gmail_msg"><div class=3D"gmail_quote gmail_msg"><blockquote cla=
ss=3D"gmail_quote gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #cc=
c solid;padding-left:1ex"><span class=3D"m_8620857624651409115HOEnZb gmail_=
msg"><font color=3D"#888888" class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0VDrQjgtk=
4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/a/isocpp.o=
rg/d/msgid/std-proposals/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0VDrQjgtk4H6AFAHJ5obmJ=
w%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</font></span></blockquote></div><br class=3D"gmail_msg"></div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEhviWUpteV%2BS3u3pDC4oVny2gX3M=
NRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=
=3Dfooter" class=3D"gmail_msg" target=3D"_blank">https://groups.google.com/=
a/isocpp.org/d/msgid/std-proposals/CAO9E8GEhviWUpteV%2BS3u3pDC4oVny2gX3MNRH=
4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com</a>.<br class=3D"gmail_msg">
</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/CAPCFJdT6jP_r6qqd9ukUvyK0rFUPt3S5VWbO=
eHagKC7czwM8oQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdT6jP_r6qqd=
9ukUvyK0rFUPt3S5VWbOeHagKC7czwM8oQ%40mail.gmail.com</a>.<br />

--001a113dc5e4e8adf00549d53c5f--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 16:38:25 +0100
Raw View
--001a11437ed22caf180549d55681
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Additional costs are an additional function pointer (or virtual function,
whichever the implementer prefers) and another type_id. As a std::any may
contain storage for "small object optimization", this might not be
significant.

2017-03-03 16:31 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> Yes; my point is you're asking for an ability to throw away more of it, *=
with
> an additional cost for everyone who doesn't use this *(which is pretty
> directly against what C++ stands for). I'm pretty confident that this is
> not the right direction.
>
> Go on, write a paper. We'll see whose opinion the LEWG favors more.
>
> On Fri, Mar 3, 2017 at 4:27 PM janezz55 . <janezz55@gmail.com> wrote:
>
>> Michal: You throw away compile-time type safety every time you use a
>> std::any, this was the case all the way back to 2001.
>>
>> 2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>
>> Sorry; my last message should've read "I want to throw away compile-time
>> type safety [...]".
>>
>> On Fri, Mar 3, 2017 at 4:11 PM janezz55 . <janezz55@gmail.com> wrote:
>>
>> Michal: You haven't read the code, there is a type_id. Types are checked=
..
>>
>> 2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>
>> So your use-case that's supposed to convince the committee is "I want to
>> throw away type safety for my thing, help me with doing that"?
>>
>> On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:
>>
>> Edward: Thanks for the suggestions. I didn't presume to think my
>> implementation was definitive. It is the closest we can get in C++ to wh=
at
>> the scripting languages have, without sacrificing too much, in my opinio=
n.
>> The conversions you mention could be done, but only at the price of
>> significant overhead. Plain std::any does not support conversions when
>> casting either. If I wrote my own any, I'd definitely move everything I
>> could into the vtable of the holder, as you suggest. The any_function
>> implementation is just an example, an idea that occurred to me only
>> gradually.
>>
>> I don't want the user specify the return type, because this is not
>> traditionally std::any-like. You can store almost anything into a std::a=
ny
>> instance, but you don't need to specify anything, there are no template
>> instantiations needed. Only when casting, do you need those.
>>
>> I like your invoke() idea. If something like that were implemented, I'd
>> be perfectly pleased with it, but really, why not have a operator() as
>> well? It seems prettier to me, scripting language like. We can invoke a
>> variable, just like in a scripting language.
>>
>> Michal: I'm using this as part of my signal/slot implementation. I don't
>> want to specify function signatures of my slots, that's the only reason =
why
>> I use this. The slots usually don't have many arguments as you want sign=
al
>> handling to be fast , also conversions cost time so you don't really wan=
t
>> them, the single signature problem is not much of a problem. Take a look=
:
>>
>> https://github.com/user1095108/crl
>>
>> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>>
>> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>>
>> When you open your browser the use cases are showing in front of your
>> eyes, JavaScript programs storing functions in a variable. Python, lua a=
nd
>> countless other scripts doing the same. I can't believe you haven't seen
>> any of this in practice.
>>
>>
>> It works in scripting languages because they have a rich base type (have
>> you looked at the size of the PyObject vtable?) that erases all the
>> operations the language syntax allows on an object. We don't have that i=
n
>> C++ because of overhead and because it's incompatible with a
>> Turing-complete compile time type system.
>>
>> Your proposed facility:
>>
>> * Requires the target type to have exactly 1 call signature, so it won't
>> work with multi-callables, overload combiners, or polymorphic or variadi=
c
>> function objects, esp. closure types.
>> * Requires the caller to supply exactly the arguments corresponding to
>> the signature of the target type (otherwise UB, assert or throw). So no
>> arithmetic conversions, cvr conversions or implicit conversions. That's =
a
>> recipe for frustration.
>> * Asymmetry between argument and return types; why not require the user
>> to specify the return type?
>> * Overhead: one extra function pointer plus one extra typeid (for the
>> signature type, if extant) per any instance.
>>
>> Now some constructive suggestions:
>>
>> * The overhead is a defect of your implementation; you can move those
>> members into the vtable, at the cost of an extra indirection.
>> * The return type could be provided by having your invoke member functio=
n
>> take the return type as the first template parameter, or preferably
>> providing a non-member invoke. That would also allow supplying argument
>> types explicitly:
>>
>> auto a =3D any{[](std::string, unsigned) { return true; }};
>> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>>
>> Is that useful? I'm not too sure, but at least it's clear what the
>> facility can and cannot do. It still can't accept multi-signature callab=
les.
>>
>> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>
>> You've asked for a feature, and yet you can't produce an example of how
>> that feature would be useful. This is the rational argument: we don't ne=
ed
>> features that don't have use cases.
>>
>> Do show us examples of how this is useful and we might reconsider this
>> feature. Plain and simple like that. Throwing logical fallacies around
>> won't change it.
>>
>> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> We don't need C++, ASM is sufficient, or an arbitrary other computer
>> language. 640k were sufficient at some point in time. I haven't heard a
>> single rational argument from you. I'd hate to have you as a boss.
>>
>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>
>> You're proposing a feature for the sake of having a feature. Give us
>> actual use cases if you think that is not true.
>>
>> Having a feature that no-one will use is not beneficial.
>>
>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> As for me being a type ducking proponent... std::any in various forms ha=
s
>> been around since 2001, I think. All the while until now you could assig=
n a
>> function pointer or a member function pointer to it as well as copyable
>> function objects. It's nothing new. Adding the invocation feature would
>> simply be a natural development in my opinion.
>>
>> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> What you describe are workarounds. If you want to use a temporary lambda=
,
>> you won't be able to keep the type around. Maybe you don't want to speci=
fy
>> the function signature and so std::function is not appropriate.
>>
>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:
>>
>> Show us the actual (i.e. complete) example of why that be useful (and wh=
y
>> you wouldn't just use `std::function<void ()>`, or the somewhat proposed
>> function_ref, for that).
>>
>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>
>> Let's say you store a lambda object into std::any
>>
>> std::any a =3D [](){};
>>
>> How are you going to obtain the lambda object back? AFAIK it's locked
>> inside the any instance. If std::any had a mechanism of invoking the sto=
red
>> object you could still "reach" it.
>>
>>
>> any_cast. You have to keep the lambda type around of course. If you don'=
t
>> want to, wrap the lambda in a std::function first before putting it in a=
n
>> std::any.
>>
>>
>>
>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>
>> I already wrote what I needed :) function<any(std::vector<any>)> is
>> simply blasphemous.
>>
>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>
>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>
>> I believe that std::any should be made invokable, if an invokable object
>> is stored into it, such as a function pointer, method pointer, or a func=
tor
>> (such as std::function<> and others). This would raise the level of
>> abstraction C++ offers to one comparable to scripting languages, where y=
ou
>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>
>>
>> Any is a polymorphic wrapper for any object modeling the
>> CopyConstructible concept. Anything beyond that is out of scope. In fact
>> any doesn't even provide equality or ordering, which would seem very bas=
ic.
>>
>> What you want is std::function (another polymorphic wrapper for types
>> modeling the FunctionObject concept) . If you want fully dynamic behavio=
r
>> (including runtime type checking of parameters), use
>> function<any(std::vector<any>)> and wrap the stored function in an
>> adaptor that does the unboxing of the parameters.
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYu
>> p5XegKF253kwet6TFZBjg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2G=
R1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-
>> bbc9-77e57123f68e%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-7=
3a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%
>> 2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs=
%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>>
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%
>> 3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV=
30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw
>> cF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrH=
jykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> std-proposal...@isocpp.org.
>> To post to this group, send email to std-pr...@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ
>> FkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx=
9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_
>> 3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYC=
VZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>
>> To unsubscribe from this group and all its topics, 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/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSie
>> FCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3n=
ZaF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_
>> e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%=
3D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/
>> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0V
>> DrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9e=
RWOkpJAPqk8a2sqAOB0VDrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/CAO9E8GEhviWUpteV%
>> 2BS3u3pDC4oVny2gX3MNRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEhv=
iWUpteV%2BS3u3pDC4oVny2gX3MNRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com?utm_medi=
um=3Demail&utm_source=3Dfooter>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAPCFJdT6jP_
> r6qqd9ukUvyK0rFUPt3S5VWbOeHagKC7czwM8oQ%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdT6jP=
_r6qqd9ukUvyK0rFUPt3S5VWbOeHagKC7czwM8oQ%40mail.gmail.com?utm_medium=3Demai=
l&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GGsO2h4OUky3ZS%3DduT-jvCkQqs7OJJXYKa_cQux%=
3Dmw54A%40mail.gmail.com.

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

<div dir=3D"ltr">Additional costs are an additional function pointer (or vi=
rtual function, whichever the implementer prefers) and another type_id. As =
a std::any may contain storage for &quot;small object optimization&quot;, t=
his might not be significant.</div><div class=3D"gmail_extra"><br><div clas=
s=3D"gmail_quote">2017-03-03 16:31 GMT+01:00 Micha=C5=82 Dominiak <span dir=
=3D"ltr">&lt;<a href=3D"mailto:griwes@griwes.info" target=3D"_blank">griwes=
@griwes.info</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"=
margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"=
ltr">Yes; my point is you&#39;re asking for an ability to throw away more o=
f it, <i>with an additional cost for everyone who doesn&#39;t use this </i>=
(which is pretty directly against what C++ stands for). I&#39;m pretty conf=
ident that this is not the right direction.<div><br></div><div>Go on, write=
 a paper. We&#39;ll see whose opinion the LEWG favors more.</div></div><br>=
<div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Mar 3, 2017 at 4:27 PM =
janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com" target=3D"_blank">jane=
zz55@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
dir=3D"ltr" class=3D"m_4180823617425430101gmail_msg">Michal: You throw away=
 compile-time type safety every time you use a std::any, this was the case =
all the way back to 2001.</div><div class=3D"gmail_extra m_4180823617425430=
101gmail_msg"><br class=3D"m_4180823617425430101gmail_msg"><div class=3D"gm=
ail_quote m_4180823617425430101gmail_msg"></div></div><div class=3D"gmail_e=
xtra m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_4180823617=
425430101gmail_msg">2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <span d=
ir=3D"ltr" class=3D"m_4180823617425430101gmail_msg">&lt;<a href=3D"mailto:g=
riwes@griwes.info" class=3D"m_4180823617425430101gmail_msg" target=3D"_blan=
k">griwes@griwes.info</a>&gt;</span>:<br class=3D"m_4180823617425430101gmai=
l_msg"></div></div><div class=3D"gmail_extra m_4180823617425430101gmail_msg=
"><div class=3D"gmail_quote m_4180823617425430101gmail_msg"><blockquote cla=
ss=3D"gmail_quote m_4180823617425430101gmail_msg" style=3D"margin:0 0 0 .8e=
x;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_=
4180823617425430101gmail_msg">Sorry; my last message should&#39;ve read &qu=
ot;I want to throw away compile-time type safety [...]&quot;.</div><br clas=
s=3D"m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_4180823617=
425430101gmail_msg"><div dir=3D"ltr" class=3D"m_4180823617425430101gmail_ms=
g">On Fri, Mar 3, 2017 at 4:11 PM janezz55 . &lt;<a href=3D"mailto:janezz55=
@gmail.com" class=3D"m_4180823617425430101gmail_msg" target=3D"_blank">jane=
zz55@gmail.com</a>&gt; wrote:<br class=3D"m_4180823617425430101gmail_msg"><=
/div><blockquote class=3D"gmail_quote m_4180823617425430101gmail_msg" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=
=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4180823617425430101gmail_msg">Michal: You haven&#39;t rea=
d the code, there is a type_id. Types are checked.</div><div class=3D"gmail=
_extra m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_=
msg"><div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></div></div><d=
iv class=3D"gmail_extra m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4180823617425430101gmail_msg"><div class=3D"gmail_q=
uote m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg">2017-03-03 16:09 GMT+01:00 Micha=C5=82 D=
ominiak <span dir=3D"ltr" class=3D"m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">&lt;<a hre=
f=3D"mailto:griwes@griwes.info" class=3D"m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg" targ=
et=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br class=3D"m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174254=
30101gmail_msg"></div></div><div class=3D"gmail_extra m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg"><div class=3D"gmail_quote m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><blockquot=
e class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0 0 0 =
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D=
"m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_4180823617425430101gmail_msg">So your use-case that&#39;s supposed to conv=
ince the committee is &quot;I want to throw away type safety for my thing, =
help me with doing that&quot;?</div><br class=3D"m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_m=
sg"><div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4180823617425430101gmail_msg"><div dir=3D"ltr=
" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_4180823617425430101gmail_msg">On Fri, Mar 3, 2017 at 4:04 PM jan=
ezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com" class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430=
101gmail_msg" target=3D"_blank">janezz55@gmail.com</a>&gt; wrote:<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4180823617425430101gmail_msg"></div><blockquote class=3D"gmail_quote m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_4180823617425430101gmail_msg">Edward: Thanks for the sugge=
stions. I didn&#39;t presume to think my implementation was definitive. It =
is the closest we can get in C++ to what the scripting languages have, with=
out sacrificing too much, in my opinion. The conversions you mention could =
be done, but only at the price of significant overhead. Plain std::any does=
 not support conversions when casting either. If I wrote my own any, I&#39;=
d definitely move everything I could into the vtable of the holder, as you =
suggest. The any_function implementation is just an example, an idea that o=
ccurred to me only gradually.<div class=3D"m_4180823617425430101m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4180823617425430101gmail_msg"></div><div class=3D"m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">I don&#39;t=
 want the user specify the return type, because this is not traditionally s=
td::any-like. You can store almost anything into a std::any instance, but y=
ou don&#39;t need to specify anything, there are no template instantiations=
 needed. Only when casting, do you need those.</div><div class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></di=
v><div class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">I like your invoke() idea. If something like that were implemen=
ted, I&#39;d be perfectly pleased with it, but really, why not have a opera=
tor() as well? It seems prettier to me, scripting language like. We can inv=
oke a variable, just like in a scripting language.<br class=3D"m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4180823617425430101gmail_msg"><div class=3D"m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><br cl=
ass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_ms=
g"></div><div class=3D"m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174=
25430101gmail_msg">Michal: I&#39;m using this as part of my signal/slot imp=
lementation. I don&#39;t want to specify function signatures of my slots, t=
hat&#39;s the only reason why I use this. The slots usually don&#39;t have =
many arguments as you want signal handling to be fast , also conversions co=
st time so you don&#39;t really want them, the single signature problem is =
not much of a problem. Take a look:</div><div class=3D"m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4180823617425430101gmail_msg"></div><div clas=
s=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"=
><a href=3D"https://github.com/user1095108/crl" class=3D"m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4180823617425430101gmail_msg" target=3D"_blank">http=
s://github.com/<wbr>user1095108/crl</a><br class=3D"m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4180823617425430101gmail_msg"></div></div></div><div dir=
=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430=
101gmail_msg"><div class=3D"m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082=
3617425430101gmail_msg"><div class=3D"m_4180823617425430101m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4180823617425430101gmail_msg"><div class=3D"gmail_extra m_4180823617425=
430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255=
32395565240008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><div class=
=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">2017-03-03 15:22 GMT+01:00 Edward Catmur <span dir=3D"ltr" clas=
s=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"=
>&lt;<a href=3D"mailto:ed@catmur.co.uk" class=3D"m_4180823617425430101m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_4180823617425430101gmail_msg" target=3D"_blank">ed@catmur.co=
..uk</a>&gt;</span>:<br class=3D"m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg"><blockquote class=3D"gmail_quote m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425=
532395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0p=
x 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><d=
iv dir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg"><span class=3D"m_4180823617425430101m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-627547=
2275488112246gmail- m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174254=
30101gmail_msg">On Friday, 3 March 2017 14:05:46 UTC, janezz55 .  wrote:<bl=
ockquote class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180=
823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">When you op=
en your browser the use cases are showing in front of your eyes, JavaScript=
 programs storing functions in a variable. Python, lua and countless other =
scripts doing the same. I can&#39;t believe you haven&#39;t seen any of thi=
s in practice.</div></blockquote><div class=3D"m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg"></div></span><div class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">=
It works in scripting languages because they have a rich base type (have yo=
u looked at the size of the PyObject vtable?) that erases all the operation=
s the language syntax allows on an object. We don&#39;t have that in C++ be=
cause of overhead and because it&#39;s incompatible with a Turing-complete =
compile time type system.</div><div class=3D"m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4180823617425430101gmail_msg"></div><div class=3D"m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><div clas=
s=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"=
>Your proposed facility:</div><div class=3D"m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gm=
ail_msg m_4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4180823617425430101gmail_msg"></div><div class=3D"m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">* Requires=
 the target type to have exactly 1 call signature, so it won&#39;t work wit=
h multi-callables, overload combiners, or polymorphic or variadic function =
objects, esp. closure types.</div><div class=3D"m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_4180823617425430101gmail_msg">* Requires the caller to supply=
 exactly the arguments corresponding to the signature of the target type (o=
therwise UB, assert or throw). So no arithmetic conversions, cvr conversion=
s or implicit conversions. That&#39;s a recipe for frustration.</div><div c=
lass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_m=
sg">* Asymmetry between argument and return types; why not require the user=
 to specify the return type?</div><div class=3D"m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_4180823617425430101gmail_msg">* Overhead: one extra function =
pointer plus one extra typeid (for the signature type, if extant) per any i=
nstance.</div></div><div class=3D"m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4180823617425430101gmail_msg"></div><div class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg">Now some constructiv=
e suggestions:</div><div class=3D"m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4180823617425430101gmail_msg"></div><div class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg">* The overhead is a =
defect of your implementation; you can move those members into the vtable, =
at the cost of an extra indirection.</div><div class=3D"m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg">* The return type could=
 be provided by having your invoke member function take the return type as =
the first template parameter, or preferably providing a non-member invoke. =
That would also allow supplying argument types explicitly:</div><div class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">=
<br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg"></div><div class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg">auto a =3D any{[](std::string, unsigned) { return =
true; }};</div><div class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg">auto b =3D invoke&lt;bool, std::string, unsigned&g=
t;(a, &quot;meow&quot;, 1);</div><div class=3D"m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg"></div><div class=3D"m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">Is that=
 useful? I&#39;m not too sure, but at least it&#39;s clear what the facilit=
y can and cannot do. It still can&#39;t accept multi-signature callables.</=
div><div class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430=
101gmail_msg"><br class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg"></div><blockquote class=3D"gmail_quote m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><=
div class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg"><div class=3D"gmail_quote m_4180823617425430101m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_4180823617425430101gmail_msg"><span class=3D"m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28m_-6275472275488112246gmail- m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418=
0823617425430101gmail_msg">2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak =
<span dir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg">gri...@griwes.info</a>&=
gt;</span>:<br class=3D"m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg"></span><blockquote class=3D"gmail_quote m_4180823617425=
430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255=
32395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><sp=
an class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><div di=
r=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543=
0101gmail_msg">You&#39;ve asked for a feature, and yet you can&#39;t produc=
e an example of how that feature would be useful. This is the rational argu=
ment: we don&#39;t need features that don&#39;t have use cases.<div class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">=
<br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg"></div><div class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg">Do show us examples of how this is useful and we m=
ight reconsider this feature. Plain and simple like that. Throwing logical =
fallacies around won&#39;t change it.</div></div><br class=3D"m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_4180823617425430101gmail_msg"></span><div class=
=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg"><span class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928m_-62754722754881=
12246gmail- m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"><div class=3D"m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742=
5430101gmail_msg"><div class=3D"m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4180823617425430101gmail_msg">On Fri, Mar 3, 2017 at 2:=
31 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt; wro=
te:<br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg"></div></div></div></span><blockquote class=3D"gmail_quote m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex"><div class=3D"m_4180823617425430101m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174=
25430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425=
430101gmail_msg"><div class=3D"m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418=
0823617425430101gmail_msg"><span class=3D"m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_=
-6275472275488112246gmail- m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_4180823617425430101m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_4180823617425430101gmail_msg">We don&#39;t need C++, ASM is =
sufficient, or an arbitrary other computer language. 640k were sufficient a=
t some point in time. I haven&#39;t heard a single rational argument from y=
ou. I&#39;d hate to have you as a boss.</div><div class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><div class=
=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg"></div></div></span><span class=3D"m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28m_-6275472275488112246gmail- m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418=
0823617425430101gmail_msg"><div class=3D"m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4180823617425430101gmail_msg">2017-03-03 14:25=
 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg">&lt;<a rel=3D"nofoll=
ow" class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg">gri...@griwes.info</a>&gt;</span>:<br class=3D"m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg"></div></div></span><div=
 class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail=
_msg"><div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg"><blockquote class=3D"gmail_quote m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425=
532395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0p=
x 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><s=
pan class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><div d=
ir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174254=
30101gmail_msg">You&#39;re proposing a feature for the sake of having a fea=
ture. Give us actual use cases if you think that is not true.<div class=3D"=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><br =
class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_=
msg"></div><div class=3D"m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg">Having a feature that no-one will use is not beneficia=
l.</div></div><br class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg"></span><div class=3D"gmail_quote m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg"><span class=3D"m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928m_-6275472275488112246gmail- m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">On Fr=
i, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">jane...@=
gmail.com</a>&gt; wrote:<br class=3D"m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4180823617425430101gmail_msg"></div></span><blockquote class=3D"gmail_qu=
ote m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg" =
style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa=
dding-left:1ex"><span class=3D"m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928m_-6275472275=
488112246gmail- m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg"><div dir=3D"ltr" class=3D"m_4180823617425430101m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4180823617425430101gmail_msg">As for me being a type ducking proponent.=
... std::any in various forms has been around since 2001, I think. All the w=
hile until now you could assign a function pointer or a member function poi=
nter to it as well as copyable function objects. It&#39;s nothing new. Addi=
ng the invocation feature would simply be a natural development in my opini=
on.</div></span><div class=3D"m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180=
823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425=
532395565240008gmail_msg m_4180823617425430101gmail_msg"><span class=3D"m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928m_-6275472275488112246gmail- m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4180823617425430101gmail_msg">2017-03-03 12:47 GMT+0=
1:00 janezz55 . <span dir=3D"ltr" class=3D"m_4180823617425430101m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4180823617425430101gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">jane...=
@gmail.com</a>&gt;</span>:<br class=3D"m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg"></span><blockquote class=3D"gmail_quote =
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex"><span class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928m_-62754722754881=
12246gmail- m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"><div dir=3D"ltr" class=3D"m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
4180823617425430101gmail_msg">What you describe are workarounds. If you wan=
t to use a temporary lambda, you won&#39;t be able to keep the type around.=
 Maybe you don&#39;t want to specify the function signature and so std::fun=
ction is not appropriate.</div></span><div class=3D"m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4180823617425430101gmail_msg"><div class=3D"m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_4180823617425430101gmail_msg"><div class=3D"m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><br cla=
ss=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg=
"><div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082=
3617425430101gmail_msg"><span class=3D"m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-62=
75472275488112246gmail- m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg">2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <span=
 dir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742=
5430101gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_4180823617425430101gmail_msg">gpde...@gmail.com</a>&gt;</s=
pan>:<br class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430=
101gmail_msg"></span><blockquote class=3D"gmail_quote m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0=
px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span cla=
ss=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><div dir=3D"l=
tr" class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg"><span class=3D"m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg">On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=
=82 Dominiak wrote:</span><blockquote class=3D"gmail_quote m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px =
0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><spa=
n class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmai=
l_msg"><div dir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
180823617425430101gmail_msg">Show us the actual (i.e. complete) example of =
why that be useful (and why you wouldn&#39;t just use `std::function&lt;voi=
d ()&gt;`, or the somewhat proposed function_ref, for that).</div><br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">=
</span><span class=3D"m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742=
5430101gmail_msg"><div class=3D"gmail_quote m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gm=
ail_msg m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">On Fri, Mar 3=
, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4180823617425430101gmail_msg">jane...@gmail.co=
m</a>&gt; wrote:<br class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg"></div><blockquote class=3D"gmail_quote m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin=
:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"=
><div dir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg">Let&#39;s say you store a lambda object into std::an=
y<div class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101=
gmail_msg"><br class=3D"m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg"></div><div class=3D"m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_4180823617425430101gmail_msg">std::any a =3D [](){};</div><div class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">=
<br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg"></div><div class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg">How are you going to obtain the lambda object back=
? AFAIK it&#39;s locked inside the any instance. If std::any had a mechanis=
m of invoking the stored object you could still &quot;reach&quot; it.</div>=
</div></blockquote></div></span></blockquote><div class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">any_cast. Y=
ou have to keep the lambda type around of course. If you don&#39;t want to,=
 wrap the lambda in a std::function first before putting it in an std::any.=
<br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg">=C2=A0</div><blockquote class=3D"gmail_quote m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0=
px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div clas=
s=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174254301=
01gmail_msg"><blockquote class=3D"gmail_quote m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><br cla=
ss=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg=
"><div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082=
3617425430101gmail_msg"><span class=3D"m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <s=
pan dir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt;=
</span>:<br class=3D"m_4180823617425430101m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174=
25430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425=
430101gmail_msg"></span><blockquote class=3D"gmail_quote m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span =
class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_=
msg"><div dir=3D"ltr" class=3D"m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418=
0823617425430101gmail_msg">I already wrote what I needed :) function&lt;any=
(std::vector&lt;any&gt;)<wbr>&gt; is simply blasphemous.</div></span><span =
class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_=
msg"><div class=3D"m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543=
0101gmail_msg"><div class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg"><div class=3D"m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">2017-03-0=
3 11:09 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">&lt;<a rel=
=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174=
25430101gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><blockquote cl=
ass=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543=
0101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(=
204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4180823617425430101gmail_msg">On Thursday, March 2, =
2017 at 6:26:01 PM UTC, <a class=3D"m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4180823617425430101gmail_msg">jane...@gmail.com</a> wrote:<blockquote cla=
ss=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430=
101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg">I believe that std::any=
 should be made invokable, if an invokable object is stored into it, such a=
s a function pointer, method pointer, or a functor (such as std::function&l=
t;&gt; and others). This would raise the level of abstraction C++ offers to=
 one comparable to scripting languages, where you can often invoke an arbit=
rary variable. I&#39;ve prepared 2 examples:</div></blockquote><div class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">=
<br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gm=
ail_msg">Any is a polymorphic wrapper for any object modeling the CopyConst=
ructible concept. Anything beyond that is out of scope. In fact any doesn&#=
39;t even provide equality or ordering, which would seem very basic. <br cl=
ass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_ms=
g"><br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">What you want is std::function (another polymorphic wrapper for=
 types modeling the FunctionObject concept) . If you want fully dynamic beh=
avior (including runtime type checking of parameters), use function&lt;any(=
std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored function in an adaptor=
 that does the unboxing of the parameters.<br class=3D"m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4180823617425430101gmail_msg"></div></div></blockquote=
></div><br class=3D"m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174254=
30101gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_4180823617425430101gmail_msg"></div><span class=3D"m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4180823617425430101gmail_msg">std-proposal...@isocpp.org</a>.<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">std-pr...@iso=
cpp.org</a>.<span class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg"><br class=3D"m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr>i=
socpp.org/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GE2GR1GQRos5BCUJzLi5yaYu<wb=
r>p5XegKF253kwet6TFZBjg%40mail.<wbr>gmail.com</a>.<br class=3D"m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4180823617425430101gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_4180823617425430101gmail_msg"><span class=3D"m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928m_-6275472275488112246gmail- m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4180823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmai=
l_msg" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topi=
c/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br class=3D"m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174=
25430101gmail_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928m_-6275472275488112246gmail- m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">std-pr...@iso=
cpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg"></span></span><span class=3D"m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928m_-6275472275488112246gmail- m_4180823617425430101m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_m=
sg" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/s=
td-<wbr>proposals/a6013d8d-73a6-4f40-<wbr>bbc9-77e57123f68e%40isocpp.org</a=
><wbr>.<br class=3D"m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174254=
30101gmail_msg">
</span></blockquote></div><br class=3D"m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg"></div><span class=3D"m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_4180823617425430101gmail_msg"><font color=3D"#888888"=
 class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail=
_msg">
</font></span></div></div></blockquote></div><span class=3D"m_4180823617425=
430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255=
32395565240008gmail_msg m_4180823617425430101gmail_msg"><font color=3D"#888=
888" class=3D"m_4180823617425430101m_8620857624651409115m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361742543010=
1m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101g=
mail_msg"><br class=3D"m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174=
25430101gmail_msg"></font></span></div><span class=3D"m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4180823617425430101gmail_msg"><font color=3D"#888888" c=
lass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_m=
sg"><span class=3D"m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gma=
il- m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></span><span =
class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4180823617425430101gmail_msg">std-proposal...@isocpp.org</a>.<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">std-pr...@iso=
cpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg"></span><span class=3D"m_4180823617425430101m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m=
_-6275472275488112246gmail- m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082=
3617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418=
0823617425430101gmail_msg" target=3D"_blank">https://groups.google.com/a/<w=
br>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GEDs%<wbr>2BmqoyCxakK0v-hKoW=
cBYJE%<wbr>2B9rdXuNUyGMTRwqPFAw%40mail.<wbr>gmail.com</a>.<br class=3D"m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">=
<div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236=
17425430101gmail_msg"><blockquote class=3D"gmail_quote m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span cl=
ass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_ms=
g"><font color=3D"#888888" class=3D"m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4180823617425430101gmail_msg"><span class=3D"m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928m_-6275472275488112246gmail- m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmai=
l_msg" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topi=
c/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br class=3D"m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174=
25430101gmail_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928m_-6275472275488112246gmail- m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">std-pr...@iso=
cpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg"></span></font></span></blockquote></div></div><div cla=
ss=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg=
"><div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082=
3617425430101gmail_msg"><blockquote class=3D"gmail_quote m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span =
class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_=
msg"><font color=3D"#888888" class=3D"m_4180823617425430101m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr=
>isocpp.org/d/msgid/std-<wbr>proposals/CAPCFJdSFV30P%<wbr>3DdEQoooHcn05s6Wq=
BiaV4XpyuQY4P<wbr>3jLkM5Dqg%40mail.gmail.com</a>.<br class=3D"m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_4180823617425430101gmail_msg">
</font></span></blockquote></div><br class=3D"m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4180823617425430101gmail_msg"></div><span class=3D"m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928m_-6275472275488112246gmail- m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_4180823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></span><span =
class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4180823617425430101gmail_msg">std-proposal...@isocpp.org</a>.<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">std-pr...@iso=
cpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg"></span></div></div><span class=3D"m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928m_-6275472275488112246gmail- m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808=
23617425430101gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr=
>isocpp.org/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GHrHjykbpVLJv3RVBL7QK9Dw<=
wbr>cF4gFMF5HP%2B2QFCWvRS4A%<wbr>40mail.gmail.com</a>.<br class=3D"m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
</span></blockquote></div><span class=3D"m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_4180823617425430101gmail_msg"><span class=3D"m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928m_-6275472275488112246gmail- m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4180823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmai=
l_msg" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topi=
c/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br class=3D"m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174=
25430101gmail_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928m_-6275472275488112246gmail- m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4180823617425430101gmail_msg"><br class=3D"m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">std-pr...@iso=
cpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg"></span></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823=
617425430101gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr>i=
socpp.org/d/msgid/std-<wbr>proposals/<wbr>CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZ<wb=
r>FkP6CFq55NWM6HFLMgO-A%40mail.<wbr>gmail.com</a>.<br class=3D"m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4180823617425430101gmail_msg">
</blockquote></div><br class=3D"m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg"></div><span class=3D"m_4180823617425430101m_862=
0857624651409115m_1425532395565240008m_9039410119375693614HOEnZb m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg"><font color=3D"#888888" class=3D"m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg">
</font></span></blockquote></div></blockquote></div><span class=3D"m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4HOEnZb m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4180823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180=
823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg"></font></span></div></div></div></div><s=
pan class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614HOEnZb m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4180823617425430101gmail_msg"><font color=3D"#=
888888" class=3D"m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_4180823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
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" class=3D"m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg" target=
=3D"_blank">std-proposals+unsubscribe@<wbr>isocpp.org</a>.<br class=3D"m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101=
gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361742543010=
1gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d=
/msgid/std-<wbr>proposals/CAO9E8GGYCVZ5C6-j_<wbr>3VOpgBPRkSz%2BBg0bU_%3DE%3=
D_<wbr>PFe0X4UOkiw%40mail.gmail.com</a>.<br class=3D"m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4180823617425430101gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg"><blockquote class=3D"gmail_quote m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gma=
il_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:=
1ex"><span class=3D"m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614HOEnZb m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><font col=
or=3D"#888888" class=3D"m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4180823617425430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082=
3617425430101gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr>=
isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br =
class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4180823617425430101gmail_msg"></font></span></blockquote></div></d=
iv><div class=3D"gmail_extra m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4180823617425430101gmail_msg"><div class=3D"gm=
ail_quote m_4180823617425430101m_8620857624651409115m_1425532395565240008gm=
ail_msg m_4180823617425430101gmail_msg"><blockquote class=3D"gmail_quote m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><span class=3D"m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614HOEnZb m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101=
gmail_msg"><font color=3D"#888888" class=3D"m_4180823617425430101m_86208576=
24651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236174254301=
01gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<wbr>isocpp.org</a=
>.</font></span></blockquote></div></div><div class=3D"gmail_extra m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41808236=
17425430101gmail_msg"><div class=3D"gmail_quote m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_ms=
g"><blockquote class=3D"gmail_quote m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg" style=3D"=
margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=
=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614HOEnZb m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4180823617425430101gmail_msg"><font color=3D"#888888" c=
lass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4180823617425430101gmail_msg"><br class=3D"m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail=
_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_4180823617425430101gmail_msg" target=3D"_blank">std-proposal=
s@isocpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4180823617425430101gmail_msg"></font></span><=
/blockquote></div></div><div class=3D"gmail_extra m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_=
msg"><div class=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4180823617425430101gmail_msg"><blockquote cl=
ass=3D"gmail_quote m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4180823617425430101gmail_msg" style=3D"margin:0 0 0 .8ex=
;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614HOEnZ=
b m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4180823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4180823617=
425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNS=
zw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008gm=
ail_msg m_4180823617425430101gmail_msg" target=3D"_blank">https://groups.go=
ogle.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wbr>CAPCFJdQ3nZaF9aU=
SnFzwE0jm2pSie<wbr>FCLyJNSzw_bWiDVW0oV4Q%40mail.<wbr>gmail.com</a>.<br clas=
s=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4180823617425430101gmail_msg">
</font></span></blockquote></div><br class=3D"m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_4180823617425430101gmail_msg"=
></div><span class=3D"m_4180823617425430101m_8620857624651409115HOEnZb m_41=
80823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_418082361742=
5430101gmail_msg">

<p class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_418082361=
7425430101gmail_msg">
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" class=3D"m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_41=
80823617425430101gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<wb=
r>isocpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_4180823617425430101gmail_msg" target=3D"_blank">std-proposal=
s@isocpp.org</a>.<br class=3D"m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvG=
Wbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_4180823617425430101gmail_msg" target=3D"_blank">https://group=
s.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GGM%3D%3DcA=
n_<wbr>e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg<wbr>0mkgNg%40mail.gmail.com</a>.<br c=
lass=3D"m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4180823617425430101gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_418082=
3617425430101gmail_msg"><blockquote class=3D"gmail_quote m_4180823617425430=
101gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><span class=3D"m_4180823617425430101m_8620857624651409115HOEnZb =
m_4180823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_41808236=
17425430101gmail_msg">

<p class=3D"m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_4180=
823617425430101gmail_msg" target=3D"_blank">https://groups.google.com/a/<wb=
r>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<b=
r class=3D"m_4180823617425430101gmail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_418082361742543=
0101gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<wbr>isocpp.org<=
/a>.<br class=3D"m_4180823617425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4180823617425430101gmail_msg" target=3D"_blank">std-propos=
als@isocpp.org</a>.<br class=3D"m_4180823617425430101gmail_msg"></font></sp=
an></blockquote></div></div><div class=3D"gmail_extra m_4180823617425430101=
gmail_msg"><div class=3D"gmail_quote m_4180823617425430101gmail_msg"><block=
quote class=3D"gmail_quote m_4180823617425430101gmail_msg" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_41=
80823617425430101m_8620857624651409115HOEnZb m_4180823617425430101gmail_msg=
"><font color=3D"#888888" class=3D"m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0VDrQjgtk=
4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"m_4180823617425430101gmail_msg" target=3D"_blank">https://groups.=
google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/<wbr>CAPCFJdS9eRWOk=
pJAPqk8a2sqAOB0V<wbr>DrQjgtk4H6AFAHJ5obmJw%40mail.<wbr>gmail.com</a>.<br cl=
ass=3D"m_4180823617425430101gmail_msg">
</font></span></blockquote></div><br class=3D"m_4180823617425430101gmail_ms=
g"></div><span class=3D"HOEnZb"><font color=3D"#888888">

<p class=3D"m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4180823=
617425430101gmail_msg">
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" class=3D"m_=
4180823617425430101gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<=
wbr>isocpp.org</a>.<br class=3D"m_4180823617425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4180823617425430101gmail_msg" target=3D"_blank">std-propos=
als@isocpp.org</a>.<br class=3D"m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEhviWUpteV%2BS3u3pDC4oVny2gX3M=
NRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=
=3Dfooter" class=3D"m_4180823617425430101gmail_msg" target=3D"_blank">https=
://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAO9E8GEh=
viWUpteV%<wbr>2BS3u3pDC4oVny2gX3MNRH4o-%2B%<wbr>2Bx%2B9AXdTg%40mail.gmail.c=
om</a>.<br class=3D"m_4180823617425430101gmail_msg">
</font></span></blockquote></div><span class=3D"HOEnZb"><font color=3D"#888=
888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdT6jP_r6qqd9ukUvyK0rFUPt3S5VWbO=
eHagKC7czwM8oQ%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/CAPCFJdT6jP_<wbr>r6qqd9ukUvyK0rFUPt3S5VWbOeHagK<wbr>C7czwM8o=
Q%40mail.gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GGsO2h4OUky3ZS%3DduT-jvCkQqs7OJ=
JXYKa_cQux%3Dmw54A%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGsO2h4=
OUky3ZS%3DduT-jvCkQqs7OJJXYKa_cQux%3Dmw54A%40mail.gmail.com</a>.<br />

--001a11437ed22caf180549d55681--

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Fri, 3 Mar 2017 16:39:25 +0000
Raw View
--94eb2c072f4051bab80549d6302e
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Fri, Mar 3, 2017 at 3:38 PM, janezz55 . <janezz55@gmail.com> wrote:

> Additional costs are an additional function pointer (or virtual function,
> whichever the implementer prefers) and another type_id. As a std::any may
> contain storage for "small object optimization", this might not be
> significant.
>

It's less than that; the invoker and function typeid are the same for any
particular contained type, so they can be maintained statically and
accessed via the vtable equivalent. For example, in the libstdc++
implementation
<https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std=
/any#L357>
one would need to add ops _Op_get_function_type_info and
_Op_invoke_function. That's zero space increase, zero time increase, only a
small code increase, and fully ABI compatible in both directions.
Realistically, that should count as zero-cost.


> 2017-03-03 16:31 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>
>> Yes; my point is you're asking for an ability to throw away more of it, =
*with
>> an additional cost for everyone who doesn't use this *(which is pretty
>> directly against what C++ stands for). I'm pretty confident that this is
>> not the right direction.
>>
>> Go on, write a paper. We'll see whose opinion the LEWG favors more.
>>
>> On Fri, Mar 3, 2017 at 4:27 PM janezz55 . <janezz55@gmail.com> wrote:
>>
>>> Michal: You throw away compile-time type safety every time you use a
>>> std::any, this was the case all the way back to 2001.
>>>
>>> 2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>>
>>> Sorry; my last message should've read "I want to throw away compile-tim=
e
>>> type safety [...]".
>>>
>>> On Fri, Mar 3, 2017 at 4:11 PM janezz55 . <janezz55@gmail.com> wrote:
>>>
>>> Michal: You haven't read the code, there is a type_id. Types are checke=
d.
>>>
>>> 2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>>
>>> So your use-case that's supposed to convince the committee is "I want t=
o
>>> throw away type safety for my thing, help me with doing that"?
>>>
>>> On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:
>>>
>>> Edward: Thanks for the suggestions. I didn't presume to think my
>>> implementation was definitive. It is the closest we can get in C++ to w=
hat
>>> the scripting languages have, without sacrificing too much, in my opini=
on.
>>> The conversions you mention could be done, but only at the price of
>>> significant overhead. Plain std::any does not support conversions when
>>> casting either. If I wrote my own any, I'd definitely move everything I
>>> could into the vtable of the holder, as you suggest. The any_function
>>> implementation is just an example, an idea that occurred to me only
>>> gradually.
>>>
>>> I don't want the user specify the return type, because this is not
>>> traditionally std::any-like. You can store almost anything into a std::=
any
>>> instance, but you don't need to specify anything, there are no template
>>> instantiations needed. Only when casting, do you need those.
>>>
>>> I like your invoke() idea. If something like that were implemented, I'd
>>> be perfectly pleased with it, but really, why not have a operator() as
>>> well? It seems prettier to me, scripting language like. We can invoke a
>>> variable, just like in a scripting language.
>>>
>>> Michal: I'm using this as part of my signal/slot implementation. I don'=
t
>>> want to specify function signatures of my slots, that's the only reason=
 why
>>> I use this. The slots usually don't have many arguments as you want sig=
nal
>>> handling to be fast , also conversions cost time so you don't really wa=
nt
>>> them, the single signature problem is not much of a problem. Take a loo=
k:
>>>
>>> https://github.com/user1095108/crl
>>>
>>> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>>>
>>> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>>>
>>> When you open your browser the use cases are showing in front of your
>>> eyes, JavaScript programs storing functions in a variable. Python, lua =
and
>>> countless other scripts doing the same. I can't believe you haven't see=
n
>>> any of this in practice.
>>>
>>>
>>> It works in scripting languages because they have a rich base type (hav=
e
>>> you looked at the size of the PyObject vtable?) that erases all the
>>> operations the language syntax allows on an object. We don't have that =
in
>>> C++ because of overhead and because it's incompatible with a
>>> Turing-complete compile time type system.
>>>
>>> Your proposed facility:
>>>
>>> * Requires the target type to have exactly 1 call signature, so it won'=
t
>>> work with multi-callables, overload combiners, or polymorphic or variad=
ic
>>> function objects, esp. closure types.
>>> * Requires the caller to supply exactly the arguments corresponding to
>>> the signature of the target type (otherwise UB, assert or throw). So no
>>> arithmetic conversions, cvr conversions or implicit conversions. That's=
 a
>>> recipe for frustration.
>>> * Asymmetry between argument and return types; why not require the user
>>> to specify the return type?
>>> * Overhead: one extra function pointer plus one extra typeid (for the
>>> signature type, if extant) per any instance.
>>>
>>> Now some constructive suggestions:
>>>
>>> * The overhead is a defect of your implementation; you can move those
>>> members into the vtable, at the cost of an extra indirection.
>>> * The return type could be provided by having your invoke member
>>> function take the return type as the first template parameter, or
>>> preferably providing a non-member invoke. That would also allow supplyi=
ng
>>> argument types explicitly:
>>>
>>> auto a =3D any{[](std::string, unsigned) { return true; }};
>>> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>>>
>>> Is that useful? I'm not too sure, but at least it's clear what the
>>> facility can and cannot do. It still can't accept multi-signature calla=
bles.
>>>
>>> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>>
>>> You've asked for a feature, and yet you can't produce an example of how
>>> that feature would be useful. This is the rational argument: we don't n=
eed
>>> features that don't have use cases.
>>>
>>> Do show us examples of how this is useful and we might reconsider this
>>> feature. Plain and simple like that. Throwing logical fallacies around
>>> won't change it.
>>>
>>> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>>>
>>> We don't need C++, ASM is sufficient, or an arbitrary other computer
>>> language. 640k were sufficient at some point in time. I haven't heard a
>>> single rational argument from you. I'd hate to have you as a boss.
>>>
>>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>>
>>> You're proposing a feature for the sake of having a feature. Give us
>>> actual use cases if you think that is not true.
>>>
>>> Having a feature that no-one will use is not beneficial.
>>>
>>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>>>
>>> As for me being a type ducking proponent... std::any in various forms
>>> has been around since 2001, I think. All the while until now you could
>>> assign a function pointer or a member function pointer to it as well as
>>> copyable function objects. It's nothing new. Adding the invocation feat=
ure
>>> would simply be a natural development in my opinion.
>>>
>>> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>
>>> What you describe are workarounds. If you want to use a temporary
>>> lambda, you won't be able to keep the type around. Maybe you don't want=
 to
>>> specify the function signature and so std::function is not appropriate.
>>>
>>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>>
>>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote=
:
>>>
>>> Show us the actual (i.e. complete) example of why that be useful (and
>>> why you wouldn't just use `std::function<void ()>`, or the somewhat
>>> proposed function_ref, for that).
>>>
>>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>>
>>> Let's say you store a lambda object into std::any
>>>
>>> std::any a =3D [](){};
>>>
>>> How are you going to obtain the lambda object back? AFAIK it's locked
>>> inside the any instance. If std::any had a mechanism of invoking the st=
ored
>>> object you could still "reach" it.
>>>
>>>
>>> any_cast. You have to keep the lambda type around of course. If you
>>> don't want to, wrap the lambda in a std::function first before putting =
it
>>> in an std::any.
>>>
>>>
>>>
>>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>
>>> I already wrote what I needed :) function<any(std::vector<any>)> is
>>> simply blasphemous.
>>>
>>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>>
>>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>>
>>> I believe that std::any should be made invokable, if an invokable objec=
t
>>> is stored into it, such as a function pointer, method pointer, or a fun=
ctor
>>> (such as std::function<> and others). This would raise the level of
>>> abstraction C++ offers to one comparable to scripting languages, where =
you
>>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>>
>>>
>>> Any is a polymorphic wrapper for any object modeling the
>>> CopyConstructible concept. Anything beyond that is out of scope. In fac=
t
>>> any doesn't even provide equality or ordering, which would seem very ba=
sic.
>>>
>>> What you want is std::function (another polymorphic wrapper for types
>>> modeling the FunctionObject concept) . If you want fully dynamic behavi=
or
>>> (including runtime type checking of parameters), use
>>> function<any(std::vector<any>)> and wrap the stored function in an
>>> adaptor that does the unboxing of the parameters.
>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaY
>>> up5XegKF253kwet6TFZBjg%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2=
GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
>>> .
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-
>>> 77e57123f68e%40isocpp.org
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d-=
73a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Dfo=
oter>
>>> .
>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-
>>> hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GED=
s%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>>> .
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>>
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6
>>> WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSF=
V30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
>>> .
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9D
>>> wcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHr=
HjykbpVLJv3RVBL7QK9DwcF4gFMF5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
>>> .
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> std-proposal...@isocpp.org.
>>> To post to this group, send email to std-pr...@isocpp.org.
>>> To view this discussion on the web visit https://groups.google.com/a/is
>>> ocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZh
>>> ZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSH=
x9cFUfnn4a1tzhmnrpZhZFkP6CFq55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
>>> .
>>>
>>>
>>>
>>> --
>>> 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/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz
>>> %2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGY=
CVZ5C6-j_3VOpgBPRkSz%2BBg0bU_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_mediu=
m=3Demail&utm_source=3Dfooter>
>>> .
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>>
>>> To unsubscribe from this group and all its topics, 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/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSi
>>> eFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3=
nZaF9aUSnFzwE0jm2pSieFCLyJNSzw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
>>> .
>>>
>>>
>>> --
>>> 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/CAO9E8GGM%3D%3DcAn_e4VzDMgwXM
>>> bJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM=
%3D%3DcAn_e4VzDMgwXMbJnwaZvGWbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>>> .
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>> To unsubscribe from this group and all its topics, 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/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0
>>> VDrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9=
eRWOkpJAPqk8a2sqAOB0VDrQjgtk4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Dem=
ail&utm_source=3Dfooter>
>>> .
>>>
>>>
>>> --
>>> 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/CAO9E8GEhviWUpteV%2BS3u3pDC4o
>>> Vny2gX3MNRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com
>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEh=
viWUpteV%2BS3u3pDC4oVny2gX3MNRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com?utm_med=
ium=3Demail&utm_source=3Dfooter>
>>> .
>>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/CAPCFJdT6jP_r6qqd9ukUvyK0rFUP
>> t3S5VWbOeHagKC7czwM8oQ%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdT6j=
P_r6qqd9ukUvyK0rFUPt3S5VWbOeHagKC7czwM8oQ%40mail.gmail.com?utm_medium=3Dema=
il&utm_source=3Dfooter>
>> .
>>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAO9E8GGsO2h4OUky3ZS%3DduT-
> jvCkQqs7OJJXYKa_cQux%3Dmw54A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGsO2=
h4OUky3ZS%3DduT-jvCkQqs7OJJXYKa_cQux%3Dmw54A%40mail.gmail.com?utm_medium=3D=
email&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAJnLdOYiOeK%2BC1kJ0ed6vGNOqH%2Bb4b_8x%3D-1o7CdV=
6NCDc9_TA%40mail.gmail.com.

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On F=
ri, Mar 3, 2017 at 3:38 PM, janezz55 . <span dir=3D"ltr">&lt;<a href=3D"mai=
lto:janezz55@gmail.com" target=3D"_blank">janezz55@gmail.com</a>&gt;</span>=
 wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Additional costs=
 are an additional function pointer (or virtual function, whichever the imp=
lementer prefers) and another type_id. As a std::any may contain storage fo=
r &quot;small object optimization&quot;, this might not be significant.</di=
v></blockquote><div><br></div><div>It&#39;s less than that; the invoker and=
 function typeid are the same for any particular contained type, so they ca=
n be maintained statically and accessed via the vtable equivalent. For exam=
ple, in the <a href=3D"https://github.com/gcc-mirror/gcc/blob/master/libstd=
c%2B%2B-v3/include/std/any#L357">libstdc++ implementation</a> one would nee=
d to add ops _Op_get_function_type_info and _Op_invoke_function. That&#39;s=
 zero space increase, zero time increase, only a small code increase, and f=
ully ABI compatible in both directions. Realistically, that should count as=
 zero-cost.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div cla=
ss=3D"gmail_extra"><div class=3D"gmail_quote">2017-03-03 16:31 GMT+01:00 Mi=
cha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a href=3D"mailto:griwes@griwes.in=
fo" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;pa=
dding-left:1ex"><div dir=3D"ltr">Yes; my point is you&#39;re asking for an =
ability to throw away more of it, <i>with an additional cost for everyone w=
ho doesn&#39;t use this </i>(which is pretty directly against what C++ stan=
ds for). I&#39;m pretty confident that this is not the right direction.<div=
><br></div><div>Go on, write a paper. We&#39;ll see whose opinion the LEWG =
favors more.</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On =
Fri, Mar 3, 2017 at 4:27 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail=
..com" target=3D"_blank">janezz55@gmail.com</a>&gt; wrote:<br></div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc s=
olid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_4947371706181986074m_418=
0823617425430101gmail_msg">Michal: You throw away compile-time type safety =
every time you use a std::any, this was the case all the way back to 2001.<=
/div><div class=3D"gmail_extra m_4947371706181986074m_4180823617425430101gm=
ail_msg"><br class=3D"m_4947371706181986074m_4180823617425430101gmail_msg">=
<div class=3D"gmail_quote m_4947371706181986074m_4180823617425430101gmail_m=
sg"></div></div><div class=3D"gmail_extra m_4947371706181986074m_4180823617=
425430101gmail_msg"><div class=3D"gmail_quote m_4947371706181986074m_418082=
3617425430101gmail_msg">2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <sp=
an dir=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101gmail_msg=
">&lt;<a href=3D"mailto:griwes@griwes.info" class=3D"m_4947371706181986074m=
_4180823617425430101gmail_msg" target=3D"_blank">griwes@griwes.info</a>&gt;=
</span>:<br class=3D"m_4947371706181986074m_4180823617425430101gmail_msg"><=
/div></div><div class=3D"gmail_extra m_4947371706181986074m_418082361742543=
0101gmail_msg"><div class=3D"gmail_quote m_4947371706181986074m_41808236174=
25430101gmail_msg"><blockquote class=3D"gmail_quote m_4947371706181986074m_=
4180823617425430101gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_4947371706181986074m=
_4180823617425430101gmail_msg">Sorry; my last message should&#39;ve read &q=
uot;I want to throw away compile-time type safety [...]&quot;.</div><br cla=
ss=3D"m_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"gm=
ail_quote m_4947371706181986074m_4180823617425430101gmail_msg"><div dir=3D"=
ltr" class=3D"m_4947371706181986074m_4180823617425430101gmail_msg">On Fri, =
Mar 3, 2017 at 4:11 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gmail.com"=
 class=3D"m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_b=
lank">janezz55@gmail.com</a>&gt; wrote:<br class=3D"m_4947371706181986074m_=
4180823617425430101gmail_msg"></div><blockquote class=3D"gmail_quote m_4947=
371706181986074m_4180823617425430101gmail_msg" style=3D"margin:0 0 0 .8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">Michal: =
You haven&#39;t read the code, there is a type_id. Types are checked.</div>=
<div class=3D"gmail_extra m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823=
617425430101gmail_msg"><br class=3D"m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198607=
4m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4947371706181986074m_4180823617425430101gmail_msg"></div></div><div cl=
ass=3D"gmail_extra m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254=
30101gmail_msg"><div class=3D"gmail_quote m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618=
1986074m_4180823617425430101gmail_msg">2017-03-03 16:09 GMT+01:00 Micha=C5=
=82 Dominiak <span dir=3D"ltr" class=3D"m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819=
86074m_4180823617425430101gmail_msg">&lt;<a href=3D"mailto:griwes@griwes.in=
fo" class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101g=
mail_msg" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br class=3D"=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></d=
iv></div><div class=3D"gmail_extra m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074=
m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4947371706181986074m_4180823617425430101gmail_msg"><blockquote class=3D=
"gmail_quote m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101g=
mail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex"><div dir=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg">So your use-case that&#39;s supposed to convi=
nce the committee is &quot;I want to throw away type safety for my thing, h=
elp me with doing that&quot;?</div><br class=3D"m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737=
1706181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div di=
r=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254=
30101gmail_msg">On Fri, Mar 3, 2017 at 4:04 PM janezz55 . &lt;<a href=3D"ma=
ilto:janezz55@gmail.com" class=3D"m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m=
_4180823617425430101gmail_msg" target=3D"_blank">janezz55@gmail.com</a>&gt;=
 wrote:<br class=3D"m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425=
430101gmail_msg"></div><blockquote class=3D"gmail_quote m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"margin:0 0 0 =
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg">Edward: Thanks =
for the suggestions. I didn&#39;t presume to think my implementation was de=
finitive. It is the closest we can get in C++ to what the scripting languag=
es have, without sacrificing too much, in my opinion. The conversions you m=
ention could be done, but only at the price of significant overhead. Plain =
std::any does not support conversions when casting either. If I wrote my ow=
n any, I&#39;d definitely move everything I could into the vtable of the ho=
lder, as you suggest. The any_function implementation is just an example, a=
n idea that occurred to me only gradually.<div class=3D"m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg"><br class=3D"m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819=
86074m_4180823617425430101gmail_msg"></div><div class=3D"m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706=
181986074m_4180823617425430101gmail_msg">I don&#39;t want the user specify =
the return type, because this is not traditionally std::any-like. You can s=
tore almost anything into a std::any instance, but you don&#39;t need to sp=
ecify anything, there are no template instantiations needed. Only when cast=
ing, do you need those.</div><div class=3D"m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418=
0823617425430101gmail_msg"><br class=3D"m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082=
3617425430101gmail_msg"></div><div class=3D"m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41=
80823617425430101gmail_msg">I like your invoke() idea. If something like th=
at were implemented, I&#39;d be perfectly pleased with it, but really, why =
not have a operator() as well? It seems prettier to me, scripting language =
like. We can invoke a variable, just like in a scripting language.<br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg"></div><div clas=
s=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">Michal: I&#=
39;m using this as part of my signal/slot implementation. I don&#39;t want =
to specify function signatures of my slots, that&#39;s the only reason why =
I use this. The slots usually don&#39;t have many arguments as you want sig=
nal handling to be fast , also conversions cost time so you don&#39;t reall=
y want them, the single signature problem is not much of a problem. Take a =
look:</div><div class=3D"m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gm=
ail_msg"><br class=3D"m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail=
_msg"></div><div class=3D"m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101g=
mail_msg"><a href=3D"https://github.com/user1095108/crl" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">https:/=
/github.com/user1095108<wbr>/crl</a><br class=3D"m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198607=
4m_4180823617425430101gmail_msg"></div></div></div><div dir=3D"ltr" class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div class=
=3D"gmail_extra m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">=
<br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><di=
v class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg">2017-03-03 15:22 GMT+01:00 Edward Catmur <span dir=3D"ltr" class=3D"=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4947371706181986074m_4180823617425430101gmail_msg">&lt;<a href=3D"m=
ailto:ed@catmur.co.uk" class=3D"m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254=
30101gmail_msg" target=3D"_blank">ed@catmur.co.uk</a>&gt;</span>:<br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><blockquote =
class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_=
msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex"><div dir=3D"ltr" class=3D"m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m=
_4180823617425430101gmail_msg"><span class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928m_-6275472275488112246gmail- m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198=
6074m_4180823617425430101gmail_msg">On Friday, 3 March 2017 14:05:46 UTC, j=
anezz55 .  wrote:<blockquote class=3D"gmail_quote m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-=
left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg">When you open y=
our browser the use cases are showing in front of your eyes, JavaScript pro=
grams storing functions in a variable. Python, lua and countless other scri=
pts doing the same. I can&#39;t believe you haven&#39;t seen any of this in=
 practice.</div></blockquote><div class=3D"m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418=
0823617425430101gmail_msg"><br class=3D"m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082=
3617425430101gmail_msg"></div></span><div class=3D"m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986=
074m_4180823617425430101gmail_msg">It works in scripting languages because =
they have a rich base type (have you looked at the size of the PyObject vta=
ble?) that erases all the operations the language syntax allows on an objec=
t. We don&#39;t have that in C++ because of overhead and because it&#39;s i=
ncompatible with a Turing-complete compile time type system.</div><div clas=
s=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></div><div c=
lass=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div cla=
ss=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">Your propo=
sed facility:</div><div class=3D"m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425=
430101gmail_msg"><br class=3D"m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430=
101gmail_msg"></div><div class=3D"m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742=
5430101gmail_msg">* Requires the target type to have exactly 1 call signatu=
re, so it won&#39;t work with multi-callables, overload combiners, or polym=
orphic or variadic function objects, esp. closure types.</div><div class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg">* Requires the =
caller to supply exactly the arguments corresponding to the signature of th=
e target type (otherwise UB, assert or throw). So no arithmetic conversions=
, cvr conversions or implicit conversions. That&#39;s a recipe for frustrat=
ion.</div><div class=3D"m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gma=
il_msg">* Asymmetry between argument and return types; why not require the =
user to specify the return type?</div><div class=3D"m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198=
6074m_4180823617425430101gmail_msg">* Overhead: one extra function pointer =
plus one extra typeid (for the signature type, if extant) per any instance.=
</div></div><div class=3D"m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101g=
mail_msg"><br class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg"></div><div class=3D"m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101=
gmail_msg">Now some constructive suggestions:</div><div class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473=
71706181986074m_4180823617425430101gmail_msg"></div><div class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">* The overhead is a defec=
t of your implementation; you can move those members into the vtable, at th=
e cost of an extra indirection.</div><div class=3D"m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986=
074m_4180823617425430101gmail_msg">* The return type could be provided by h=
aving your invoke member function take the return type as the first templat=
e parameter, or preferably providing a non-member invoke. That would also a=
llow supplying argument types explicitly:</div><div class=3D"m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737=
1706181986074m_4180823617425430101gmail_msg"><br class=3D"m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170=
6181986074m_4180823617425430101gmail_msg"></div><div class=3D"m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473=
71706181986074m_4180823617425430101gmail_msg">auto a =3D any{[](std::string=
, unsigned) { return true; }};</div><div class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg">auto b =3D invoke&lt;bool, std::string, u=
nsigned&gt;(a, &quot;meow&quot;, 1);</div><div class=3D"m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg"><br class=3D"m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819=
86074m_4180823617425430101gmail_msg"></div><div class=3D"m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706=
181986074m_4180823617425430101gmail_msg">Is that useful? I&#39;m not too su=
re, but at least it&#39;s clear what the facility can and cannot do. It sti=
ll can&#39;t accept multi-signature callables.</div><div class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947=
371706181986074m_4180823617425430101gmail_msg"></div><blockquote class=3D"g=
mail_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><div class=3D"m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gm=
ail_msg"><div class=3D"gmail_quote m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174=
25430101gmail_msg"><span class=3D"m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928m_-6275472275488112246gmail- m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082=
3617425430101gmail_msg">2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <sp=
an dir=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gma=
il_msg">&lt;<a rel=3D"nofollow" class=3D"m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808=
23617425430101gmail_msg">gri...@griwes.info</a>&gt;</span>:<br class=3D"m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4947371706181986074m_4180823617425430101gmail_msg"></span><blockquote =
class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_=
msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex"><span class=3D"m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928m_-6275472275488112246gmail- m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180=
823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198=
6074m_4180823617425430101gmail_msg">You&#39;ve asked for a feature, and yet=
 you can&#39;t produce an example of how that feature would be useful. This=
 is the rational argument: we don&#39;t need features that don&#39;t have u=
se cases.<div class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg"><br class=3D"m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_m=
sg"></div><div class=3D"m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gma=
il_msg">Do show us examples of how this is useful and we might reconsider t=
his feature. Plain and simple like that. Throwing logical fallacies around =
won&#39;t change it.</div></div><br class=3D"m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4=
180823617425430101gmail_msg"></span><div class=3D"gmail_quote m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473=
71706181986074m_4180823617425430101gmail_msg"><span class=3D"m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg"><div class=3D"m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947=
371706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_4947371706181986074m_4180823617425430101gmail_msg">On Fri, Mar 3, 201=
7 at 2:31 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706=
181986074m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt; wrote:<b=
r class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></div=
></div></div></span><blockquote class=3D"gmail_quote m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819=
86074m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bord=
er-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg"><span class=3D"m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4947371706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" clas=
s=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">We don&#39;=
t need C++, ASM is sufficient, or an arbitrary other computer language. 640=
k were sufficient at some point in time. I haven&#39;t heard a single ratio=
nal argument from you. I&#39;d hate to have you as a boss.</div><div class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"g=
mail_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></div=
></div></span><span class=3D"m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928m_-6275472275488112246gmail- m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174=
25430101gmail_msg"><div class=3D"m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425=
430101gmail_msg"><div class=3D"gmail_quote m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418=
0823617425430101gmail_msg">2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak =
<span dir=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101=
gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41=
80823617425430101gmail_msg">gri...@griwes.info</a>&gt;</span>:<br class=3D"=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4947371706181986074m_4180823617425430101gmail_msg"></div></div></sp=
an><div class=3D"m_4947371706181986074m_4180823617425430101m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"=
><div class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101=
gmail_msg"><blockquote class=3D"gmail_quote m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41=
80823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1=
px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4947371706181986074m_4180823617425430101gmail_msg">You&#39;re propo=
sing a feature for the sake of having a feature. Give us actual use cases i=
f you think that is not true.<div class=3D"m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418=
0823617425430101gmail_msg"><br class=3D"m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082=
3617425430101gmail_msg"></div><div class=3D"m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41=
80823617425430101gmail_msg">Having a feature that no-one will use is not be=
neficial.</div></div><br class=3D"m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742=
5430101gmail_msg"></span><div class=3D"gmail_quote m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986=
074m_4180823617425430101gmail_msg"><span class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928m_-6275472275488112246gmail- m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">On Fri, Mar 3, 2017 at 12=
:59 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986=
074m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt; wrote:<br clas=
s=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></div></spa=
n><blockquote class=3D"gmail_quote m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174=
25430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex"><span class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928m_-6275472275488112246gmail- m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">As for me being a type du=
cking proponent... std::any in various forms has been around since 2001, I =
think. All the while until now you could assign a function pointer or a mem=
ber function pointer to it as well as copyable function objects. It&#39;s n=
othing new. Adding the invocation feature would simply be a natural develop=
ment in my opinion.</div></span><div class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg"><br class=3D"m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418=
0823617425430101gmail_msg"><div class=3D"gmail_quote m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819=
86074m_4180823617425430101gmail_msg"><span class=3D"m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928m_-6275472275488112246gmail- m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170=
6181986074m_4180823617425430101gmail_msg">2017-03-03 12:47 GMT+01:00 janezz=
55 . <span dir=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254=
30101gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198607=
4m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt;</span>:<br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></span><bloc=
kquote class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543010=
1gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex"><span class=3D"m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928m_-6275472275488112246gmail- m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198607=
4m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg">What you describe are workaround=
s. If you want to use a temporary lambda, you won&#39;t be able to keep the=
 type around. Maybe you don&#39;t want to specify the function signature an=
d so std::function is not appropriate.</div></span><div class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg"><div class=3D"m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947=
371706181986074m_4180823617425430101gmail_msg"><div class=3D"m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737=
1706181986074m_4180823617425430101gmail_msg"><br class=3D"m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170=
6181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_4947371706181986074m_4180823617425430101gmail_msg"><span class=3D"m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_4947371706181986074m_4180823617425430101gmail_msg">2017-03-03 12:44 G=
MT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg">&lt;<a rel=3D"nofollow" class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg">gpde...@gmail.c=
om</a>&gt;</span>:<br class=3D"m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543=
0101gmail_msg"></span><blockquote class=3D"gmail_quote m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618=
1986074m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail-=
 m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr=
" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><span=
 class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">On Fri=
day, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:</span><b=
lockquote class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543=
0101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(=
204,204,204);padding-left:1ex"><span class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg">Show us the actual (i.e. complete) =
example of why that be useful (and why you wouldn&#39;t just use `std::func=
tion&lt;void ()&gt;`, or the somewhat proposed function_ref, for that).</di=
v><br class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><=
/span><span class=3D"m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_=
msg"><div class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543=
0101gmail_msg"><div dir=3D"ltr" class=3D"m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808=
23617425430101gmail_msg">On Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a =
rel=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101g=
mail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D"m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618=
1986074m_4180823617425430101gmail_msg"></div><blockquote class=3D"gmail_quo=
te m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1e=
x"><div dir=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254301=
01gmail_msg">Let&#39;s say you store a lambda object into std::any<div clas=
s=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></div><div c=
lass=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">std::any=
 a =3D [](){};</div><div class=3D"m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742=
5430101gmail_msg"><br class=3D"m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543=
0101gmail_msg"></div><div class=3D"m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174=
25430101gmail_msg">How are you going to obtain the lambda object back? AFAI=
K it&#39;s locked inside the any instance. If std::any had a mechanism of i=
nvoking the stored object you could still &quot;reach&quot; it.</div></div>=
</blockquote></div></span></blockquote><div class=3D"m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819=
86074m_4180823617425430101gmail_msg"><br class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg">any_cast. You have to keep the lambda typ=
e around of course. If you don&#39;t want to, wrap the lambda in a std::fun=
ction first before putting it in an std::any.<br class=3D"m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170=
6181986074m_4180823617425430101gmail_msg">=C2=A0</div><blockquote class=3D"=
gmail_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex"><div class=3D"gmail_quote m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236=
17425430101gmail_msg"><blockquote class=3D"gmail_quote m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618=
1986074m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote=
 m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg"><span class=3D"=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4947371706181986074m_4180823617425430101gmail_msg">2017-03-03 11:15=
 GMT+01:00 janezz55 . <span dir=3D"ltr" class=3D"m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618198607=
4m_4180823617425430101gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt;=
</span>:<br class=3D"m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_=
msg"></span><blockquote class=3D"gmail_quote m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4=
180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371=
706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4947371706181986074m_4180823617425430101gmail_msg">I already wrote what =
I needed :) function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; is simply blas=
phemous.</div></span><span class=3D"m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617=
425430101gmail_msg"><div class=3D"m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742=
5430101gmail_msg"><div class=3D"m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254=
30101gmail_msg"><div class=3D"m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430=
101gmail_msg"><br class=3D"m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101=
gmail_msg"><div class=3D"gmail_quote m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361=
7425430101gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <spa=
n dir=3D"ltr" class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg">&lt;<a rel=3D"nofollow" class=3D"m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082=
3617425430101gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4947371706181986074m_4180823617425430101gmail_msg"><blockquote class=3D"=
gmail_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex"><div dir=3D"ltr" class=3D"m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236=
17425430101gmail_msg">On Thursday, March 2, 2017 at 6:26:01 PM UTC, <a clas=
s=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">jane...@gma=
il.com</a> wrote:<blockquote class=3D"gmail_quote m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-=
left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg">I believe that =
std::any should be made invokable, if an invokable object is stored into it=
, such as a function pointer, method pointer, or a functor (such as std::fu=
nction&lt;&gt; and others). This would raise the level of abstraction C++ o=
ffers to one comparable to scripting languages, where you can often invoke =
an arbitrary variable. I&#39;ve prepared 2 examples:</div></blockquote><div=
 class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><br cl=
ass=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">Any is a =
polymorphic wrapper for any object modeling the CopyConstructible concept. =
Anything beyond that is out of scope. In fact any doesn&#39;t even provide =
equality or ordering, which would seem very basic. <br class=3D"m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494=
7371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737=
1706181986074m_4180823617425430101gmail_msg">What you want is std::function=
 (another polymorphic wrapper for types modeling the FunctionObject concept=
) . If you want fully dynamic behavior (including runtime type checking of =
parameters), use function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wrap =
the stored function in an adaptor that does the unboxing of the parameters.=
<br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></d=
iv></div></blockquote></div><br class=3D"m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808=
23617425430101gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986=
074m_4180823617425430101gmail_msg"></div><span class=3D"m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361=
7425430101gmail_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.=
<span class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><=
br class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101=
gmail_msg" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/=
msgid/std-proposals<wbr>/CAO9E8GE2GR1GQRos5BCUJzLi5yaY<wbr>up5XegKF253kwet6=
TFZBjg%40mail.<wbr>gmail.com</a>.<br class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808=
23617425430101gmail_msg"><span class=3D"m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928m_-6275472275488112246gmail- m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" targe=
t=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-propos=
als<wbr>/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928m_-6275472275488112246gmail- m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg"><br class=3D"m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.=
<br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></s=
pan></span><span class=3D"m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928m_-6275472275488112246gmail- m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254=
30101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" target=
=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposa=
ls<wbr>/a6013d8d-73a6-4f40-bbc9-<wbr>77e57123f68e%40isocpp.org</a>.<br clas=
s=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
</span></blockquote></div><br class=3D"m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748=
2639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823=
617425430101gmail_msg"></div><span class=3D"m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41=
80823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737=
1706181986074m_4180823617425430101gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371=
706181986074m_4180823617425430101gmail_msg"><font color=3D"#888888" class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D=
"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg"></font></span><=
/div><span class=3D"m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_m=
sg"><font color=3D"#888888" class=3D"m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361=
7425430101gmail_msg"><span class=3D"m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928m_-6275472275488112246gmail- m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180=
823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg"></span><span class=3D"m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmai=
l- m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361=
7425430101gmail_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.=
<br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></s=
pan><span class=3D"m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-6=
275472275488112246gmail- m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gm=
ail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543=
0101gmail_msg" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.or=
g/d/msgid/std-proposals<wbr>/CAO9E8GEDs%2BmqoyCxakK0v-<wbr>hKoWcBYJE%2B9rdX=
uNUyGMTRwqPFAw<wbr>%40mail.gmail.com</a>.<br class=3D"m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181=
986074m_4180823617425430101gmail_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><div class=
=3D"gmail_quote m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">=
<blockquote class=3D"gmail_quote m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425=
430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex"><span class=3D"m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074=
m_4180823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg"><span class=3D"m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4947371706181986074m_4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" targe=
t=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-propos=
als<wbr>/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928m_-6275472275488112246gmail- m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg"><br class=3D"m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.=
<br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></s=
pan></font></span></blockquote></div></div><div class=3D"m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706=
181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
4947371706181986074m_4180823617425430101gmail_msg"><blockquote class=3D"gma=
il_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><span class=3D"m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101g=
mail_msg"><font color=3D"#888888" class=3D"m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418=
0823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254301=
01gmail_msg" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/=
d/msgid/std-proposals<wbr>/CAPCFJdSFV30P%3DdEQoooHcn05s6<wbr>WqBiaV4XpyuQY4=
P3jLkM5Dqg%<wbr>40mail.gmail.com</a>.<br class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg">
</font></span></blockquote></div><br class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg"></div><span class=3D"m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928m_-6275472275488112246gmail- m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706=
181986074m_4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg"></span><span class=3D"m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmai=
l- m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361=
7425430101gmail_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49=
47371706181986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.=
<br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></s=
pan></div></div><span class=3D"m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928m_-6275472275488112246gmail- m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361=
7425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHrHjykbpVLJv3RVBL7QK9DwcF4gFMF=
5HP%2B2QFCWvRS4A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254301=
01gmail_msg" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/=
d/msgid/std-proposals<wbr>/CAO9E8GHrHjykbpVLJv3RVBL7QK9D<wbr>wcF4gFMF5HP%2B=
2QFCWvRS4A%40mai<wbr>l.gmail.com</a>.<br class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg">
</span></blockquote></div><span class=3D"m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808=
23617425430101gmail_msg"><span class=3D"m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928m_-6275472275488112246gmail- m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" targe=
t=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-propos=
als<wbr>/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008m_90394101193756=
93614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928=
gmail_msg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg">std-proposal...@isocpp.org</a>.<span class=3D"m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928m_-6275472275488112246gmail- m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg"><br class=3D"m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061=
81986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.=
<br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></s=
pan></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSHx9cFUfnn4a1tzhmnrpZhZFkP6CFq=
55NWM6HFLMgO-A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101=
gmail_msg" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/=
msgid/std-proposals<wbr>/CAPCFJdSHx9cFUfnn4a1tzhmnrpZh<wbr>ZFkP6CFq55NWM6HF=
LMgO-A%40mail.<wbr>gmail.com</a>.<br class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg">
</blockquote></div><br class=3D"m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254=
30101gmail_msg"></div><span class=3D"m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614HOEnZb m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><fon=
t color=3D"#888888" class=3D"m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180=
823617425430101gmail_msg">
</font></span></blockquote></div></blockquote></div><span class=3D"m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614HOEnZb m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180=
823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4947371706181986074m_4180823617425430101gmail_msg"></font></span></div></=
div></div></div><span class=3D"m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614HOEnZb m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"><font colo=
r=3D"#888888" class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617=
425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4=
947371706181986074m_4180823617425430101gmail_msg">
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" class=3D"m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">=
std-proposals+unsubscribe@isoc<wbr>pp.org</a>.<br class=3D"m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" t=
arget=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz%2BBg0bU=
_%3DE%3D_PFe0X4UOkiw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" =
target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-p=
roposals<wbr>/CAO9E8GGYCVZ5C6-j_3VOpgBPRkSz<wbr>%2BBg0bU_%3DE%3D_PFe0X4UOki=
w%<wbr>40mail.gmail.com</a>.<br class=3D"m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_41808=
23617425430101gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail=
_msg"><div class=3D"gmail_quote m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4=
180823617425430101gmail_msg"><blockquote class=3D"gmail_quote m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614HOEnZb m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_4947371706181986074m_4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gm=
ail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254301=
01gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"=
>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" target=3D=
"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<=
wbr>/cJD8urBWN7c/unsubscribe</a>.<br class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg"></font></span></blockquote></div=
></div><div class=3D"gmail_extra m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m_=
4180823617425430101gmail_msg"><div class=3D"gmail_quote m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_4947371706181986074m_4180823617425430101gmail_msg"><blockquote class=3D"g=
mail_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gma=
il_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:=
1ex"><span class=3D"m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614HOEnZb m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4947371706181986074m_4180823617425430101gmail_msg"><font color=3D"#88888=
8" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gm=
ail_msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">st=
d-proposals+unsubscribe@isoc<wbr>pp.org</a>.</font></span></blockquote></di=
v></div><div class=3D"gmail_extra m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986074m=
_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_4947371706181986074m_4180823617425430101gmail_msg"><blockquote class=3D"=
gmail_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gm=
ail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left=
:1ex"><span class=3D"m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614HOEnZb m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_4947371706181986074m_4180823617425430101gmail_msg"><font color=3D"#8888=
88" class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101g=
mail_msg"><br class=3D"m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617=
425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543010=
1gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg"></font=
></span></blockquote></div></div><div class=3D"gmail_extra m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"gmail=
_quote m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_m=
sg"><blockquote class=3D"gmail_quote m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717061819860=
74m_4180823617425430101gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><span class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4HOEnZb m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_=
msg"><font color=3D"#888888" class=3D"m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_4947371706181986=
074m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSieFCLyJNS=
zw_bWiDVW0oV4Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gmai=
l_msg" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgi=
d/std-proposals<wbr>/CAPCFJdQ3nZaF9aUSnFzwE0jm2pSi<wbr>eFCLyJNSzw_bWiDVW0oV=
4Q%40mail.<wbr>gmail.com</a>.<br class=3D"m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_494737170618=
1986074m_4180823617425430101gmail_msg">
</font></span></blockquote></div><br class=3D"m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_49473717=
06181986074m_4180823617425430101gmail_msg"></div><span class=3D"m_494737170=
6181986074m_4180823617425430101m_8620857624651409115HOEnZb m_49473717061819=
86074m_4180823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_494=
7371706181986074m_4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101gm=
ail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_4947371706181986074m_41808236174254301=
01gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
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" class=3D"m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg" targe=
t=3D"_blank">std-proposals+unsubscribe@isoc<wbr>pp.org</a>.<br class=3D"m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_4947371706181986074m_418082361742543010=
1gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_4947371706181986074m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGM%3D%3DcAn_e4VzDMgwXMbJnwaZvG=
Wbw5gEb8NcQg0mkgNg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" class=3D"m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_4947371706181986074m_4180823617425430101=
gmail_msg" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/=
msgid/std-proposals<wbr>/CAO9E8GGM%3D%3DcAn_e4VzDMgwXM<wbr>bJnwaZvGWbw5gEb8=
NcQg0mkgNg%<wbr>40mail.gmail.com</a>.<br class=3D"m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_4947=
371706181986074m_4180823617425430101gmail_msg">
</font></span></blockquote></div></blockquote></div></div><div class=3D"gma=
il_extra m_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D=
"gmail_quote m_4947371706181986074m_4180823617425430101gmail_msg"><blockquo=
te class=3D"gmail_quote m_4947371706181986074m_4180823617425430101gmail_msg=
" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><=
span class=3D"m_4947371706181986074m_4180823617425430101m_86208576246514091=
15HOEnZb m_4947371706181986074m_4180823617425430101gmail_msg"><font color=
=3D"#888888" class=3D"m_4947371706181986074m_4180823617425430101gmail_msg">

<p class=3D"m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_4947371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" class=3D"m_4947=
371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">https://gr=
oups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<wbr>/cJD8urBWN7c/un=
subscribe</a>.<br class=3D"m_4947371706181986074m_4180823617425430101gmail_=
msg">
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" class=3D"m_494737170618198=
6074m_4180823617425430101gmail_msg" target=3D"_blank">std-proposals+unsubsc=
ribe@isoc<wbr>pp.org</a>.<br class=3D"m_4947371706181986074m_41808236174254=
30101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4947371706181986074m_4180823617425430101gmail_msg" target=
=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_4947371706181986074=
m_4180823617425430101gmail_msg"></font></span></blockquote></div></div><div=
 class=3D"gmail_extra m_4947371706181986074m_4180823617425430101gmail_msg">=
<div class=3D"gmail_quote m_4947371706181986074m_4180823617425430101gmail_m=
sg"><blockquote class=3D"gmail_quote m_4947371706181986074m_418082361742543=
0101gmail_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;paddin=
g-left:1ex"><span class=3D"m_4947371706181986074m_4180823617425430101m_8620=
857624651409115HOEnZb m_4947371706181986074m_4180823617425430101gmail_msg">=
<font color=3D"#888888" class=3D"m_4947371706181986074m_4180823617425430101=
gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0VDrQjgtk=
4H6AFAHJ5obmJw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 class=3D"m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_b=
lank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr=
>/CAPCFJdS9eRWOkpJAPqk8a2sqAOB0<wbr>VDrQjgtk4H6AFAHJ5obmJw%40mail.<wbr>gmai=
l.com</a>.<br class=3D"m_4947371706181986074m_4180823617425430101gmail_msg"=
>
</font></span></blockquote></div><br class=3D"m_4947371706181986074m_418082=
3617425430101gmail_msg"></div><span class=3D"m_4947371706181986074HOEnZb"><=
font color=3D"#888888">

<p class=3D"m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_4947371=
706181986074m_4180823617425430101gmail_msg">
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" class=3D"m_=
4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">std-pr=
oposals+unsubscribe@isoc<wbr>pp.org</a>.<br class=3D"m_4947371706181986074m=
_4180823617425430101gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_4947371706181986074m_4180823617425430101gmail_msg" target=
=3D"_blank">std-proposals@isocpp.org</a>.<br class=3D"m_4947371706181986074=
m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEhviWUpteV%2BS3u3pDC4oVny2gX3M=
NRH4o-%2B%2Bx%2B9AXdTg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=
=3Dfooter" class=3D"m_4947371706181986074m_4180823617425430101gmail_msg" ta=
rget=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-pro=
posals<wbr>/CAO9E8GEhviWUpteV%2BS3u3pDC4o<wbr>Vny2gX3MNRH4o-%2B%2Bx%<wbr>2B=
9AXdTg%40mail.gmail.com</a>.<span class=3D"HOEnZb"><font color=3D"#888888">=
<br class=3D"m_4947371706181986074m_4180823617425430101gmail_msg">
</font></span></font></span></blockquote></div><span class=3D"HOEnZb"><font=
 color=3D"#888888"><span class=3D"m_4947371706181986074HOEnZb"><font color=
=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<wbr>/c=
JD8urBWN7c/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+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/CAPCFJdT6jP_r6qqd9ukUvyK0rFUPt3S5VWbO=
eHagKC7czwM8oQ%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-=
proposals<wbr>/CAPCFJdT6jP_r6qqd9ukUvyK0rFUP<wbr>t3S5VWbOeHagKC7czwM8oQ%40m=
ail.<wbr>gmail.com</a>.<br>
</font></span></font></span></blockquote></div><span class=3D"HOEnZb"><font=
 color=3D"#888888"><br></font></span></div><span class=3D"HOEnZb"><font col=
or=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGsO2h4OUky3ZS%3DduT-jvCkQqs7OJ=
JXYKa_cQux%3Dmw54A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/=
std-<wbr>proposals/<wbr>CAO9E8GGsO2h4OUky3ZS%3DduT-<wbr>jvCkQqs7OJJXYKa_cQu=
x%3Dmw54A%<wbr>40mail.gmail.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/CAJnLdOYiOeK%2BC1kJ0ed6vGNOqH%2Bb4b_8=
x%3D-1o7CdV6NCDc9_TA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdOYiOe=
K%2BC1kJ0ed6vGNOqH%2Bb4b_8x%3D-1o7CdV6NCDc9_TA%40mail.gmail.com</a>.<br />

--94eb2c072f4051bab80549d6302e--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Fri, 3 Mar 2017 20:22:38 +0100
Raw View
--001a1144b3fa08b9210549d878c5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

True. I guess I need to start writing the paper.

On Mar 3, 2017 5:39 PM, "'Edward Catmur' via ISO C++ Standard - Future
Proposals" <std-proposals@isocpp.org> wrote:

> On Fri, Mar 3, 2017 at 3:38 PM, janezz55 . <janezz55@gmail.com> wrote:
>
>> Additional costs are an additional function pointer (or virtual function=
,
>> whichever the implementer prefers) and another type_id. As a std::any ma=
y
>> contain storage for "small object optimization", this might not be
>> significant.
>>
>
> It's less than that; the invoker and function typeid are the same for any
> particular contained type, so they can be maintained statically and
> accessed via the vtable equivalent. For example, in the libstdc++
> implementation
> <https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/s=
td/any#L357>
> one would need to add ops _Op_get_function_type_info and
> _Op_invoke_function. That's zero space increase, zero time increase, only=
 a
> small code increase, and fully ABI compatible in both directions.
> Realistically, that should count as zero-cost.
>
>
>> 2017-03-03 16:31 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>
>>> Yes; my point is you're asking for an ability to throw away more of it,=
 *with
>>> an additional cost for everyone who doesn't use this *(which is pretty
>>> directly against what C++ stands for). I'm pretty confident that this i=
s
>>> not the right direction.
>>>
>>> Go on, write a paper. We'll see whose opinion the LEWG favors more.
>>>
>>> On Fri, Mar 3, 2017 at 4:27 PM janezz55 . <janezz55@gmail.com> wrote:
>>>
>>>> Michal: You throw away compile-time type safety every time you use a
>>>> std::any, this was the case all the way back to 2001.
>>>>
>>>> 2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>>>
>>>> Sorry; my last message should've read "I want to throw away
>>>> compile-time type safety [...]".
>>>>
>>>> On Fri, Mar 3, 2017 at 4:11 PM janezz55 . <janezz55@gmail.com> wrote:
>>>>
>>>> Michal: You haven't read the code, there is a type_id. Types are
>>>> checked.
>>>>
>>>> 2017-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:
>>>>
>>>> So your use-case that's supposed to convince the committee is "I want
>>>> to throw away type safety for my thing, help me with doing that"?
>>>>
>>>> On Fri, Mar 3, 2017 at 4:04 PM janezz55 . <janezz55@gmail.com> wrote:
>>>>
>>>> Edward: Thanks for the suggestions. I didn't presume to think my
>>>> implementation was definitive. It is the closest we can get in C++ to =
what
>>>> the scripting languages have, without sacrificing too much, in my opin=
ion.
>>>> The conversions you mention could be done, but only at the price of
>>>> significant overhead. Plain std::any does not support conversions when
>>>> casting either. If I wrote my own any, I'd definitely move everything =
I
>>>> could into the vtable of the holder, as you suggest. The any_function
>>>> implementation is just an example, an idea that occurred to me only
>>>> gradually.
>>>>
>>>> I don't want the user specify the return type, because this is not
>>>> traditionally std::any-like. You can store almost anything into a std:=
:any
>>>> instance, but you don't need to specify anything, there are no templat=
e
>>>> instantiations needed. Only when casting, do you need those.
>>>>
>>>> I like your invoke() idea. If something like that were implemented, I'=
d
>>>> be perfectly pleased with it, but really, why not have a operator() as
>>>> well? It seems prettier to me, scripting language like. We can invoke =
a
>>>> variable, just like in a scripting language.
>>>>
>>>> Michal: I'm using this as part of my signal/slot implementation. I
>>>> don't want to specify function signatures of my slots, that's the only
>>>> reason why I use this. The slots usually don't have many arguments as =
you
>>>> want signal handling to be fast , also conversions cost time so you do=
n't
>>>> really want them, the single signature problem is not much of a proble=
m.
>>>> Take a look:
>>>>
>>>> https://github.com/user1095108/crl
>>>>
>>>> 2017-03-03 15:22 GMT+01:00 Edward Catmur <ed@catmur.co.uk>:
>>>>
>>>> On Friday, 3 March 2017 14:05:46 UTC, janezz55 . wrote:
>>>>
>>>> When you open your browser the use cases are showing in front of your
>>>> eyes, JavaScript programs storing functions in a variable. Python, lua=
 and
>>>> countless other scripts doing the same. I can't believe you haven't se=
en
>>>> any of this in practice.
>>>>
>>>>
>>>> It works in scripting languages because they have a rich base type
>>>> (have you looked at the size of the PyObject vtable?) that erases all =
the
>>>> operations the language syntax allows on an object. We don't have that=
 in
>>>> C++ because of overhead and because it's incompatible with a
>>>> Turing-complete compile time type system.
>>>>
>>>> Your proposed facility:
>>>>
>>>> * Requires the target type to have exactly 1 call signature, so it
>>>> won't work with multi-callables, overload combiners, or polymorphic or
>>>> variadic function objects, esp. closure types.
>>>> * Requires the caller to supply exactly the arguments corresponding to
>>>> the signature of the target type (otherwise UB, assert or throw). So n=
o
>>>> arithmetic conversions, cvr conversions or implicit conversions. That'=
s a
>>>> recipe for frustration.
>>>> * Asymmetry between argument and return types; why not require the use=
r
>>>> to specify the return type?
>>>> * Overhead: one extra function pointer plus one extra typeid (for the
>>>> signature type, if extant) per any instance.
>>>>
>>>> Now some constructive suggestions:
>>>>
>>>> * The overhead is a defect of your implementation; you can move those
>>>> members into the vtable, at the cost of an extra indirection.
>>>> * The return type could be provided by having your invoke member
>>>> function take the return type as the first template parameter, or
>>>> preferably providing a non-member invoke. That would also allow supply=
ing
>>>> argument types explicitly:
>>>>
>>>> auto a =3D any{[](std::string, unsigned) { return true; }};
>>>> auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);
>>>>
>>>> Is that useful? I'm not too sure, but at least it's clear what the
>>>> facility can and cannot do. It still can't accept multi-signature call=
ables.
>>>>
>>>> 2017-03-03 14:46 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>>>
>>>> You've asked for a feature, and yet you can't produce an example of ho=
w
>>>> that feature would be useful. This is the rational argument: we don't =
need
>>>> features that don't have use cases.
>>>>
>>>> Do show us examples of how this is useful and we might reconsider this
>>>> feature. Plain and simple like that. Throwing logical fallacies around
>>>> won't change it.
>>>>
>>>> On Fri, Mar 3, 2017 at 2:31 PM janezz55 . <jane...@gmail.com> wrote:
>>>>
>>>> We don't need C++, ASM is sufficient, or an arbitrary other computer
>>>> language. 640k were sufficient at some point in time. I haven't heard =
a
>>>> single rational argument from you. I'd hate to have you as a boss.
>>>>
>>>> 2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <gri...@griwes.info>:
>>>>
>>>> You're proposing a feature for the sake of having a feature. Give us
>>>> actual use cases if you think that is not true.
>>>>
>>>> Having a feature that no-one will use is not beneficial.
>>>>
>>>> On Fri, Mar 3, 2017 at 12:59 PM janezz55 . <jane...@gmail.com> wrote:
>>>>
>>>> As for me being a type ducking proponent... std::any in various forms
>>>> has been around since 2001, I think. All the while until now you could
>>>> assign a function pointer or a member function pointer to it as well a=
s
>>>> copyable function objects. It's nothing new. Adding the invocation fea=
ture
>>>> would simply be a natural development in my opinion.
>>>>
>>>> 2017-03-03 12:47 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>>
>>>> What you describe are workarounds. If you want to use a temporary
>>>> lambda, you won't be able to keep the type around. Maybe you don't wan=
t to
>>>> specify the function signature and so std::function is not appropriate=
..
>>>>
>>>> 2017-03-03 12:44 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>>>
>>>> On Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrot=
e:
>>>>
>>>> Show us the actual (i.e. complete) example of why that be useful (and
>>>> why you wouldn't just use `std::function<void ()>`, or the somewhat
>>>> proposed function_ref, for that).
>>>>
>>>> On Fri, Mar 3, 2017 at 12:10 PM janezz55 . <jane...@gmail.com> wrote:
>>>>
>>>> Let's say you store a lambda object into std::any
>>>>
>>>> std::any a =3D [](){};
>>>>
>>>> How are you going to obtain the lambda object back? AFAIK it's locked
>>>> inside the any instance. If std::any had a mechanism of invoking the s=
tored
>>>> object you could still "reach" it.
>>>>
>>>>
>>>> any_cast. You have to keep the lambda type around of course. If you
>>>> don't want to, wrap the lambda in a std::function first before putting=
 it
>>>> in an std::any.
>>>>
>>>>
>>>>
>>>> 2017-03-03 11:15 GMT+01:00 janezz55 . <jane...@gmail.com>:
>>>>
>>>> I already wrote what I needed :) function<any(std::vector<any>)> is
>>>> simply blasphemous.
>>>>
>>>> 2017-03-03 11:09 GMT+01:00 Giovanni Piero Deretta <gpde...@gmail.com>:
>>>>
>>>> On Thursday, March 2, 2017 at 6:26:01 PM UTC, jane...@gmail.com wrote:
>>>>
>>>> I believe that std::any should be made invokable, if an invokable
>>>> object is stored into it, such as a function pointer, method pointer, =
or a
>>>> functor (such as std::function<> and others). This would raise the lev=
el of
>>>> abstraction C++ offers to one comparable to scripting languages, where=
 you
>>>> can often invoke an arbitrary variable. I've prepared 2 examples:
>>>>
>>>>
>>>> Any is a polymorphic wrapper for any object modeling the
>>>> CopyConstructible concept. Anything beyond that is out of scope. In fa=
ct
>>>> any doesn't even provide equality or ordering, which would seem very b=
asic.
>>>>
>>>> What you want is std::function (another polymorphic wrapper for types
>>>> modeling the FunctionObject concept) . If you want fully dynamic behav=
ior
>>>> (including runtime type checking of parameters), use
>>>> function<any(std::vector<any>)> and wrap the stored function in an
>>>> adaptor that does the unboxing of the parameters.
>>>>
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "ISO C++ Standard - Future Proposals" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to std-proposal...@isocpp.org.
>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>> To view this discussion on the web visit https://groups.google.com/a/i=
s
>>>> ocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaY
>>>> up5XegKF253kwet6TFZBjg%40mail.gmail.com
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE=
2GR1GQRos5BCUJzLi5yaYup5XegKF253kwet6TFZBjg%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>>>> .
>>>>
>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> std-proposal...@isocpp.org.
>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>> To view this discussion on the web visit https://groups.google.com/a/i=
s
>>>> ocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57
>>>> 123f68e%40isocpp.org
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/a6013d8d=
-73a6-4f40-bbc9-77e57123f68e%40isocpp.org?utm_medium=3Demail&utm_source=3Df=
ooter>
>>>> .
>>>>
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "ISO C++ Standard - Future Proposals" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to std-proposal...@isocpp.org.
>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>> To view this discussion on the web visit https://groups.google.com/a/i=
s
>>>> ocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoW
>>>> cBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE=
Ds%2BmqoyCxakK0v-hKoWcBYJE%2B9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>>>> .
>>>>
>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>>>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> std-proposal...@isocpp.org.
>>>> To post to this group, send email to std-pr...@isocpp.org.
>>>>
>>>> To view this discussion on the web visit https://groups.google.com/a/i=
s
>>>> ocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6
>>>> WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com
>>>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdS=
FV30P%3DdEQoooHcn05s6WqBiaV4XpyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>>>> .
>>>>
>>>>
>>>> ...

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GHg_ZgJO0oX1uQXKPqxy85rv-V59gGp%3DbfQ03-4K=
X_3kQ%40mail.gmail.com.

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

<div dir=3D"auto">True. I guess I need to start writing the paper.</div><di=
v class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Mar 3, 2017 5:39 =
PM, &quot;&#39;Edward Catmur&#39; via ISO C++ Standard - Future Proposals&q=
uot; &lt;<a href=3D"mailto:std-proposals@isocpp.org">std-proposals@isocpp.o=
rg</a>&gt; wrote:<br type=3D"attribution"><blockquote class=3D"gmail_quote"=
 style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><d=
iv dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On Fri=
, Mar 3, 2017 at 3:38 PM, janezz55 . <span dir=3D"ltr">&lt;<a href=3D"mailt=
o:janezz55@gmail.com" target=3D"_blank">janezz55@gmail.com</a>&gt;</span> w=
rote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Additional costs a=
re an additional function pointer (or virtual function, whichever the imple=
menter prefers) and another type_id. As a std::any may contain storage for =
&quot;small object optimization&quot;, this might not be significant.</div>=
</blockquote><div><br></div><div>It&#39;s less than that; the invoker and f=
unction typeid are the same for any particular contained type, so they can =
be maintained statically and accessed via the vtable equivalent. For exampl=
e, in the <a href=3D"https://github.com/gcc-mirror/gcc/blob/master/libstdc%=
2B%2B-v3/include/std/any#L357" target=3D"_blank">libstdc++ implementation</=
a> one would need to add ops _Op_get_function_type_info and _Op_invoke_func=
tion. That&#39;s zero space increase, zero time increase, only a small code=
 increase, and fully ABI compatible in both directions. Realistically, that=
 should count as zero-cost.</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 class=3D"gmail_extra"><div class=3D"gmail_quote">2017-03-03 16:3=
1 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a href=3D"mailto:gr=
iwes@griwes.info" target=3D"_blank">griwes@griwes.info</a>&gt;</span>:<br><=
blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px=
 #ccc solid;padding-left:1ex"><div dir=3D"ltr">Yes; my point is you&#39;re =
asking for an ability to throw away more of it, <i>with an additional cost =
for everyone who doesn&#39;t use this </i>(which is pretty directly against=
 what C++ stands for). I&#39;m pretty confident that this is not the right =
direction.<div><br></div><div>Go on, write a paper. We&#39;ll see whose opi=
nion the LEWG favors more.</div></div><br><div class=3D"gmail_quote"><div d=
ir=3D"ltr">On Fri, Mar 3, 2017 at 4:27 PM janezz55 . &lt;<a href=3D"mailto:=
janezz55@gmail.com" target=3D"_blank">janezz55@gmail.com</a>&gt; wrote:<br>=
</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_6445683285=
64265477m_4947371706181986074m_4180823617425430101gmail_msg">Michal: You th=
row away compile-time type safety every time you use a std::any, this was t=
he case all the way back to 2001.</div><div class=3D"gmail_extra m_64456832=
8564265477m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D=
"m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><=
div class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_4180823=
617425430101gmail_msg"></div></div><div class=3D"gmail_extra m_644568328564=
265477m_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"gm=
ail_quote m_644568328564265477m_4947371706181986074m_4180823617425430101gma=
il_msg">2017-03-03 16:18 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" c=
lass=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101gmail=
_msg">&lt;<a href=3D"mailto:griwes@griwes.info" class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">gr=
iwes@griwes.info</a>&gt;</span>:<br class=3D"m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg"></div></div><div class=3D"gmail_=
extra m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_m=
sg"><div class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_41=
80823617425430101gmail_msg"><blockquote class=3D"gmail_quote m_644568328564=
265477m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" cl=
ass=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_=
msg">Sorry; my last message should&#39;ve read &quot;I want to throw away c=
ompile-time type safety [...]&quot;.</div><br class=3D"m_644568328564265477=
m_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_qu=
ote m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg=
"><div dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_4180=
823617425430101gmail_msg">On Fri, Mar 3, 2017 at 4:11 PM janezz55 . &lt;<a =
href=3D"mailto:janezz55@gmail.com" class=3D"m_644568328564265477m_494737170=
6181986074m_4180823617425430101gmail_msg" target=3D"_blank">janezz55@gmail.=
com</a>&gt; wrote:<br class=3D"m_644568328564265477m_4947371706181986074m_4=
180823617425430101gmail_msg"></div><blockquote class=3D"gmail_quote m_64456=
8328564265477m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"=
margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"=
ltr" class=3D"m_644568328564265477m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_=
4947371706181986074m_4180823617425430101gmail_msg">Michal: You haven&#39;t =
read the code, there is a type_id. Types are checked.</div><div class=3D"gm=
ail_extra m_644568328564265477m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947=
371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_6445683285642=
65477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236=
17425430101gmail_msg"><div class=3D"gmail_quote m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101g=
mail_msg"></div></div><div class=3D"gmail_extra m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101g=
mail_msg"><div class=3D"gmail_quote m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">20=
17-03-03 16:09 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg">&lt;<a href=3D"mailto:griwes@griwes.info=
" class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">griwes@gr=
iwes.info</a>&gt;</span>:<br class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">=
</div></div><div class=3D"gmail_extra m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">=
<div class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832=
8564265477m_4947371706181986074m_4180823617425430101gmail_msg"><blockquote =
class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285642=
65477m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" cla=
ss=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg">So your use-case that&#39;s supp=
osed to convince the committee is &quot;I want to throw away type safety fo=
r my thing, help me with doing that&quot;?</div><br class=3D"m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823=
617425430101gmail_msg"><div class=3D"gmail_quote m_644568328564265477m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101=
gmail_msg"><div dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg=
 m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">O=
n Fri, Mar 3, 2017 at 4:04 PM janezz55 . &lt;<a href=3D"mailto:janezz55@gma=
il.com" class=3D"m_644568328564265477m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426547=
7m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">jan=
ezz55@gmail.com</a>&gt; wrote:<br class=3D"m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_=
msg"></div><blockquote class=3D"gmail_quote m_644568328564265477m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gm=
ail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail=
_msg" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1e=
x"><div dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">Ed=
ward: Thanks for the suggestions. I didn&#39;t presume to think my implemen=
tation was definitive. It is the closest we can get in C++ to what the scri=
pting languages have, without sacrificing too much, in my opinion. The conv=
ersions you mention could be done, but only at the price of significant ove=
rhead. Plain std::any does not support conversions when casting either. If =
I wrote my own any, I&#39;d definitely move everything I could into the vta=
ble of the holder, as you suggest. The any_function implementation is just =
an example, an idea that occurred to me only gradually.<div class=3D"m_6445=
68328564265477m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101gmail_msg"><br class=3D"m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617=
425430101gmail_msg"></div><div class=3D"m_644568328564265477m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gm=
ail_msg">I don&#39;t want the user specify the return type, because this is=
 not traditionally std::any-like. You can store almost anything into a std:=
:any instance, but you don&#39;t need to specify anything, there are no tem=
plate instantiations needed. Only when casting, do you need those.</div><di=
v class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717061819=
86074m_4180823617425430101gmail_msg"></div><div class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101gmail_msg">I like your invoke() idea. If something like that=
 were implemented, I&#39;d be perfectly pleased with it, but really, why no=
t have a operator() as well? It seems prettier to me, scripting language li=
ke. We can invoke a variable, just like in a scripting language.<br class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg"><div class=3D"m_64456832856=
4265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m=
_4180823617425430101gmail_msg"><br class=3D"m_644568328564265477m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254301=
01gmail_msg"></div><div class=3D"m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg=
">Michal: I&#39;m using this as part of my signal/slot implementation. I do=
n&#39;t want to specify function signatures of my slots, that&#39;s the onl=
y reason why I use this. The slots usually don&#39;t have many arguments as=
 you want signal handling to be fast , also conversions cost time so you do=
n&#39;t really want them, the single signature problem is not much of a pro=
blem. Take a look:</div><div class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmai=
l_msg"><br class=3D"m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683=
28564265477m_4947371706181986074m_4180823617425430101gmail_msg"></div><div =
class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477=
m_4947371706181986074m_4180823617425430101gmail_msg"><a href=3D"https://git=
hub.com/user1095108/crl" class=3D"m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_ms=
g" target=3D"_blank">https://github.com/user1095108<wbr>/crl</a><br class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg"></div></div></div><div dir=
=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D=
"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737=
1706181986074m_4180823617425430101gmail_msg"><div class=3D"m_64456832856426=
5477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101gmail_msg"><div class=3D"gmail_extra m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823=
617425430101gmail_msg"><br class=3D"m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_=
msg"><div class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">=
2017-03-03 15:22 GMT+01:00 Edward Catmur <span dir=3D"ltr" class=3D"m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717061819=
86074m_4180823617425430101gmail_msg">&lt;<a href=3D"mailto:ed@catmur.co.uk"=
 class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426547=
7m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">ed@=
catmur.co.uk</a>&gt;</span>:<br class=3D"m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101g=
mail_msg"><blockquote class=3D"gmail_quote m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543010=
1gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823=
617425430101gmail_msg"><span class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64=
4568328564265477m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101gmail_msg">On Friday, 3 March 2017 14:05:46 UTC, jane=
zz55 .  wrote:<blockquote class=3D"gmail_quote m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb=
(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_644568328564265=
477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456832=
8564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_418=
0823617425430101gmail_msg">When you open your browser the use cases are sho=
wing in front of your eyes, JavaScript programs storing functions in a vari=
able. Python, lua and countless other scripts doing the same. I can&#39;t b=
elieve you haven&#39;t seen any of this in practice.</div></blockquote><div=
 class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426547=
7m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_644568=
328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618198=
6074m_4180823617425430101gmail_msg"></div></span><div class=3D"m_6445683285=
64265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101gmail_msg">It works in scripting languages because the=
y have a rich base type (have you looked at the size of the PyObject vtable=
?) that erases all the operations the language syntax allows on an object. =
We don&#39;t have that in C++ because of overhead and because it&#39;s inco=
mpatible with a Turing-complete compile time type system.</div><div class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_=
4180823617425430101gmail_msg"></div><div class=3D"m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101gmail_msg"><div class=3D"m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg=
">Your proposed facility:</div><div class=3D"m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430=
101gmail_msg"><br class=3D"m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"></di=
v><div class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856=
4265477m_4947371706181986074m_4180823617425430101gmail_msg">* Requires the =
target type to have exactly 1 call signature, so it won&#39;t work with mul=
ti-callables, overload combiners, or polymorphic or variadic function objec=
ts, esp. closure types.</div><div class=3D"m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543010=
1gmail_msg">* Requires the caller to supply exactly the arguments correspon=
ding to the signature of the target type (otherwise UB, assert or throw). S=
o no arithmetic conversions, cvr conversions or implicit conversions. That&=
#39;s a recipe for frustration.</div><div class=3D"m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617=
425430101gmail_msg">* Asymmetry between argument and return types; why not =
require the user to specify the return type?</div><div class=3D"m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64=
4568328564265477m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101gmail_msg">* Overhead: one extra function pointer plu=
s one extra typeid (for the signature type, if extant) per any instance.</d=
iv></div><div class=3D"m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><br clas=
s=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416579=
28gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49=
47371706181986074m_4180823617425430101gmail_msg"></div><div class=3D"m_6445=
68328564265477m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101gmail_msg">Now some constructive suggestions:</d=
iv><div class=3D"m_644568328564265477m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285=
64265477m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg"></div><div class=3D"m_6445683285=
64265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101gmail_msg">* The overhead is a defect of your implemen=
tation; you can move those members into the vtable, at the cost of an extra=
 indirection.</div><div class=3D"m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg=
">* The return type could be provided by having your invoke member function=
 take the return type as the first template parameter, or preferably provid=
ing a non-member invoke. That would also allow supplying argument types exp=
licitly:</div><div class=3D"m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><br=
 class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8=
620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894=
1657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426547=
7m_4947371706181986074m_4180823617425430101gmail_msg"></div><div class=3D"m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg">auto a =3D any{[](std::string, u=
nsigned) { return true; }};</div><div class=3D"m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101gmail_msg">auto b =3D invoke&lt;bool, std::string, unsigned&gt;(a, &qu=
ot;meow&quot;, 1);</div><div class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmai=
l_msg"><br class=3D"m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683=
28564265477m_4947371706181986074m_4180823617425430101gmail_msg"></div><div =
class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477=
m_4947371706181986074m_4180823617425430101gmail_msg">Is that useful? I&#39;=
m not too sure, but at least it&#39;s clear what the facility can and canno=
t do. It still can&#39;t accept multi-signature callables.</div><div class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_=
4180823617425430101gmail_msg"></div><blockquote class=3D"gmail_quote m_6445=
68328564265477m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bor=
der-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717061819=
86074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_6445683285=
64265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101gmail_msg"><span class=3D"m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170=
6181986074m_4180823617425430101gmail_msg">2017-03-03 14:46 GMT+01:00 Micha=
=C5=82 Dominiak <span dir=3D"ltr" class=3D"m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543010=
1gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m=
_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430=
101gmail_msg">gri...@griwes.info</a>&gt;</span>:<br class=3D"m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_=
4180823617425430101gmail_msg"></span><blockquote class=3D"gmail_quote m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-62754=
72275488112246gmail- m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><div dir=
=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482=
639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101gmail_msg">You&#39;ve as=
ked for a feature, and yet you can&#39;t produce an example of how that fea=
ture would be useful. This is the rational argument: we don&#39;t need feat=
ures that don&#39;t have use cases.<div class=3D"m_644568328564265477m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456832856426547=
7m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742=
5430101gmail_msg"><br class=3D"m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">=
</div><div class=3D"m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683=
28564265477m_4947371706181986074m_4180823617425430101gmail_msg">Do show us =
examples of how this is useful and we might reconsider this feature. Plain =
and simple like that. Throwing logical fallacies around won&#39;t change it=
..</div></div><br class=3D"m_644568328564265477m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6=
44568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"></spa=
n><div class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><sp=
an class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928m_-6275472275488112246gmail- m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmai=
l_msg"><div class=3D"m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><div class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg">On Fri, Mar 3, 2017 at 2:31 PM j=
anezz55 . &lt;<a rel=3D"nofollow" class=3D"m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543010=
1gmail_msg">jane...@gmail.com</a>&gt; wrote:<br class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101gmail_msg"></div></div></div></span><blockquote class=3D"gma=
il_quote m_644568328564265477m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477=
m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div c=
lass=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg"><span class=3D"m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail-=
 m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737=
1706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" class=3D"m_64=
4568328564265477m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_m=
sg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576=
24651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717061=
81986074m_4180823617425430101gmail_msg">We don&#39;t need C++, ASM is suffi=
cient, or an arbitrary other computer language. 640k were sufficient at som=
e point in time. I haven&#39;t heard a single rational argument from you. I=
&#39;d hate to have you as a boss.</div><div class=3D"m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823=
617425430101gmail_msg"><br class=3D"m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_=
msg"><div class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">=
</div></div></span><span class=3D"m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928m_-6275472275488112246gmail- m_6445683285642=
65477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101gmail_msg"><div class=3D"m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9=
039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543010=
1gmail_msg"><div class=3D"gmail_quote m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmai=
l_msg">2017-03-03 14:25 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr" cl=
ass=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_=
4947371706181986074m_4180823617425430101gmail_msg">&lt;<a rel=3D"nofollow" =
class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941=
657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477=
m_4947371706181986074m_4180823617425430101gmail_msg">gri...@griwes.info</a>=
&gt;</span>:<br class=3D"m_644568328564265477m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64=
4568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"></div>=
</div></span><div class=3D"m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><div=
 class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><blockquo=
te class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><span class=3D"m_644568328564265477m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928m_-6275472275488112246gmail- m_644568328564265477m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456832856426=
5477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101gmail_msg"><div dir=3D"ltr" class=3D"m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101gmail_msg">You&#39;re proposing a feature for the sake of having a fea=
ture. Give us actual use cases if you think that is not true.<div class=3D"=
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101gmail_msg"><br class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101gmail_msg"></div><div class=3D"m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543=
0101gmail_msg">Having a feature that no-one will use is not beneficial.</di=
v></div><br class=3D"m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101gmail_msg"></span><di=
v class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><span cl=
ass=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928m_-6275472275488112246gmail- m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101193=
75693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_=
msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg=
"><div dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">On =
Fri, Mar 3, 2017 at 12:59 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170=
6181986074m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt; wrote:<=
br class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101gmail_msg"></div></span><block=
quote class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex"><span class=3D"m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928m_-6275472275488112246gmail- m_644568328564265477m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683285642=
65477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236=
17425430101gmail_msg"><div dir=3D"ltr" class=3D"m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101gmail_msg">As for me being a type ducking proponent... std::any in va=
rious forms has been around since 2001, I think. All the while until now yo=
u could assign a function pointer or a member function pointer to it as wel=
l as copyable function objects. It&#39;s nothing new. Adding the invocation=
 feature would simply be a natural development in my opinion.</div></span><=
div class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426=
5477m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_64456832=
8564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_=
1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_6=
44568328564265477m_4947371706181986074m_4180823617425430101m_86208576246514=
09115m_1425532395565240008gmail_msg m_644568328564265477m_49473717061819860=
74m_4180823617425430101gmail_msg"><span class=3D"m_644568328564265477m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928m_-6275472275488112246gmail- =
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101gmail_msg">2017-03-03 12:47 GMT+01:00 jane=
zz55 . <span dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_ms=
g">&lt;<a rel=3D"nofollow" class=3D"m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706=
181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_=
msg">jane...@gmail.com</a>&gt;</span>:<br class=3D"m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617=
425430101gmail_msg"></span><blockquote class=3D"gmail_quote m_6445683285642=
65477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex"><span class=3D"m_6445683285642=
65477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928m_-627547227548811=
2246gmail- m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101gmail_msg"><div dir=3D"ltr" cla=
ss=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4=
947371706181986074m_4180823617425430101gmail_msg">What you describe are wor=
karounds. If you want to use a temporary lambda, you won&#39;t be able to k=
eep the type around. Maybe you don&#39;t want to specify the function signa=
ture and so std::function is not appropriate.</div></span><div class=3D"m_6=
44568328564265477m_4947371706181986074m_4180823617425430101m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706=
181986074m_4180823617425430101gmail_msg"><div class=3D"m_644568328564265477=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456832856=
4265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_418082=
3617425430101gmail_msg"><div class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmai=
l_msg"><br class=3D"m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683=
28564265477m_4947371706181986074m_4180823617425430101gmail_msg"><div class=
=3D"gmail_quote m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856=
4265477m_4947371706181986074m_4180823617425430101gmail_msg"><span class=3D"=
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-=
6275472275488112246gmail- m_644568328564265477m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6=
44568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">2017-=
03-03 12:44 GMT+01:00 Giovanni Piero Deretta <span dir=3D"ltr" class=3D"m_6=
44568328564265477m_4947371706181986074m_4180823617425430101m_86208576246514=
09115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_=
msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706=
181986074m_4180823617425430101gmail_msg">&lt;<a rel=3D"nofollow" class=3D"m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg">gpde...@gmail.com</a>&gt;</span>=
:<br class=3D"m_644568328564265477m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285642=
65477m_4947371706181986074m_4180823617425430101gmail_msg"></span><blockquot=
e class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101gmail_msg" style=3D=
"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-le=
ft:1ex"><span class=3D"m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928m_-6275472275488112246gmail- m_644568328564265477m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456832856426547=
7m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239=
5565240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742=
5430101gmail_msg"><div dir=3D"ltr" class=3D"m_644568328564265477m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254301=
01gmail_msg"><span class=3D"m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">On =
Friday, March 3, 2017 at 11:13:02 AM UTC, Micha=C5=82 Dominiak wrote:</span=
><blockquote class=3D"gmail_quote m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_ms=
g" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex"><span class=3D"m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_ms=
g"><div dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">Sh=
ow us the actual (i.e. complete) example of why that be useful (and why you=
 wouldn&#39;t just use `std::function&lt;void ()&gt;`, or the somewhat prop=
osed function_ref, for that).</div><br class=3D"m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101gmail_msg"></span><span class=3D"m_644568328564265477m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gma=
il_msg"><div class=3D"gmail_quote m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_ms=
g"><div dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">On=
 Fri, Mar 3, 2017 at 12:10 PM janezz55 . &lt;<a rel=3D"nofollow" class=3D"m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg">jane...@gmail.com</a>&gt; wrote:=
<br class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426=
5477m_4947371706181986074m_4180823617425430101gmail_msg"></div><blockquote =
class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"m=
argin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left=
:1ex"><div dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"=
>Let&#39;s say you store a lambda object into std::any<div class=3D"m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717061819=
86074m_4180823617425430101gmail_msg"><br class=3D"m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101gmail_msg"></div><div class=3D"m_644568328564265477m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gma=
il_msg">std::any a =3D [](){};</div><div class=3D"m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101gmail_msg"><br class=3D"m_644568328564265477m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011937=
5693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_m=
sg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"=
></div><div class=3D"m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7=
482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101gmail_msg">How are yo=
u going to obtain the lambda object back? AFAIK it&#39;s locked inside the =
any instance. If std::any had a mechanism of invoking the stored object you=
 could still &quot;reach&quot; it.</div></div></blockquote></div></span></b=
lockquote><div class=3D"m_644568328564265477m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><br cla=
ss=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4=
947371706181986074m_4180823617425430101gmail_msg">any_cast. You have to kee=
p the lambda type around of course. If you don&#39;t want to, wrap the lamb=
da in a std::function first before putting it in an std::any.<br class=3D"m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg">=C2=A0</div><blockquote class=3D=
"gmail_quote m_644568328564265477m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426=
5477m_4947371706181986074m_4180823617425430101gmail_msg" style=3D"margin:0p=
x 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><d=
iv class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><blockq=
uote class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6=
44568328564265477m_4947371706181986074m_4180823617425430101gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><div class=3D"m_644568328564265477m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_=
4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64=
4568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><br cl=
ass=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165=
7928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_=
4947371706181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quot=
e m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928g=
mail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86=
20857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473=
71706181986074m_4180823617425430101gmail_msg"><span class=3D"m_644568328564=
265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425=
532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_=
4180823617425430101gmail_msg">2017-03-03 11:15 GMT+01:00 janezz55 . <span d=
ir=3D"ltr" class=3D"m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74=
82639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683=
28564265477m_4947371706181986074m_4180823617425430101gmail_msg">&lt;<a rel=
=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101gmail_msg">jane...@=
gmail.com</a>&gt;</span>:<br class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008g=
mail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmai=
l_msg"></span><blockquote class=3D"gmail_quote m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb=
(204,204,204);padding-left:1ex"><span class=3D"m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323955=
65240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101gmail_msg"><div dir=3D"ltr" class=3D"m_644568328564265477m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101=
gmail_msg">I already wrote what I needed :) function&lt;any(std::vector&lt;=
any&gt;)<wbr>&gt; is simply blasphemous.</div></span><span class=3D"m_64456=
8328564265477m_4947371706181986074m_4180823617425430101m_862085762465140911=
5m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717061819=
86074m_4180823617425430101gmail_msg"><div class=3D"m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617=
425430101gmail_msg"><div class=3D"m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_ms=
g"><div class=3D"m_644568328564265477m_4947371706181986074m_418082361742543=
0101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826=
39618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285=
64265477m_4947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m_6445=
68328564265477m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg=
 m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181=
986074m_4180823617425430101gmail_msg">2017-03-03 11:09 GMT+01:00 Giovanni P=
iero Deretta <span dir=3D"ltr" class=3D"m_644568328564265477m_4947371706181=
986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039=
410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737=
1706181986074m_4180823617425430101m_8620857624651409115m_142553239556524000=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gm=
ail_msg">&lt;<a rel=3D"nofollow" class=3D"m_644568328564265477m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90=
39410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947=
371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240=
008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101=
gmail_msg">gpde...@gmail.com</a>&gt;</span>:<br class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101gmail_msg"><blockquote class=3D"gmail_quote m_64456832856426=
5477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1=
px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762=
4651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618=
1986074m_4180823617425430101gmail_msg">On Thursday, March 2, 2017 at 6:26:0=
1 PM UTC, <a class=3D"m_644568328564265477m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101gmail_msg">jane...@g=
mail.com</a> wrote:<blockquote class=3D"gmail_quote m_644568328564265477m_4=
947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395565=
240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64456832856426=
5477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142553=
2395565240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101gmail_msg" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr" class=3D"m_6445683285=
64265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101gmail_msg">I believe that std::any should be made invo=
kable, if an invokable object is stored into it, such as a function pointer=
, method pointer, or a functor (such as std::function&lt;&gt; and others). =
This would raise the level of abstraction C++ offers to one comparable to s=
cripting languages, where you can often invoke an arbitrary variable. I&#39=
;ve prepared 2 examples:</div></blockquote><div class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101gmail_msg"><br class=3D"m_644568328564265477m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gma=
il_msg">Any is a polymorphic wrapper for any object modeling the CopyConstr=
uctible concept. Anything beyond that is out of scope. In fact any doesn&#3=
9;t even provide equality or ordering, which would seem very basic. <br cla=
ss=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657=
928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4=
947371706181986074m_4180823617425430101gmail_msg"><br class=3D"m_6445683285=
64265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101gmail_msg">What you want is std::function (another pol=
ymorphic wrapper for types modeling the FunctionObject concept) . If you wa=
nt fully dynamic behavior (including runtime type checking of parameters), =
use function&lt;any(std::vector&lt;any&gt;)<wbr>&gt; and wrap the stored fu=
nction in an adaptor that does the unboxing of the parameters.<br class=3D"=
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101gmail_msg"></div></div></blockquote></div>=
<br class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101=
m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263961=
8941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361742=
5430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856426=
5477m_4947371706181986074m_4180823617425430101gmail_msg"></div>
</div></div></span></blockquote></div><br class=3D"m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617=
425430101gmail_msg"></div><span class=3D"m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101g=
mail_msg">

<p class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856=
4265477m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg"></span>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gm=
ail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail=
_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.<span class=3D"=
m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208576246=
51409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gma=
il_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620=
857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101gmail_msg"><br class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180=
823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE2GR1GQRos5BCUJzLi5yaYup5XegKF=
253kwet6TFZBjg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 rel=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg" targ=
et=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-propo=
sals<wbr>/CAO9E8GE2GR1GQRos5BCUJzLi5yaY<wbr>up5XegKF253kwet6TFZBjg%40mail.<=
wbr>gmail.com</a>.<br class=3D"m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">
</span></blockquote></div>
</blockquote></div></span><span class=3D"m_644568328564265477m_494737170618=
1986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903=
9410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101g=
mail_msg"><span class=3D"m_644568328564265477m_4947371706181986074m_4180823=
617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614=
m_-7482639618941657928m_-6275472275488112246gmail- m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532=
395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617=
425430101gmail_msg">

<p class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856=
4265477m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">ht=
tps://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<wbr>/cJD8ur=
BWN7c/unsubscribe</a>.<br class=3D"m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_m=
sg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101gmail_msg">std-prop=
osal...@isocpp.org</a>.<span class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64=
4568328564265477m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101gmail_msg"><br class=3D"m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543=
0101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170=
6181986074m_4180823617425430101gmail_msg"></span></span><span class=3D"m_64=
4568328564265477m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008m_9039410119375693614m_-7482639618941657928m_-6275=
472275488112246gmail- m_644568328564265477m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/a6013d8d-73a6-4f40-bbc9-77e57123f68e%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" rel=3D"nofollow" c=
lass=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">https=
://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/a6013d8d-=
73a6-4f40-bbc9-77e57<wbr>123f68e%40isocpp.org</a>.<br class=3D"m_6445683285=
64265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409=
115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101gmail_msg">
</span></blockquote></div><br class=3D"m_644568328564265477m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gma=
il_msg"></div><span class=3D"m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><f=
ont color=3D"#888888" class=3D"m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">
</font></span></div></div></blockquote></div><span class=3D"m_6445683285642=
65477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101gmail_msg"><font color=3D"#888888" class=3D"m_64456832856=
4265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m=
_4180823617425430101gmail_msg"><br class=3D"m_644568328564265477m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_=
9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49=
47371706181986074m_4180823617425430101m_8620857624651409115m_14255323955652=
40008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254301=
01gmail_msg"></font></span></div><span class=3D"m_644568328564265477m_49473=
71706181986074m_4180823617425430101m_8620857624651409115m_14255323955652400=
08m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477=
m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1425532395=
565240008gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101gmail_msg"><font color=3D"#888888" class=3D"m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101gmail_msg"><span class=3D"m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119=
375693614m_-7482639618941657928m_-6275472275488112246gmail- m_6445683285642=
65477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255=
32395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_644568=
328564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115=
m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101gmail_msg">

<p class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856=
4265477m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg"></span><span class=3D"m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008m_9039410119375693614m_-7482639618941657928m_-627547227548811224=
6gmail- m_644568328564265477m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189416=
57928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m=
_4947371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a rel=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986=
074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_9039410=
119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170=
6181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gm=
ail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail=
_msg">std-proposal...@isocpp.org</a>.<br class=3D"m_644568328564265477m_494=
7371706181986074m_4180823617425430101m_8620857624651409115m_142553239556524=
0008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14255323=
95565240008gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170=
6181986074m_4180823617425430101gmail_msg"></span><span class=3D"m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928m_-62754722754=
88112246gmail- m_644568328564265477m_4947371706181986074m_41808236174254301=
01m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639=
618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564=
265477m_4947371706181986074m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEDs%2BmqoyCxakK0v-hKoWcBYJE%2B=
9rdXuNUyGMTRwqPFAw%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" rel=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375=
693614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_ms=
g m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg" =
target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-p=
roposals<wbr>/CAO9E8GEDs%2BmqoyCxakK0v-hKoW<wbr>cBYJE%2B9rdXuNUyGMTRwqPFAw%=
<wbr>40mail.gmail.com</a>.<br class=3D"m_644568328564265477m_49473717061819=
86074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394=
10119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gma=
il_msg">
</span></font></span></blockquote></div></blockquote></div></div><div class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg"><div class=3D"gmail_quote m=
_644568328564265477m_4947371706181986074m_4180823617425430101m_862085762465=
1409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_86208=
57624651409115m_1425532395565240008gmail_msg m_644568328564265477m_49473717=
06181986074m_4180823617425430101gmail_msg"><blockquote class=3D"gmail_quote=
 m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737=
1706181986074m_4180823617425430101gmail_msg" style=3D"margin:0px 0px 0px 0.=
8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=3D=
"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624=
651409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gm=
ail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862=
0857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737=
1706181986074m_4180823617425430101gmail_msg"><font color=3D"#888888" class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg"><span class=3D"m_6445683285=
64265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_14=
25532395565240008m_9039410119375693614m_-7482639618941657928m_-627547227548=
8112246gmail- m_644568328564265477m_4947371706181986074m_418082361742543010=
1m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396=
18941657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174=
25430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285642=
65477m_4947371706181986074m_4180823617425430101gmail_msg">

<p class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m=
_8620857624651409115m_1425532395565240008m_9039410119375693614m_-7482639618=
941657928gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425=
430101m_8620857624651409115m_1425532395565240008gmail_msg m_644568328564265=
477m_4947371706181986074m_4180823617425430101gmail_msg"></p>

-- <br class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430=
101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-748263=
9618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456832856=
4265477m_4947371706181986074m_4180823617425430101gmail_msg">
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br class=
=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_8620857=
624651409115m_1425532395565240008m_9039410119375693614m_-748263961894165792=
8gmail_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494=
7371706181986074m_4180823617425430101gmail_msg">
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" class=3D"m_644568328564265477m_4947371706181986074m_4180823617425430101m_=
8620857624651409115m_1425532395565240008m_9039410119375693614m_-74826396189=
41657928gmail_msg m_644568328564265477m_4947371706181986074m_41808236174254=
30101m_8620857624651409115m_1425532395565240008gmail_msg m_6445683285642654=
77m_4947371706181986074m_4180823617425430101gmail_msg" target=3D"_blank">ht=
tps://groups.google.com/a/is<wbr>ocpp.org/d/topic/std-proposals<wbr>/cJD8ur=
BWN7c/unsubscribe</a>.<br class=3D"m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_m=
sg"></span>
To unsubscribe from this group and all its topics, send an email to <a rel=
=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986074m_418082361=
7425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_=
-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_41=
80823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101gmail_msg">std-prop=
osal...@isocpp.org</a>.<span class=3D"m_644568328564265477m_494737170618198=
6074m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941=
0119375693614m_-7482639618941657928m_-6275472275488112246gmail- m_644568328=
564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_1=
425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_64=
4568328564265477m_4947371706181986074m_4180823617425430101m_862085762465140=
9115m_1425532395565240008gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101gmail_msg"><br class=3D"m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543=
0101gmail_msg">
To post to this group, send email to <a rel=3D"nofollow" class=3D"m_6445683=
28564265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m=
_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986=
074m_4180823617425430101gmail_msg">std-pr...@isocpp.org</a>.<br class=3D"m_=
644568328564265477m_4947371706181986074m_4180823617425430101m_8620857624651=
409115m_1425532395565240008m_9039410119375693614m_-7482639618941657928gmail=
_msg m_644568328564265477m_4947371706181986074m_4180823617425430101m_862085=
7624651409115m_1425532395565240008gmail_msg m_644568328564265477m_494737170=
6181986074m_4180823617425430101gmail_msg"></span></font></span></blockquote=
></div></div><div class=3D"m_644568328564265477m_4947371706181986074m_41808=
23617425430101m_8620857624651409115m_1425532395565240008m_90394101193756936=
14m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074=
m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_=
644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><div=
 class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_4180823617=
425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m_-=
7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_64456=
8328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><blockquo=
te class=3D"gmail_quote m_644568328564265477m_4947371706181986074m_41808236=
17425430101m_8620857624651409115m_1425532395565240008m_9039410119375693614m=
_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m_4=
180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_644=
568328564265477m_4947371706181986074m_4180823617425430101gmail_msg" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><span class=3D"m_644568328564265477m_4947371706181986074m_418082=
3617425430101m_8620857624651409115m_1425532395565240008m_903941011937569361=
4m_-7482639618941657928gmail_msg m_644568328564265477m_4947371706181986074m=
_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m_6=
44568328564265477m_4947371706181986074m_4180823617425430101gmail_msg"><font=
 color=3D"#888888" class=3D"m_644568328564265477m_4947371706181986074m_4180=
823617425430101m_8620857624651409115m_1425532395565240008m_9039410119375693=
614m_-7482639618941657928gmail_msg m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg m=
_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAPCFJdSFV30P%3DdEQoooHcn05s6WqBiaV4X=
pyuQY4P3jLkM5Dqg%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" rel=3D"nofollow" class=3D"m_644568328564265477m_4947371706181986074m_418=
0823617425430101m_8620857624651409115m_1425532395565240008m_903941011937569=
3614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008gmail_msg =
m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_msg" ta=
rget=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-pro=
posals<wbr>/CAPCFJdSFV30P%3DdEQoooHcn05s6<wbr>WqBiaV4XpyuQY4P3jLkM5Dqg%40ma=
i<wbr>l.gmail.com</a>.<br class=3D"m_644568328564265477m_494737170618198607=
4m_4180823617425430101m_8620857624651409115m_1425532395565240008m_903941011=
9375693614m_-7482639618941657928gmail_msg m_644568328564265477m_49473717061=
81986074m_4180823617425430101m_8620857624651409115m_1425532395565240008gmai=
l_msg m_644568328564265477m_4947371706181986074m_4180823617425430101gmail_m=
sg">
</font></span></blockquote></div><br class=3D"m_644568328564265477m_4947371=
706181986074m_4180823617425430101m_8620857624651409115m_1425532395565240008=
m_9039410119375693614m_-7482639618941657928gmail_msg m_644568328564265477m_=
4947371706181986074m_4180823617425430101m_8620857624651409115m_142553239556=
5240008gmail_msg m_644568328564265477m_4947371706181986074m_418082361742543=
0101gmail_msg"></div><span class=3D"m_644568328564265477m_49473717061819860=
74m_4180823617425430101m_8620857624651409115m_1425532395565240008m_90394101=
19375693614m_-7482639618941657928m_-6275472275488112246gmail- m_64456832856=
4265477m_4947371706181986074m_4180823617425430101m_8620857624651409115m_142=
5532395565240008m_9039410119375693614m_-7482639618941657928gmail_msg m_6445=
68328564265477m_4947371706181986074m_4180823617425430101m_86208576246514091=
15m_1425532395565240008gmail_msg m_644568328564265477m_4947371706181986074m=
_4180823617425430101gmail_msg"></span></div></div></blockquote></div></bloc=
kquote></div></div></blockquote></div></blockquote></div></div></div></div>=
</div></blockquote></div></blockquote></div></div></blockquote></div></bloc=
kquote></div></div></blockquote></div></blockquote></div></div></blockquote=
></div></div></div>...</blockquote></div></div>

<p></p>

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

--001a1144b3fa08b9210549d878c5--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Fri, 03 Mar 2017 21:07:51 -0800
Raw View
Em sexta-feira, 3 de mar=C3=A7o de 2017, =C3=A0s 06:05:42 PST, janezz55 . e=
screveu:
> When you open your browser the use cases are showing in front of your eye=
s,
> JavaScript programs storing functions in a variable. Python, lua and
> countless other scripts doing the same. I can't believe you haven't seen
> any of this in practice.

I thought we could do that in C++ already:

 auto f =3D [](){};

Of course, C++ is statically typed, so f has a static type. Python, Lua,=20
JavaScript and countless others aren't.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2487418.oG3QyHJK2q%40tjmaciei-mobl1.

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Fri, 03 Mar 2017 21:13:53 -0800
Raw View
Em sexta-feira, 3 de mar=C3=A7o de 2017, =C3=A0s 07:03:59 PST, janezz55 . e=
screveu:
> I like your invoke() idea. If something like that were implemented, I'd b=
e
> perfectly pleased with it, but really, why not have a operator() as well?

How do you pass the template parameters? Look again at the example that you=
=20
liked:

auto a =3D any{[](std::string, unsigned) { return true; }};
auto b =3D invoke<bool, std::string, unsigned>(a, "meow", 1);

At best, std::any could have a template member invoke, so you'd have:

auto b =3D a.invoke<bool, std::string, unsigned>("meow", 1);

Is that too different?

Given the Standard Library's API guidelines, it's highly unlikely to get th=
is=20
as a member, when a generic free function will do.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/22903876.VAPTxH79ix%40tjmaciei-mobl1.

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Mon, 13 Mar 2017 04:50:29 -0700 (PDT)
Raw View
------=_Part_2978_772621879.1489405829147
Content-Type: multipart/alternative;
 boundary="----=_Part_2979_1721236891.1489405829147"

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



=E5=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 UTC+=
8=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A
>
> On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:
>>
>> From my perspective, the user could easily ignore, that std::any is=20
>> invokable.
>>
>
> Can they? Can you provide an implementation of an invokable `any` which=
=20
> has the exact same overhead as a non-invokable one, so long as you don't=
=20
> actually use the invoking interface?
>
> I'm not saying you're wrong, but as someone who is not an expert on `any`=
=20
> implementations, I have my doubts about this statement.
>
> You can always achieve that by depressing performance of an ordinary `any=
`=20
implementation to match invokable one. It would not have effect on=20
conformance. Only QoI is concerned:)

I believe that adding a separate class, which would duplicate a lot of what=
=20
>> std::any does, would not reflect well on the STL.
>>
>
> It would duplicate some of the the internals of `any`. But being a=20
> different type woudl demonstrate a different semantic *meaning* to code.
>
> True. But `std::any` also does not have stable meaning of "any".
=20

> Let's rename `any` to `any_object`. Now let's talk about `any_object` in=
=20
> relation to what you want, which is `any_function`.
>
> What does `any_object` represent, semantically? It represents an implicit=
=20
> agreement between the writer of the function taking the `any` and the=20
> person providing the value. Both sides must agree on what type(s) that=20
> `any_object` will store, and if there is a disagreement or if one side do=
es=20
> the wrong thing, exceptions will fly.
>
> It is even not for "any object". As I have argued before, I have expect=
=20
the word "any" being short for "any first-class object type" (i.e.=20
cv-unqualified non-array object type), but `std::any` has additional=20
refinement of CopyConstructible on the value type, so it is actually for=20
"any copyable cv-unqualified non-array object type" instead. This sounds=20
somewhat arbitrary, similar as "invokable".
=20

> What does your conceptual `any_function` represent, semantically? It=20
> represents, not the type-erasure of a value, but the type-erausre of a=20
> function call *signature*. And therefore, if you see a function that=20
> takes a parameter of type `any_function`, you *immediately* know that=20
> this function will call the given object.
>
> And therefore, the agreement between us is different. The agreement is no=
t=20
> that I will provide one or more implicitly-defined types that you will=20
> eventually `any_cast` to. The agreement is that I will provide objects th=
at=20
> can be called with one or more implicitly-defined function call signature=
s,=20
> that you will eventually call.
>
> If they represent different agreements, then they clearly should be=20
> different types. Even if 99% of the code implementation between them is=
=20
> identical, they still need to be separate. Because the code that takes an=
=20
> `any_function` does not *want* to perform `any_cast` on the value it=20
> takes. It will perform `any_call` instead. And vice-versa: code that take=
s=20
> `any_object` will not perform `any_call` on it.
>
> I wouldn't mind having this in the `<any>` header. But I don't like the=
=20
> idea of grafting such a substantially different use case into an existing=
=20
> object.
>
> Also, a pedantic note. "STL" does not mean "standard library."
>

--=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/35bb6d3d-da8c-4ecb-8bb8-eaa28d3f7ee9%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=
=9F=E6=9C=9F=E4=BA=94 UTC+8=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=
=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr">On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote=
:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">From my perspecti=
ve, the user could easily ignore, that std::any is invokable.</div></blockq=
uote><div><br>Can they? Can you provide an implementation of an invokable `=
any` which has the exact same overhead as a non-invokable one, so long as y=
ou don&#39;t actually use the invoking interface?<br><br>I&#39;m not saying=
 you&#39;re wrong, but as someone who is not an expert on `any` implementat=
ions, I have my doubts about this statement.<br><br></div></div></blockquot=
e><div>You can always achieve that by depressing performance of an ordinary=
 `any` implementation to match invokable one. It would not have effect on c=
onformance. Only QoI is concerned:)<br><br></div><blockquote class=3D"gmail=
_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;p=
adding-left: 1ex;"><div dir=3D"ltr"><div></div><blockquote class=3D"gmail_q=
uote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddin=
g-left:1ex"><div dir=3D"ltr">I believe that adding a separate class, which =
would duplicate a lot of what std::any does, would not reflect well on the =
STL.</div></blockquote><div><br>It would duplicate some of the the internal=
s of `any`. But being a different type woudl demonstrate a different semant=
ic <i>meaning</i> to code.<br><br></div></div></blockquote><div>True. But `=
std::any` also does not have stable meaning of &quot;any&quot;.<br>=C2=A0<b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0=
..8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div>=
Let&#39;s rename `any` to `any_object`. Now let&#39;s talk about `any_objec=
t` in relation to what you want, which is `any_function`.<br><br>What does =
`any_object` represent, semantically? It represents an implicit agreement b=
etween the writer of the function taking the `any` and the person providing=
 the value. Both sides must agree on what type(s) that `any_object` will st=
ore, and if there is a disagreement or if one side does the wrong thing, ex=
ceptions will fly.<br><br></div></div></blockquote><div>It is even not for =
&quot;any object&quot;. As I have argued before, I have expect=20
the word &quot;any&quot; being short for &quot;any first-class object type&=
quot; (i.e.=20
cv-unqualified non-array object type), but `std::any` has additional=20
refinement of CopyConstructible on the value type, so it is actually for
 &quot;any copyable cv-unqualified non-array object type&quot; instead. Thi=
s sounds somewhat arbitrary,=20
similar as &quot;invokable&quot;.<br>=C2=A0<br></div><blockquote class=3D"g=
mail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc sol=
id;padding-left: 1ex;"><div dir=3D"ltr"><div>What does your conceptual `any=
_function` represent, semantically? It represents, not the type-erasure of =
a value, but the type-erausre of a function call <i>signature</i>. And ther=
efore, if you see a function that takes a parameter of type `any_function`,=
 you <i>immediately</i> know that this function will call the given object.=
<br><br>And therefore, the agreement between us is different. The agreement=
 is not that I will provide one or more implicitly-defined types that you w=
ill eventually `any_cast` to. The agreement is that I will provide objects =
that can be called with one or more implicitly-defined function call signat=
ures, that you will eventually call.<br><br>If they represent different agr=
eements, then they clearly should be different types. Even if 99% of the co=
de implementation between them is identical, they still need to be separate=
.. Because the code that takes an `any_function` does not <i>want</i> to per=
form `any_cast` on the value it takes. It will perform `any_call` instead. =
And vice-versa: code that takes `any_object` will not perform `any_call` on=
 it.<br><br>I wouldn&#39;t mind having this in the `&lt;any&gt;` header. Bu=
t I don&#39;t like the idea of grafting such a substantially different use =
case into an existing object.<br><br>Also, a pedantic note. &quot;STL&quot;=
 does not mean &quot;standard library.&quot;<br></div></div></blockquote></=
div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/35bb6d3d-da8c-4ecb-8bb8-eaa28d3f7ee9%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/35bb6d3d-da8c-4ecb-8bb8-eaa28d3f7ee9=
%40isocpp.org</a>.<br />

------=_Part_2979_1721236891.1489405829147--

------=_Part_2978_772621879.1489405829147--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Mon, 13 Mar 2017 13:03:55 +0100
Raw View
--001a11449ffc7bef90054a9b81e7
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

> You can always achieve that by depressing performance of an ordinary
`any` implementation to match invokable one. It would not have effect on
conformance. Only QoI is concerned:)

I don't see how performance would be depressed. The moving/copying part
would obviously be the same, you can do:

void f(){}

std::any a(f);

today, and you could do it in 2001. So what remains is to add the invoking
part, either as std::invoke or as a member function. This does not affect
the performance of the existing std::any implementation in any way.



2017-03-13 12:50 GMT+01:00 FrankHB1989 <frankhb1989@gmail.com>:

>
>
> =E5=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 UT=
C+8=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A
>>
>> On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:
>>>
>>> From my perspective, the user could easily ignore, that std::any is
>>> invokable.
>>>
>>
>> Can they? Can you provide an implementation of an invokable `any` which
>> has the exact same overhead as a non-invokable one, so long as you don't
>> actually use the invoking interface?
>>
>> I'm not saying you're wrong, but as someone who is not an expert on `any=
`
>> implementations, I have my doubts about this statement.
>>
>> You can always achieve that by depressing performance of an ordinary
> `any` implementation to match invokable one. It would not have effect on
> conformance. Only QoI is concerned:)
>
> I believe that adding a separate class, which would duplicate a lot of
>>> what std::any does, would not reflect well on the STL.
>>>
>>
>> It would duplicate some of the the internals of `any`. But being a
>> different type woudl demonstrate a different semantic *meaning* to code.
>>
>> True. But `std::any` also does not have stable meaning of "any".
>
>
>> Let's rename `any` to `any_object`. Now let's talk about `any_object` in
>> relation to what you want, which is `any_function`.
>>
>> What does `any_object` represent, semantically? It represents an implici=
t
>> agreement between the writer of the function taking the `any` and the
>> person providing the value. Both sides must agree on what type(s) that
>> `any_object` will store, and if there is a disagreement or if one side d=
oes
>> the wrong thing, exceptions will fly.
>>
>> It is even not for "any object". As I have argued before, I have expect
> the word "any" being short for "any first-class object type" (i.e.
> cv-unqualified non-array object type), but `std::any` has additional
> refinement of CopyConstructible on the value type, so it is actually for
> "any copyable cv-unqualified non-array object type" instead. This sounds
> somewhat arbitrary, similar as "invokable".
>
>
>> What does your conceptual `any_function` represent, semantically? It
>> represents, not the type-erasure of a value, but the type-erausre of a
>> function call *signature*. And therefore, if you see a function that
>> takes a parameter of type `any_function`, you *immediately* know that
>> this function will call the given object.
>>
>> And therefore, the agreement between us is different. The agreement is
>> not that I will provide one or more implicitly-defined types that you wi=
ll
>> eventually `any_cast` to. The agreement is that I will provide objects t=
hat
>> can be called with one or more implicitly-defined function call signatur=
es,
>> that you will eventually call.
>>
>> If they represent different agreements, then they clearly should be
>> different types. Even if 99% of the code implementation between them is
>> identical, they still need to be separate. Because the code that takes a=
n
>> `any_function` does not *want* to perform `any_cast` on the value it
>> takes. It will perform `any_call` instead. And vice-versa: code that tak=
es
>> `any_object` will not perform `any_call` on it.
>>
>> I wouldn't mind having this in the `<any>` header. But I don't like the
>> idea of grafting such a substantially different use case into an existin=
g
>> object.
>>
>> Also, a pedantic note. "STL" does not mean "standard library."
>>
>

--=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/CAO9E8GFsi9E7t0dZrMT4DsdbqfR8Vz%2BnOLE%3DW2%3Du6=
KtWsQuTSQ%40mail.gmail.com.

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

<div dir=3D"ltr"><div>&gt; You can always achieve that by depressing perfor=
mance of an ordinary `any` implementation to match invokable one. It would =
not have effect on conformance. Only QoI is concerned:)</div><div><br></div=
><div>I don&#39;t see how performance would be depressed. The moving/copyin=
g part would obviously be the same, you can do:</div><div><br></div><div>vo=
id f(){}</div><div><br></div><div>std::any a(f);</div><div><br></div><div>t=
oday, and you could do it in 2001. So what remains is to add the invoking p=
art, either as std::invoke or as a member function. This does not affect th=
e performance of the existing std::any implementation in any way.</div><div=
><br></div><div><br></div></div><div class=3D"gmail_extra"><br><div class=
=3D"gmail_quote">2017-03-13 12:50 GMT+01:00 FrankHB1989 <span dir=3D"ltr">&=
lt;<a href=3D"mailto:frankhb1989@gmail.com" target=3D"_blank">frankhb1989@g=
mail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"marg=
in:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"=
><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=
=BA=94 UTC+8=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=
=EF=BC=9A<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 Thursd=
ay, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:<blockquote class=
=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc s=
olid;padding-left:1ex"><div dir=3D"ltr">From my perspective, the user could=
 easily ignore, that std::any is invokable.</div></blockquote><div><br>Can =
they? Can you provide an implementation of an invokable `any` which has the=
 exact same overhead as a non-invokable one, so long as you don&#39;t actua=
lly use the invoking interface?<br><br>I&#39;m not saying you&#39;re wrong,=
 but as someone who is not an expert on `any` implementations, I have my do=
ubts about this statement.<br><br></div></div></blockquote><div>You can alw=
ays achieve that by depressing performance of an ordinary `any` implementat=
ion to match invokable one. It would not have effect on conformance. Only Q=
oI is concerned:)<br><br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
 dir=3D"ltr"><div></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr">I believe that adding a separate class, which would duplicate a lot o=
f what std::any does, would not reflect well on the STL.</div></blockquote>=
<div><br>It would duplicate some of the the internals of `any`. But being a=
 different type woudl demonstrate a different semantic <i>meaning</i> to co=
de.<br><br></div></div></blockquote><div>True. But `std::any` also does not=
 have stable meaning of &quot;any&quot;.<br>=C2=A0<br></div><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><div dir=3D"ltr"><div>Let&#39;s rename `any` to `a=
ny_object`. Now let&#39;s talk about `any_object` in relation to what you w=
ant, which is `any_function`.<br><br>What does `any_object` represent, sema=
ntically? It represents an implicit agreement between the writer of the fun=
ction taking the `any` and the person providing the value. Both sides must =
agree on what type(s) that `any_object` will store, and if there is a disag=
reement or if one side does the wrong thing, exceptions will fly.<br><br></=
div></div></blockquote><div>It is even not for &quot;any object&quot;. As I=
 have argued before, I have expect=20
the word &quot;any&quot; being short for &quot;any first-class object type&=
quot; (i.e.=20
cv-unqualified non-array object type), but `std::any` has additional=20
refinement of CopyConstructible on the value type, so it is actually for
 &quot;any copyable cv-unqualified non-array object type&quot; instead. Thi=
s sounds somewhat arbitrary,=20
similar as &quot;invokable&quot;.<br>=C2=A0<br></div><blockquote class=3D"g=
mail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><div>What does your conceptual `any_func=
tion` represent, semantically? It represents, not the type-erasure of a val=
ue, but the type-erausre of a function call <i>signature</i>. And therefore=
, if you see a function that takes a parameter of type `any_function`, you =
<i>immediately</i> know that this function will call the given object.<br><=
br>And therefore, the agreement between us is different. The agreement is n=
ot that I will provide one or more implicitly-defined types that you will e=
ventually `any_cast` to. The agreement is that I will provide objects that =
can be called with one or more implicitly-defined function call signatures,=
 that you will eventually call.<br><br>If they represent different agreemen=
ts, then they clearly should be different types. Even if 99% of the code im=
plementation between them is identical, they still need to be separate. Bec=
ause the code that takes an `any_function` does not <i>want</i> to perform =
`any_cast` on the value it takes. It will perform `any_call` instead. And v=
ice-versa: code that takes `any_object` will not perform `any_call` on it.<=
br><br>I wouldn&#39;t mind having this in the `&lt;any&gt;` header. But I d=
on&#39;t like the idea of grafting such a substantially different use case =
into an existing object.<br><br>Also, a pedantic note. &quot;STL&quot; does=
 not mean &quot;standard library.&quot;<br></div></div></blockquote></div><=
/blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GFsi9E7t0dZrMT4DsdbqfR8Vz%2BnOL=
E%3DW2%3Du6KtWsQuTSQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFsi9=
E7t0dZrMT4DsdbqfR8Vz%2BnOLE%3DW2%3Du6KtWsQuTSQ%40mail.gmail.com</a>.<br />

--001a11449ffc7bef90054a9b81e7--

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Mon, 13 Mar 2017 05:18:41 -0700 (PDT)
Raw View
------=_Part_2923_2037453585.1489407521662
Content-Type: multipart/alternative;
 boundary="----=_Part_2924_1135485088.1489407521662"

------=_Part_2924_1135485088.1489407521662
Content-Type: text/plain; charset=UTF-8

The idea of piling new features onto `std::any` further flaws. If
`any::operator()` is acceptable, why not `any::operator++`,
`any::operator*`, etc? (Then everything is in a mess. And... for different
concepts with same signatures but different meanings, they may simply
clash.)

Note I do have such things
<https://github.com/FrankHB/YSLib/blob/master/YBase/include/ystdex/any_iterator.hpp#L227>.
The fact is I have to reinvent my own version of `any`
<https://github.com/FrankHB/YSLib/blob/master/YBase/include/ystdex/any.h#L870>,
because `std::any` exposes too few things can be reused. I want to see if
there can be some generic facilities to help users rolling out any `any_*`
quickly.

--
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/7884dd39-584d-44d5-8f73-74abf0bf2b2e%40isocpp.org.

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

<div dir=3D"ltr">The idea of piling new features onto `std::any` further fl=
aws. If `any::operator()` is acceptable, why not `any::operator++`, `any::o=
perator*`, etc? (Then everything is in a mess. And... for different concept=
s with same signatures but different meanings, they may simply clash.)<br><=
br>Note I do have <a href=3D"https://github.com/FrankHB/YSLib/blob/master/Y=
Base/include/ystdex/any_iterator.hpp#L227">such things</a>. The fact is I h=
ave to reinvent <a href=3D"https://github.com/FrankHB/YSLib/blob/master/YBa=
se/include/ystdex/any.h#L870">my own version of `any`</a>, because `std::an=
y` exposes too few things can be reused. I want to see if there can be some=
 generic facilities to help users rolling out any `any_*` quickly.<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/7884dd39-584d-44d5-8f73-74abf0bf2b2e%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/7884dd39-584d-44d5-8f73-74abf0bf2b2e=
%40isocpp.org</a>.<br />

------=_Part_2924_1135485088.1489407521662--

------=_Part_2923_2037453585.1489407521662--

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Mon, 13 Mar 2017 05:22:54 -0700 (PDT)
Raw View
------=_Part_2996_1625286849.1489407774650
Content-Type: multipart/alternative;
 boundary="----=_Part_2997_1034707050.1489407774650"

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



=E5=9C=A8 2017=E5=B9=B43=E6=9C=8813=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=80 UTC=
+8=E4=B8=8B=E5=8D=888:03:58=EF=BC=8Cjanezz55 .=E5=86=99=E9=81=93=EF=BC=9A
>
> > You can always achieve that by depressing performance of an ordinary=20
> `any` implementation to match invokable one. It would not have effect on=
=20
> conformance. Only QoI is concerned:)
>
> I don't see how performance would be depressed. The moving/copying part=
=20
> would obviously be the same, you can do:
>
> void f(){}
>
> std::any a(f);
>
> today, and you could do it in 2001. So what remains is to add the invokin=
g=20
> part, either as std::invoke or as a member function. This does not affect=
=20
> the performance of the existing std::any implementation in any way.
>
> Well, that's mostly joking. But seriously, if runtime type safety is not=
=20
totally thrown away, there would be a few size overhead on binary image,=20
for most typical implementations of the language.=20

>
>
> 2017-03-13 12:50 GMT+01:00 FrankHB1989 <frank...@gmail.com <javascript:>>=
:
>
>>
>>
>> =E5=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 U=
TC+8=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=
=9A
>>>
>>> On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:
>>>>
>>>> From my perspective, the user could easily ignore, that std::any is=20
>>>> invokable.
>>>>
>>>
>>> Can they? Can you provide an implementation of an invokable `any` which=
=20
>>> has the exact same overhead as a non-invokable one, so long as you don'=
t=20
>>> actually use the invoking interface?
>>>
>>> I'm not saying you're wrong, but as someone who is not an expert on=20
>>> `any` implementations, I have my doubts about this statement.
>>>
>>> You can always achieve that by depressing performance of an ordinary=20
>> `any` implementation to match invokable one. It would not have effect on=
=20
>> conformance. Only QoI is concerned:)
>>
>> I believe that adding a separate class, which would duplicate a lot of=
=20
>>>> what std::any does, would not reflect well on the STL.
>>>>
>>>
>>> It would duplicate some of the the internals of `any`. But being a=20
>>> different type woudl demonstrate a different semantic *meaning* to code=
..
>>>
>>> True. But `std::any` also does not have stable meaning of "any".
>> =20
>>
>>> Let's rename `any` to `any_object`. Now let's talk about `any_object` i=
n=20
>>> relation to what you want, which is `any_function`.
>>>
>>> What does `any_object` represent, semantically? It represents an=20
>>> implicit agreement between the writer of the function taking the `any` =
and=20
>>> the person providing the value. Both sides must agree on what type(s) t=
hat=20
>>> `any_object` will store, and if there is a disagreement or if one side =
does=20
>>> the wrong thing, exceptions will fly.
>>>
>>> It is even not for "any object". As I have argued before, I have expect=
=20
>> the word "any" being short for "any first-class object type" (i.e.=20
>> cv-unqualified non-array object type), but `std::any` has additional=20
>> refinement of CopyConstructible on the value type, so it is actually for=
=20
>> "any copyable cv-unqualified non-array object type" instead. This sounds=
=20
>> somewhat arbitrary, similar as "invokable".
>> =20
>>
>>> What does your conceptual `any_function` represent, semantically? It=20
>>> represents, not the type-erasure of a value, but the type-erausre of a=
=20
>>> function call *signature*. And therefore, if you see a function that=20
>>> takes a parameter of type `any_function`, you *immediately* know that=
=20
>>> this function will call the given object.
>>>
>>> And therefore, the agreement between us is different. The agreement is=
=20
>>> not that I will provide one or more implicitly-defined types that you w=
ill=20
>>> eventually `any_cast` to. The agreement is that I will provide objects =
that=20
>>> can be called with one or more implicitly-defined function call signatu=
res,=20
>>> that you will eventually call.
>>>
>>> If they represent different agreements, then they clearly should be=20
>>> different types. Even if 99% of the code implementation between them is=
=20
>>> identical, they still need to be separate. Because the code that takes =
an=20
>>> `any_function` does not *want* to perform `any_cast` on the value it=20
>>> takes. It will perform `any_call` instead. And vice-versa: code that ta=
kes=20
>>> `any_object` will not perform `any_call` on it.
>>>
>>> I wouldn't mind having this in the `<any>` header. But I don't like the=
=20
>>> idea of grafting such a substantially different use case into an existi=
ng=20
>>> object.
>>>
>>> Also, a pedantic note. "STL" does not mean "standard library."
>>>
>>
>

--=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/2b577b49-4244-4711-ac70-afd58dd47cf9%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=8813=E6=97=A5=E6=98=
=9F=E6=9C=9F=E4=B8=80 UTC+8=E4=B8=8B=E5=8D=888:03:58=EF=BC=8Cjanezz55 .=E5=
=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr"><div>&gt; You can always achieve that by depressing performance =
of an ordinary `any` implementation to match invokable one. It would not ha=
ve effect on conformance. Only QoI is concerned:)</div><div><br></div><div>=
I don&#39;t see how performance would be depressed. The moving/copying part=
 would obviously be the same, you can do:</div><div><br></div><div>void f()=
{}</div><div><br></div><div>std::any a(f);</div><div><br></div><div>today, =
and you could do it in 2001. So what remains is to add the invoking part, e=
ither as std::invoke or as a member function. This does not affect the perf=
ormance of the existing std::any implementation in any way.</div><div><br><=
/div></div></blockquote><div>Well, that&#39;s mostly joking. But seriously,=
 if runtime type safety is not totally thrown away, there would be a few si=
ze overhead on binary image, for most typical implementations of the langua=
ge. <br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-l=
eft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"=
><div></div><div><br></div></div><div><br><div class=3D"gmail_quote">2017-0=
3-13 12:50 GMT+01:00 FrankHB1989 <span dir=3D"ltr">&lt;<a href=3D"javascrip=
t:" target=3D"_blank" gdf-obfuscated-mailto=3D"fNNRaPRWDQAJ" rel=3D"nofollo=
w" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return true;" onclick=
=3D"this.href=3D&#39;javascript:&#39;;return true;">frank...@gmail.com</a>&=
gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex=
;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><br>=E5=
=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 UTC+8=
=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A<bl=
ockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On Thursday, March 2,=
 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:<blockquote class=3D"gmail_quot=
e" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-l=
eft:1ex"><div dir=3D"ltr">From my perspective, the user could easily ignore=
, that std::any is invokable.</div></blockquote><div><br>Can they? Can you =
provide an implementation of an invokable `any` which has the exact same ov=
erhead as a non-invokable one, so long as you don&#39;t actually use the in=
voking interface?<br><br>I&#39;m not saying you&#39;re wrong, but as someon=
e who is not an expert on `any` implementations, I have my doubts about thi=
s statement.<br><br></div></div></blockquote><div>You can always achieve th=
at by depressing performance of an ordinary `any` implementation to match i=
nvokable one. It would not have effect on conformance. Only QoI is concerne=
d:)<br><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin=
-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><=
div></div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0=
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">I believ=
e that adding a separate class, which would duplicate a lot of what std::an=
y does, would not reflect well on the STL.</div></blockquote><div><br>It wo=
uld duplicate some of the the internals of `any`. But being a different typ=
e woudl demonstrate a different semantic <i>meaning</i> to code.<br><br></d=
iv></div></blockquote><div>True. But `std::any` also does not have stable m=
eaning of &quot;any&quot;.<br>=C2=A0<br></div><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding=
-left:1ex"><div dir=3D"ltr"><div>Let&#39;s rename `any` to `any_object`. No=
w let&#39;s talk about `any_object` in relation to what you want, which is =
`any_function`.<br><br>What does `any_object` represent, semantically? It r=
epresents an implicit agreement between the writer of the function taking t=
he `any` and the person providing the value. Both sides must agree on what =
type(s) that `any_object` will store, and if there is a disagreement or if =
one side does the wrong thing, exceptions will fly.<br><br></div></div></bl=
ockquote><div>It is even not for &quot;any object&quot;. As I have argued b=
efore, I have expect=20
the word &quot;any&quot; being short for &quot;any first-class object type&=
quot; (i.e.=20
cv-unqualified non-array object type), but `std::any` has additional=20
refinement of CopyConstructible on the value type, so it is actually for
 &quot;any copyable cv-unqualified non-array object type&quot; instead. Thi=
s sounds somewhat arbitrary,=20
similar as &quot;invokable&quot;.<br>=C2=A0<br></div><blockquote class=3D"g=
mail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><div>What does your conceptual `any_func=
tion` represent, semantically? It represents, not the type-erasure of a val=
ue, but the type-erausre of a function call <i>signature</i>. And therefore=
, if you see a function that takes a parameter of type `any_function`, you =
<i>immediately</i> know that this function will call the given object.<br><=
br>And therefore, the agreement between us is different. The agreement is n=
ot that I will provide one or more implicitly-defined types that you will e=
ventually `any_cast` to. The agreement is that I will provide objects that =
can be called with one or more implicitly-defined function call signatures,=
 that you will eventually call.<br><br>If they represent different agreemen=
ts, then they clearly should be different types. Even if 99% of the code im=
plementation between them is identical, they still need to be separate. Bec=
ause the code that takes an `any_function` does not <i>want</i> to perform =
`any_cast` on the value it takes. It will perform `any_call` instead. And v=
ice-versa: code that takes `any_object` will not perform `any_call` on it.<=
br><br>I wouldn&#39;t mind having this in the `&lt;any&gt;` header. But I d=
on&#39;t like the idea of grafting such a substantially different use case =
into an existing object.<br><br>Also, a pedantic note. &quot;STL&quot; does=
 not mean &quot;standard library.&quot;<br></div></div></blockquote></div><=
/blockquote></div><br></div>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/2b577b49-4244-4711-ac70-afd58dd47cf9%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/2b577b49-4244-4711-ac70-afd58dd47cf9=
%40isocpp.org</a>.<br />

------=_Part_2997_1034707050.1489407774650--

------=_Part_2996_1625286849.1489407774650--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Mon, 13 Mar 2017 14:00:55 +0100
Raw View
--001a1146f2b452ccf7054a9c4db9
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Size increase does not imply performance decrease. As far as arithmetic
operators are concerned, there's no need to implement them. There is no
bottomless sink problem as regards them and std::any. Also their types are
not as elaborate as those of the Callables. Compare "int" and "void(*)()",
not to mention the lambda types. Delegates are a recurring theme in C++
ever since the 90s. Even now we have a standard signal/slot implementation
proposal. An invokable std::any could make implementing callbacks easier
for many people.

2017-03-13 13:22 GMT+01:00 FrankHB1989 <frankhb1989@gmail.com>:

>
>
> =E5=9C=A8 2017=E5=B9=B43=E6=9C=8813=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=80 U=
TC+8=E4=B8=8B=E5=8D=888:03:58=EF=BC=8Cjanezz55 .=E5=86=99=E9=81=93=EF=BC=9A
>>
>> > You can always achieve that by depressing performance of an ordinary
>> `any` implementation to match invokable one. It would not have effect on
>> conformance. Only QoI is concerned:)
>>
>> I don't see how performance would be depressed. The moving/copying part
>> would obviously be the same, you can do:
>>
>> void f(){}
>>
>> std::any a(f);
>>
>> today, and you could do it in 2001. So what remains is to add the
>> invoking part, either as std::invoke or as a member function. This does =
not
>> affect the performance of the existing std::any implementation in any wa=
y.
>>
>> Well, that's mostly joking. But seriously, if runtime type safety is not
> totally thrown away, there would be a few size overhead on binary image,
> for most typical implementations of the language.
>
>>
>>
>> 2017-03-13 12:50 GMT+01:00 FrankHB1989 <frank...@gmail.com>:
>>
>>>
>>>
>>> =E5=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 =
UTC+8=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=
=9A
>>>>
>>>> On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:
>>>>>
>>>>> From my perspective, the user could easily ignore, that std::any is
>>>>> invokable.
>>>>>
>>>>
>>>> Can they? Can you provide an implementation of an invokable `any` whic=
h
>>>> has the exact same overhead as a non-invokable one, so long as you don=
't
>>>> actually use the invoking interface?
>>>>
>>>> I'm not saying you're wrong, but as someone who is not an expert on
>>>> `any` implementations, I have my doubts about this statement.
>>>>
>>>> You can always achieve that by depressing performance of an ordinary
>>> `any` implementation to match invokable one. It would not have effect o=
n
>>> conformance. Only QoI is concerned:)
>>>
>>> I believe that adding a separate class, which would duplicate a lot of
>>>>> what std::any does, would not reflect well on the STL.
>>>>>
>>>>
>>>> It would duplicate some of the the internals of `any`. But being a
>>>> different type woudl demonstrate a different semantic *meaning* to
>>>> code.
>>>>
>>>> True. But `std::any` also does not have stable meaning of "any".
>>>
>>>
>>>> Let's rename `any` to `any_object`. Now let's talk about `any_object`
>>>> in relation to what you want, which is `any_function`.
>>>>
>>>> What does `any_object` represent, semantically? It represents an
>>>> implicit agreement between the writer of the function taking the `any`=
 and
>>>> the person providing the value. Both sides must agree on what type(s) =
that
>>>> `any_object` will store, and if there is a disagreement or if one side=
 does
>>>> the wrong thing, exceptions will fly.
>>>>
>>>> It is even not for "any object". As I have argued before, I have expec=
t
>>> the word "any" being short for "any first-class object type" (i.e.
>>> cv-unqualified non-array object type), but `std::any` has additional
>>> refinement of CopyConstructible on the value type, so it is actually fo=
r
>>> "any copyable cv-unqualified non-array object type" instead. This sound=
s
>>> somewhat arbitrary, similar as "invokable".
>>>
>>>
>>>> What does your conceptual `any_function` represent, semantically? It
>>>> represents, not the type-erasure of a value, but the type-erausre of a
>>>> function call *signature*. And therefore, if you see a function that
>>>> takes a parameter of type `any_function`, you *immediately* know that
>>>> this function will call the given object.
>>>>
>>>> And therefore, the agreement between us is different. The agreement is
>>>> not that I will provide one or more implicitly-defined types that you =
will
>>>> eventually `any_cast` to. The agreement is that I will provide objects=
 that
>>>> can be called with one or more implicitly-defined function call signat=
ures,
>>>> that you will eventually call.
>>>>
>>>> If they represent different agreements, then they clearly should be
>>>> different types. Even if 99% of the code implementation between them i=
s
>>>> identical, they still need to be separate. Because the code that takes=
 an
>>>> `any_function` does not *want* to perform `any_cast` on the value it
>>>> takes. It will perform `any_call` instead. And vice-versa: code that t=
akes
>>>> `any_object` will not perform `any_call` on it.
>>>>
>>>> I wouldn't mind having this in the `<any>` header. But I don't like th=
e
>>>> idea of grafting such a substantially different use case into an exist=
ing
>>>> object.
>>>>
>>>> Also, a pedantic note. "STL" does not mean "standard library."
>>>>
>>>
>>

--=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/CAO9E8GHa_WYHH%2BnotADxJxxCmU6taffZG-dHVyq-wOnn0=
EzT2Q%40mail.gmail.com.

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

<div dir=3D"ltr">Size increase does not imply performance decrease. As far =
as arithmetic operators are concerned, there&#39;s no need to implement the=
m. There is no bottomless sink problem as regards them and std::any. Also t=
heir types are not as elaborate as those of the Callables. Compare &quot;in=
t&quot; and &quot;void(*)()&quot;, not to mention the lambda types. Delegat=
es are a recurring theme in C++ ever since the 90s. Even now we have a stan=
dard signal/slot implementation proposal. An invokable std::any could make =
implementing callbacks easier for many people.</div><div class=3D"gmail_ext=
ra"><br><div class=3D"gmail_quote">2017-03-13 13:22 GMT+01:00 FrankHB1989 <=
span dir=3D"ltr">&lt;<a href=3D"mailto:frankhb1989@gmail.com" target=3D"_bl=
ank">frankhb1989@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
"><div dir=3D"ltr"><span class=3D""><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=
=8813=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=80 UTC+8=E4=B8=8B=E5=8D=888:03:58=EF=
=BC=8Cjanezz55 .=E5=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote=
" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div dir=3D"ltr"><div>&gt; You can always achieve that by depressin=
g performance of an ordinary `any` implementation to match invokable one. I=
t would not have effect on conformance. Only QoI is concerned:)</div><div><=
br></div><div>I don&#39;t see how performance would be depressed. The movin=
g/copying part would obviously be the same, you can do:</div><div><br></div=
><div>void f(){}</div><div><br></div><div>std::any a(f);</div><div><br></di=
v><div>today, and you could do it in 2001. So what remains is to add the in=
voking part, either as std::invoke or as a member function. This does not a=
ffect the performance of the existing std::any implementation in any way.</=
div><div><br></div></div></blockquote></span><div>Well, that&#39;s mostly j=
oking. But seriously, if runtime type safety is not totally thrown away, th=
ere would be a few size overhead on binary image, for most typical implemen=
tations of the language. <br></div><span class=3D""><blockquote class=3D"gm=
ail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><div dir=3D"ltr"><div></div><div><br></div></div><div><br>=
<div class=3D"gmail_quote">2017-03-13 12:50 GMT+01:00 FrankHB1989 <span dir=
=3D"ltr">&lt;<a rel=3D"nofollow">frank...@gmail.com</a>&gt;</span>:<br><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B4=
3=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 UTC+8=E4=B8=8A=E5=8D=885:01=
:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmai=
l_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;pad=
ding-left:1ex"><div dir=3D"ltr">On Thursday, March 2, 2017 at 3:15:03 PM UT=
C-5, janezz55 . wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;m=
argin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"l=
tr">From my perspective, the user could easily ignore, that std::any is inv=
okable.</div></blockquote><div><br>Can they? Can you provide an implementat=
ion of an invokable `any` which has the exact same overhead as a non-invoka=
ble one, so long as you don&#39;t actually use the invoking interface?<br><=
br>I&#39;m not saying you&#39;re wrong, but as someone who is not an expert=
 on `any` implementations, I have my doubts about this statement.<br><br></=
div></div></blockquote><div>You can always achieve that by depressing perfo=
rmance of an ordinary `any` implementation to match invokable one. It would=
 not have effect on conformance. Only QoI is concerned:)<br><br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div></div><blockquote =
class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #=
ccc solid;padding-left:1ex"><div dir=3D"ltr">I believe that adding a separa=
te class, which would duplicate a lot of what std::any does, would not refl=
ect well on the STL.</div></blockquote><div><br>It would duplicate some of =
the the internals of `any`. But being a different type woudl demonstrate a =
different semantic <i>meaning</i> to code.<br><br></div></div></blockquote>=
<div>True. But `std::any` also does not have stable meaning of &quot;any&qu=
ot;.<br>=C2=A0<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr"><div>Let&#39;s rename `any` to `any_object`. Now let&#39;s talk about=
 `any_object` in relation to what you want, which is `any_function`.<br><br=
>What does `any_object` represent, semantically? It represents an implicit =
agreement between the writer of the function taking the `any` and the perso=
n providing the value. Both sides must agree on what type(s) that `any_obje=
ct` will store, and if there is a disagreement or if one side does the wron=
g thing, exceptions will fly.<br><br></div></div></blockquote><div>It is ev=
en not for &quot;any object&quot;. As I have argued before, I have expect=
=20
the word &quot;any&quot; being short for &quot;any first-class object type&=
quot; (i.e.=20
cv-unqualified non-array object type), but `std::any` has additional=20
refinement of CopyConstructible on the value type, so it is actually for
 &quot;any copyable cv-unqualified non-array object type&quot; instead. Thi=
s sounds somewhat arbitrary,=20
similar as &quot;invokable&quot;.<br>=C2=A0<br></div><blockquote class=3D"g=
mail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><div>What does your conceptual `any_func=
tion` represent, semantically? It represents, not the type-erasure of a val=
ue, but the type-erausre of a function call <i>signature</i>. And therefore=
, if you see a function that takes a parameter of type `any_function`, you =
<i>immediately</i> know that this function will call the given object.<br><=
br>And therefore, the agreement between us is different. The agreement is n=
ot that I will provide one or more implicitly-defined types that you will e=
ventually `any_cast` to. The agreement is that I will provide objects that =
can be called with one or more implicitly-defined function call signatures,=
 that you will eventually call.<br><br>If they represent different agreemen=
ts, then they clearly should be different types. Even if 99% of the code im=
plementation between them is identical, they still need to be separate. Bec=
ause the code that takes an `any_function` does not <i>want</i> to perform =
`any_cast` on the value it takes. It will perform `any_call` instead. And v=
ice-versa: code that takes `any_object` will not perform `any_call` on it.<=
br><br>I wouldn&#39;t mind having this in the `&lt;any&gt;` header. But I d=
on&#39;t like the idea of grafting such a substantially different use case =
into an existing object.<br><br>Also, a pedantic note. &quot;STL&quot; does=
 not mean &quot;standard library.&quot;<br></div></div></blockquote></div><=
/blockquote></div><br></div>
</blockquote></span></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GHa_WYHH%2BnotADxJxxCmU6taffZG-=
dHVyq-wOnn0EzT2Q%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHa_WYHH%=
2BnotADxJxxCmU6taffZG-dHVyq-wOnn0EzT2Q%40mail.gmail.com</a>.<br />

--001a1146f2b452ccf7054a9c4db9--

.


Author: Jean-Marc Bourguet <jm.bourguet@gmail.com>
Date: Mon, 13 Mar 2017 06:48:57 -0700 (PDT)
Raw View
------=_Part_9868_981961758.1489412937946
Content-Type: multipart/alternative;
 boundary="----=_Part_9869_788010296.1489412937946"

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

Le lundi 13 mars 2017 14:00:59 UTC+1, janezz55 . a =C3=A9crit :
>
> Size increase does not imply performance decrease. As far as arithmetic=
=20
> operators are concerned, there's no need to implement them. There is no=
=20
> bottomless sink problem as regards them and std::any. Also their types ar=
e=20
> not as elaborate as those of the Callables. Compare "int" and "void(*)()"=
,=20
> not to mention the lambda types. Delegates are a recurring theme in C++=
=20
> ever since the 90s. Even now we have a standard signal/slot implementatio=
n=20
> proposal. An invokable std::any could make implementing callbacks easier=
=20
> for many people.
>
> I feel dense.  Although I understand the interest of a standard=20
signal/slot mechanism, I don't see the use cases of an invokable std::any=
=20
which would not be adequately served by std::function and lambdas.  Could=
=20
you expand on them?

Yours,

--=20
Jean-Marc

--=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/5858b37e-e789-4a0e-be5c-fee63a159bd4%40isocpp.or=
g.

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

<div dir=3D"ltr">Le lundi 13 mars 2017 14:00:59 UTC+1, janezz55 . a =C3=A9c=
rit=C2=A0:<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">Siz=
e increase does not imply performance decrease. As far as arithmetic operat=
ors are concerned, there&#39;s no need to implement them. There is no botto=
mless sink problem as regards them and std::any. Also their types are not a=
s elaborate as those of the Callables. Compare &quot;int&quot; and &quot;vo=
id(*)()&quot;, not to mention the lambda types. Delegates are a recurring t=
heme in C++ ever since the 90s. Even now we have a standard signal/slot imp=
lementation proposal. An invokable std::any could make implementing callbac=
ks easier for many people.</div><div><br></div></blockquote><div>I feel den=
se. =C2=A0Although I understand the interest of a standard signal/slot mech=
anism, I don&#39;t see the use cases of an invokable std::any which would n=
ot be adequately served by std::function and lambdas. =C2=A0Could you expan=
d on them?</div><div><br></div><div>Yours,</div><div><br></div><div>--=C2=
=A0</div><div>Jean-Marc</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/5858b37e-e789-4a0e-be5c-fee63a159bd4%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/5858b37e-e789-4a0e-be5c-fee63a159bd4=
%40isocpp.org</a>.<br />

------=_Part_9869_788010296.1489412937946--

------=_Part_9868_981961758.1489412937946--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Mon, 13 Mar 2017 15:03:39 +0100
Raw View
--001a1146f2b4b64099054a9d2dd5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

consider:

std::map<std::string, std::any> slots;

slots["onClick"] =3D [](){};

slots["onClick"]();

This would work with my proposed augmentation and it is possible with my
example implementation. Most people don't need much beyond that and it is
very concise.

2017-03-13 14:48 GMT+01:00 Jean-Marc Bourguet <jm.bourguet@gmail.com>:

> Le lundi 13 mars 2017 14:00:59 UTC+1, janezz55 . a =C3=A9crit :
>>
>> Size increase does not imply performance decrease. As far as arithmetic
>> operators are concerned, there's no need to implement them. There is no
>> bottomless sink problem as regards them and std::any. Also their types a=
re
>> not as elaborate as those of the Callables. Compare "int" and "void(*)()=
",
>> not to mention the lambda types. Delegates are a recurring theme in C++
>> ever since the 90s. Even now we have a standard signal/slot implementati=
on
>> proposal. An invokable std::any could make implementing callbacks easier
>> for many people.
>>
>> I feel dense.  Although I understand the interest of a standard
> signal/slot mechanism, I don't see the use cases of an invokable std::any
> which would not be adequately served by std::function and lambdas.  Could
> you expand on them?
>
> Yours,
>
> --
> Jean-Marc
>

--=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/CAO9E8GGXJD-sTpUKb82bW%2BqrNaZPWsbo9ka9yULZgC7Qt=
ruudg%40mail.gmail.com.

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

<div dir=3D"ltr">consider:<div><br></div><div>std::map&lt;std::string, std:=
:any&gt; slots;</div><div><br></div><div>slots[&quot;onClick&quot;] =3D [](=
){};</div><div><br></div><div>slots[&quot;onClick&quot;]();</div><div><br><=
/div><div>This would work with my proposed augmentation and it is possible =
with my example implementation. Most people don&#39;t need much beyond that=
 and it is very concise.</div></div><div class=3D"gmail_extra"><br><div cla=
ss=3D"gmail_quote">2017-03-13 14:48 GMT+01:00 Jean-Marc Bourguet <span dir=
=3D"ltr">&lt;<a href=3D"mailto:jm.bourguet@gmail.com" target=3D"_blank">jm.=
bourguet@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr">Le lundi 13 mars 2017 14:00:59 UTC+1, janezz55 . a =C3=A9crit=C2=
=A0:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Size increase =
does not imply performance decrease. As far as arithmetic operators are con=
cerned, there&#39;s no need to implement them. There is no bottomless sink =
problem as regards them and std::any. Also their types are not as elaborate=
 as those of the Callables. Compare &quot;int&quot; and &quot;void(*)()&quo=
t;, not to mention the lambda types. Delegates are a recurring theme in C++=
 ever since the 90s. Even now we have a standard signal/slot implementation=
 proposal. An invokable std::any could make implementing callbacks easier f=
or many people.</div><div><br></div></blockquote><div>I feel dense.=C2=A0 A=
lthough I understand the interest of a standard signal/slot mechanism, I do=
n&#39;t see the use cases of an invokable std::any which would not be adequ=
ately served by std::function and lambdas.=C2=A0 Could you expand on them?<=
/div><div><br></div><div>Yours,</div><span class=3D"HOEnZb"><font color=3D"=
#888888"><div><br></div><div>--=C2=A0</div><div>Jean-Marc</div></font></spa=
n></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GGXJD-sTpUKb82bW%2BqrNaZPWsbo9k=
a9yULZgC7Qtruudg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GGXJD-sTp=
UKb82bW%2BqrNaZPWsbo9ka9yULZgC7Qtruudg%40mail.gmail.com</a>.<br />

--001a1146f2b4b64099054a9d2dd5--

.


Author: Ville Voutilainen <ville.voutilainen@gmail.com>
Date: Mon, 13 Mar 2017 16:13:22 +0200
Raw View
On 13 March 2017 at 16:03, janezz55 . <janezz55@gmail.com> wrote:
> consider:
>
> std::map<std::string, std::any> slots;
>
> slots["onClick"] = [](){};
>
> slots["onClick"]();
>
> This would work with my proposed augmentation and it is possible with my
> example implementation. Most people don't need much beyond that and it is
> very concise.

And you don't write that as
std::map<std::string, std::function<void()>> slots;
exactly because...?

--
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/CAFk2RUZGaH%2BKRrRtA-sdNqYVyo64%2B6OhCSay5JsLTCyYiHS9gQ%40mail.gmail.com.

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Mon, 13 Mar 2017 15:18:33 +0100
Raw View
--001a1144b3faf21b9a054a9d622a
Content-Type: text/plain; charset=UTF-8

because the number and type of arguments is fixed that way, while std::any
can handle any number of arguments of any type, that's why it's called
std::any. Say:

slots["selected"] = [](int){};
slots["selected"](1);

would also work.

2017-03-13 15:13 GMT+01:00 Ville Voutilainen <ville.voutilainen@gmail.com>:

> On 13 March 2017 at 16:03, janezz55 . <janezz55@gmail.com> wrote:
> > consider:
> >
> > std::map<std::string, std::any> slots;
> >
> > slots["onClick"] = [](){};
> >
> > slots["onClick"]();
> >
> > This would work with my proposed augmentation and it is possible with my
> > example implementation. Most people don't need much beyond that and it is
> > very concise.
>
> And you don't write that as
> std::map<std::string, std::function<void()>> slots;
> exactly because...?
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAFk2RUZGaH%2BKRrRtA-sdNqYVyo64%
> 2B6OhCSay5JsLTCyYiHS9gQ%40mail.gmail.com.
>

--
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/CAO9E8GEPORQr8r31NxBtx85TF7_g%3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com.

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

<div dir=3D"ltr">because the number and type of arguments is fixed that way=
, while std::any can handle any number of arguments of any type, that&#39;s=
 why it&#39;s called std::any. Say:<div><br></div><div>slots[&quot;selected=
&quot;] =3D [](int){};</div><div>slots[&quot;selected&quot;](1);</div><div>=
<br></div><div>would also work.</div></div><div class=3D"gmail_extra"><br><=
div class=3D"gmail_quote">2017-03-13 15:13 GMT+01:00 Ville Voutilainen <spa=
n dir=3D"ltr">&lt;<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"=
_blank">ville.voutilainen@gmail.com</a>&gt;</span>:<br><blockquote class=3D=
"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><span class=3D"">On 13 March 2017 at 16:03, janezz55 . &lt;<a hr=
ef=3D"mailto:janezz55@gmail.com">janezz55@gmail.com</a>&gt; wrote:<br>
&gt; consider:<br>
&gt;<br>
&gt; std::map&lt;std::string, std::any&gt; slots;<br>
&gt;<br>
&gt; slots[&quot;onClick&quot;] =3D [](){};<br>
&gt;<br>
&gt; slots[&quot;onClick&quot;]();<br>
&gt;<br>
&gt; This would work with my proposed augmentation and it is possible with =
my<br>
&gt; example implementation. Most people don&#39;t need much beyond that an=
d it is<br>
&gt; very concise.<br>
<br>
</span>And you don&#39;t write that as<br>
std::map&lt;std::string, std::function&lt;void()&gt;&gt; slots;<br>
exactly because...?<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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/CAFk2RUZGaH%2BKRrRtA-sdNqYVyo64%2B6Oh=
CSay5JsLTCyYiHS9gQ%40mail.gmail.com" rel=3D"noreferrer" target=3D"_blank">h=
ttps://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAFk2=
RUZGaH%<wbr>2BKRrRtA-sdNqYVyo64%<wbr>2B6OhCSay5JsLTCyYiHS9gQ%<wbr>40mail.gm=
ail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEPORQr8r31NxBtx85TF7_g%3DCLJ%2=
BHv95oxqTVvDdVP6-Q%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPORQr=
8r31NxBtx85TF7_g%3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com</a>.<br />

--001a1144b3faf21b9a054a9d622a--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Mon, 13 Mar 2017 08:22:06 -0700
Raw View
On segunda-feira, 13 de mar=C3=A7o de 2017 07:18:33 PDT janezz55 . wrote:
> because the number and type of arguments is fixed that way, while std::an=
y
> can handle any number of arguments of any type, that's why it's called
> std::any. Say:
>=20
> slots["selected"] =3D [](int){};
> slots["selected"](1);
>=20
> would also work.

That means you must know the exact type from some OOB information. Why can'=
t=20
you then convert it to std::function back and forth?

slots["selected"] =3D std::function<void(int)>{[](int) {});

any_cast<std::function<void(int)>>(slots["selected"])(1);

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/3298793.lKt8yrbkVB%40tjmaciei-mobl1.

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Mon, 13 Mar 2017 16:38:24 +0100
Raw View
--94eb2c06136e8ce9ad054a9e80c7
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

because of information hiding and convenience. Also, why use 2 type
erasers? That's inefficient.

2017-03-13 16:22 GMT+01:00 Thiago Macieira <thiago@macieira.org>:

> On segunda-feira, 13 de mar=C3=A7o de 2017 07:18:33 PDT janezz55 . wrote:
> > because the number and type of arguments is fixed that way, while
> std::any
> > can handle any number of arguments of any type, that's why it's called
> > std::any. Say:
> >
> > slots["selected"] =3D [](int){};
> > slots["selected"](1);
> >
> > would also work.
>
> That means you must know the exact type from some OOB information. Why
> can't
> you then convert it to std::function back and forth?
>
> slots["selected"] =3D std::function<void(int)>{[](int) {});
>
> any_cast<std::function<void(int)>>(slots["selected"])(1);
>
> --
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>    Software Architect - Intel Open Source Technology Center
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/3298793.lKt8yrbkVB%40tjmaciei-mobl1.
>

--=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/CAO9E8GHqZn%3D9hy6jyTq2MsCLsTSrL-zKrxqJK-%3DkJmw=
Qf42TJA%40mail.gmail.com.

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

<div dir=3D"ltr">because of information hiding and convenience. Also, why u=
se 2 type erasers? That&#39;s inefficient.</div><div class=3D"gmail_extra">=
<br><div class=3D"gmail_quote">2017-03-13 16:22 GMT+01:00 Thiago Macieira <=
span dir=3D"ltr">&lt;<a href=3D"mailto:thiago@macieira.org" target=3D"_blan=
k">thiago@macieira.org</a>&gt;</span>:<br><blockquote class=3D"gmail_quote"=
 style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On=
 segunda-feira, 13 de mar=C3=A7o de 2017 07:18:33 PDT janezz55 . wrote:<br>
&gt; because the number and type of arguments is fixed that way, while std:=
:any<br>
&gt; can handle any number of arguments of any type, that&#39;s why it&#39;=
s called<br>
&gt; std::any. Say:<br>
&gt;<br>
&gt; slots[&quot;selected&quot;] =3D [](int){};<br>
&gt; slots[&quot;selected&quot;](1);<br>
&gt;<br>
&gt; would also work.<br>
<br>
That means you must know the exact type from some OOB information. Why can&=
#39;t<br>
you then convert it to std::function back and forth?<br>
<br>
slots[&quot;selected&quot;] =3D std::function&lt;void(int)&gt;{[](<wbr>int)=
 {});<br>
<br>
any_cast&lt;std::function&lt;void(<wbr>int)&gt;&gt;(slots[&quot;selected&qu=
ot;])(1);<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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/3298793.lKt8yrbkVB%40tjmaciei-mobl1" =
rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/<wbr>isocp=
p.org/d/msgid/std-<wbr>proposals/3298793.lKt8yrbkVB%<wbr>40tjmaciei-mobl1</=
a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GHqZn%3D9hy6jyTq2MsCLsTSrL-zKrx=
qJK-%3DkJmwQf42TJA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GHqZn%3=
D9hy6jyTq2MsCLsTSrL-zKrxqJK-%3DkJmwQf42TJA%40mail.gmail.com</a>.<br />

--94eb2c06136e8ce9ad054a9e80c7--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Mon, 13 Mar 2017 08:54:08 -0700
Raw View
On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrote:
> because of information hiding and convenience. Also, why use 2 type
> erasers? That's inefficient.

Because something must know the actual type. Let me take your example:

slots["selected"] =3D [](int){};
slots["selected"](1);

What happens if I called slos["selected"]()? How about slots["selected"](1.=
0)?=20
What should happen here?

 a) UB
 b) runtime error / exception thrown
 c) compile error

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/21674643.T1S6GQCl5Z%40tjmaciei-mobl1.

.


Author: Richard Smith <richard@metafoo.co.uk>
Date: Mon, 13 Mar 2017 07:49:54 -1000
Raw View
--001a114423f604ca90054aa058b9
Content-Type: text/plain; charset=UTF-8

On 13 March 2017 at 04:18, janezz55 . <janezz55@gmail.com> wrote:

> because the number and type of arguments is fixed that way, while std::any
> can handle any number of arguments of any type, that's why it's called
> std::any. Say:
>
> slots["selected"] = [](int){};
> slots["selected"](1);
>
> would also work.
>

What about

slots["what_is_my_arity"] = [](auto...){};

? If that's supposed to work, how? (Even if you had a separate any_function
type for this idea, it still seems fundamentally unable to handle function
templates or overload sets, and it gives you an object with a non-type-safe
operator().)

Fundamentally I completely agree with other commenters: operator() is *not*
special. This is just a special case of a general desire: to lift a concept
into a concrete type that type-erases the implementation of the concept.
That sure is a useful idea, but this is not the right way to get there.

2017-03-13 15:13 GMT+01:00 Ville Voutilainen <ville.voutilainen@gmail.com>:
>
>> On 13 March 2017 at 16:03, janezz55 . <janezz55@gmail.com> wrote:
>> > consider:
>> >
>> > std::map<std::string, std::any> slots;
>> >
>> > slots["onClick"] = [](){};
>> >
>> > slots["onClick"]();
>> >
>> > This would work with my proposed augmentation and it is possible with my
>> > example implementation. Most people don't need much beyond that and it
>> is
>> > very concise.
>>
>> And you don't write that as
>> std::map<std::string, std::function<void()>> slots;
>> exactly because...?
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/CAFk2RUZGaH%2BKRrRtA-
>> sdNqYVyo64%2B6OhCSay5JsLTCyYiHS9gQ%40mail.gmail.com.
>>
>
> --
> 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/CAO9E8GEPORQr8r31NxBtx85TF7_g%
> 3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPORQr8r31NxBtx85TF7_g%3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com?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/CAOfiQqn6NYh6R_CN%3DwPGhi6eTqojcWiS-hMxqtwPUiLc%2Bu8rsg%40mail.gmail.com.

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On 1=
3 March 2017 at 04:18, janezz55 . <span dir=3D"ltr">&lt;<a href=3D"mailto:j=
anezz55@gmail.com" target=3D"_blank">janezz55@gmail.com</a>&gt;</span> wrot=
e:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">because the number an=
d type of arguments is fixed that way, while std::any can handle any number=
 of arguments of any type, that&#39;s why it&#39;s called std::any. Say:<di=
v><br></div><div>slots[&quot;selected&quot;] =3D [](int){};</div><div>slots=
[&quot;selected&quot;](1);</div><div><br></div><div>would also work.</div><=
/div></blockquote><div><br></div><div>What about</div><div><br></div><div>s=
lots[&quot;what_is_my_arity&quot;] =3D [](auto...){};</div><div><br></div><=
div>? If that&#39;s supposed to work, how? (Even if you had a separate any_=
function type for this idea, it still seems fundamentally unable to handle =
function templates or overload sets, and it gives you an object with a non-=
type-safe operator().)</div><div><br></div><div>Fundamentally I completely =
agree with other commenters: operator() is *not* special. This is just a sp=
ecial case of a general desire: to lift a concept into a concrete type that=
 type-erases the implementation of the concept. That sure is a useful idea,=
 but this is not the right way to get there.</div><div><br></div><blockquot=
e class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc sol=
id;padding-left:1ex"><div class=3D"gmail_extra"><div class=3D"gmail_quote">=
<span class=3D"">2017-03-13 15:13 GMT+01:00 Ville Voutilainen <span dir=3D"=
ltr">&lt;<a href=3D"mailto:ville.voutilainen@gmail.com" target=3D"_blank">v=
ille.voutilainen@gmail.com</a>&gt;</span>:<br></span><blockquote class=3D"g=
mail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-l=
eft:1ex"><span class=3D""><span>On 13 March 2017 at 16:03, janezz55 . &lt;<=
a href=3D"mailto:janezz55@gmail.com" target=3D"_blank">janezz55@gmail.com</=
a>&gt; wrote:<br>
&gt; consider:<br>
&gt;<br>
&gt; std::map&lt;std::string, std::any&gt; slots;<br>
&gt;<br>
&gt; slots[&quot;onClick&quot;] =3D [](){};<br>
&gt;<br>
&gt; slots[&quot;onClick&quot;]();<br>
&gt;<br>
&gt; This would work with my proposed augmentation and it is possible with =
my<br>
&gt; example implementation. Most people don&#39;t need much beyond that an=
d it is<br>
&gt; very concise.<br>
<br>
</span>And you don&#39;t write that as<br>
std::map&lt;std::string, std::function&lt;void()&gt;&gt; slots;<br>
exactly because...?<br>
</span><span class=3D"m_-3522710039580992207HOEnZb"><font color=3D"#888888"=
><br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/s=
td-proposals<wbr>/cJD8urBWN7c/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" target=3D"_blank">std-pr=
oposals+unsubscribe@isoc<wbr>pp.org</a>.<span class=3D""><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/CAFk2RUZGaH%2BKRrRtA-sdNqYVyo64%2B6Oh=
CSay5JsLTCyYiHS9gQ%40mail.gmail.com" rel=3D"noreferrer" target=3D"_blank">h=
ttps://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/CAFk2=
RUZGaH%2BKRrRtA-<wbr>sdNqYVyo64%2B6OhCSay5JsLTCyYiH<wbr>S9gQ%40mail.gmail.c=
om</a>.<br>
</span></font></span></blockquote></div><br></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPORQr8r31NxBtx85TF7_g%3DCLJ%2=
BHv95oxqTVvDdVP6-Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/=
std-<wbr>proposals/<wbr>CAO9E8GEPORQr8r31NxBtx85TF7_g%<wbr>3DCLJ%2BHv95oxqT=
VvDdVP6-Q%<wbr>40mail.gmail.com</a>.<br>
</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/CAOfiQqn6NYh6R_CN%3DwPGhi6eTqojcWiS-h=
MxqtwPUiLc%2Bu8rsg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOfiQqn6NYh6=
R_CN%3DwPGhi6eTqojcWiS-hMxqtwPUiLc%2Bu8rsg%40mail.gmail.com</a>.<br />

--001a114423f604ca90054aa058b9--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 13 Mar 2017 11:25:53 -0700 (PDT)
Raw View
------=_Part_3507_1648834911.1489429554178
Content-Type: multipart/alternative;
 boundary="----=_Part_3508_74444207.1489429554178"

------=_Part_3508_74444207.1489429554178
Content-Type: text/plain; charset=UTF-8

On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smith wrote:
>
> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com <javascript:>>
> wrote:
>
>> because the number and type of arguments is fixed that way, while
>> std::any can handle any number of arguments of any type, that's why it's
>> called std::any. Say:
>>
>> slots["selected"] = [](int){};
>> slots["selected"](1);
>>
>> would also work.
>>
>
> What about
>
> slots["what_is_my_arity"] = [](auto...){};
>
> ? If that's supposed to work, how? (Even if you had a separate
> any_function type for this idea, it still seems fundamentally unable to
> handle function templates or overload sets, and it gives you an object with
> a non-type-safe operator().)
>
> Fundamentally I completely agree with other commenters: operator() is
> *not* special. This is just a special case of a general desire: to lift a
> concept into a concrete type that type-erases the implementation of the
> concept. That sure is a useful idea, but this is not the right way to get
> there.
>

Now that's an interesting idea: `any_concept<ConceptName>`, which would
synthesize the operations specified by the concept. Of course, that would
require two things we don't have: the ability to introspect the elements of
a concept, and the ability to pass concepts to templates.

This is a pretty good argument for making a concept something other than
just a function/variable, since this would permit us to provide them as
template arguments.

Granted, even those two things wouldn't be enough, since we cannot
automatically synthesize arbitrary global interfaces.

--
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/ee9704b3-656d-4b2c-84cf-eb03bc0800c5%40isocpp.org.

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

<div dir=3D"ltr">On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smi=
th wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: =
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div=
><div class=3D"gmail_quote">On 13 March 2017 at 04:18, janezz55 . <span dir=
=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailt=
o=3D"RjSv49ppDQAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascr=
ipt:&#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return=
 true;">jane...@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gma=
il_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex"><div dir=3D"ltr">because the number and type of arguments is fixed t=
hat way, while std::any can handle any number of arguments of any type, tha=
t&#39;s why it&#39;s called std::any. Say:<div><br></div><div>slots[&quot;s=
elected&quot;] =3D [](int){};</div><div>slots[&quot;selected&quot;](1);</di=
v><div><br></div><div>would also work.</div></div></blockquote><div><br></d=
iv><div>What about</div><div><br></div><div>slots[&quot;what_is_my_arity&qu=
ot;] =3D [](auto...){};</div><div><br></div><div>? If that&#39;s supposed t=
o work, how? (Even if you had a separate any_function type for this idea, i=
t still seems fundamentally unable to handle function templates or overload=
 sets, and it gives you an object with a non-type-safe operator().)</div><d=
iv><br></div><div>Fundamentally I completely agree with other commenters: o=
perator() is *not* special. This is just a special case of a general desire=
: to lift a concept into a concrete type that type-erases the implementatio=
n of the concept. That sure is a useful idea, but this is not the right way=
 to get there.</div></div></div></div></blockquote><div><br>Now that&#39;s =
an interesting idea: `any_concept&lt;ConceptName&gt;`, which would synthesi=
ze the operations specified by the concept. Of course, that would require t=
wo things we don&#39;t have: the ability to introspect the elements of a co=
ncept, and the ability to pass concepts to templates.<br><br>This is a pret=
ty good argument for making a concept something other than just a function/=
variable, since this would permit us to provide them as template arguments.=
<br><br>Granted, even those two things wouldn&#39;t be enough, since we can=
not automatically synthesize arbitrary global interfaces.<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/ee9704b3-656d-4b2c-84cf-eb03bc0800c5%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/ee9704b3-656d-4b2c-84cf-eb03bc0800c5=
%40isocpp.org</a>.<br />

------=_Part_3508_74444207.1489429554178--

------=_Part_3507_1648834911.1489429554178--

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Mon, 13 Mar 2017 20:48:59 +0000
Raw View
--001a113e2c0c420d2e054aa2d761
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On 13 Mar 2017 15:54, "Thiago Macieira" <thiago@macieira.org> wrote:

On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrote:
> because of information hiding and convenience. Also, why use 2 type
> erasers? That's inefficient.

Because something must know the actual type. Let me take your example:

slots["selected"] =3D [](int){};
slots["selected"](1);

What happens if I called slos["selected"]()? How about
slots["selected"](1.0)?
What should happen here?

 a) UB
 b) runtime error / exception thrown
 c) compile error


b) in both cases. As discussed above, this is trivial to implement and
incurs zero run time cost.



--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--
You received this message because you are subscribed to a topic in the
Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this topic, visit https://groups.google.com/a/
isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
To unsubscribe from this group and all its topics, 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/21674643.T1S6GQCl5Z%40tjmaciei-mobl1.

--=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/CAJnLdOYmBsgsXx2qo3oZfgG%3D7dYKEwAoJKoMEeme1i4Cz=
v0wzQ%40mail.gmail.com.

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

<div dir=3D"auto"><div><br><div class=3D"gmail_extra"><br><div class=3D"gma=
il_quote">On 13 Mar 2017 15:54, &quot;Thiago Macieira&quot; &lt;<a href=3D"=
mailto:thiago@macieira.org">thiago@macieira.org</a>&gt; wrote:<br type=3D"a=
ttribution"><blockquote class=3D"quote" style=3D"margin:0 0 0 .8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div class=3D"quoted-text">On segunda-=
feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrote:<br>
&gt; because of information hiding and convenience. Also, why use 2 type<br=
>
&gt; erasers? That&#39;s inefficient.<br>
<br>
</div>Because something must know the actual type. Let me take your example=
:<br>
<div class=3D"quoted-text"><br>
slots[&quot;selected&quot;] =3D [](int){};<br>
slots[&quot;selected&quot;](1);<br>
<br>
</div>What happens if I called slos[&quot;selected&quot;]()? How about slot=
s[&quot;selected&quot;](1.0)?<br>
What should happen here?<br>
<br>
=C2=A0a) UB<br>
=C2=A0b) runtime error / exception thrown<br>
=C2=A0c) compile error<br>
<div class=3D"quoted-text"></div></blockquote></div></div></div><div dir=3D=
"auto"><div class=3D"gmail_extra"><div class=3D"gmail_quote"><blockquote cl=
ass=3D"quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding=
-left:1ex"><div class=3D"quoted-text"></div></blockquote></div></div></div>=
<div dir=3D"auto"><br></div><div dir=3D"auto">b) in both cases. As discusse=
d above, this is trivial to implement and incurs zero run time cost.=C2=A0<=
/div><div dir=3D"auto"><br></div><div dir=3D"auto"><br></div><div dir=3D"au=
to"><div class=3D"gmail_extra"><div class=3D"gmail_quote"><blockquote class=
=3D"quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div class=3D"quoted-text"><br>
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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>
</div>To view this discussion on the web visit <a href=3D"https://groups.go=
ogle.com/a/isocpp.org/d/msgid/std-proposals/21674643.T1S6GQCl5Z%40tjmaciei-=
mobl1" rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/<wb=
r>isocpp.org/d/msgid/std-<wbr>proposals/21674643.T1S6GQCl5Z%<wbr>40tjmaciei=
-mobl1</a>.<br>
</blockquote></div><br></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/CAJnLdOYmBsgsXx2qo3oZfgG%3D7dYKEwAoJK=
oMEeme1i4Czv0wzQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdOYmBsgsXx=
2qo3oZfgG%3D7dYKEwAoJKoMEeme1i4Czv0wzQ%40mail.gmail.com</a>.<br />

--001a113e2c0c420d2e054aa2d761--

.


Author: =?UTF-8?Q?Klaim_=2D_Jo=C3=ABl_Lamotte?= <mjklaim@gmail.com>
Date: Mon, 13 Mar 2017 21:52:27 +0100
Raw View
--001a114420f8ac79eb054aa2e31c
Content-Type: text/plain; charset=UTF-8

On 13 March 2017 at 19:25, Nicol Bolas <jmckesson@gmail.com> wrote:

> On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smith wrote:
>>
>> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com> wrote:
>>
>>> because the number and type of arguments is fixed that way, while
>>> std::any can handle any number of arguments of any type, that's why it's
>>> called std::any. Say:
>>>
>>> slots["selected"] = [](int){};
>>> slots["selected"](1);
>>>
>>> would also work.
>>>
>>
>> What about
>>
>> slots["what_is_my_arity"] = [](auto...){};
>>
>> ? If that's supposed to work, how? (Even if you had a separate
>> any_function type for this idea, it still seems fundamentally unable to
>> handle function templates or overload sets, and it gives you an object with
>> a non-type-safe operator().)
>>
>> Fundamentally I completely agree with other commenters: operator() is
>> *not* special. This is just a special case of a general desire: to lift a
>> concept into a concrete type that type-erases the implementation of the
>> concept. That sure is a useful idea, but this is not the right way to get
>> there.
>>
>
> Now that's an interesting idea: `any_concept<ConceptName>`, which would
> synthesize the operations specified by the concept. Of course, that would
> require two things we don't have: the ability to introspect the elements of
> a concept, and the ability to pass concepts to templates.
>
> This is a pretty good argument for making a concept something other than
> just a function/variable, since this would permit us to provide them as
> template arguments.
>
> Granted, even those two things wouldn't be enough, since we cannot
> automatically synthesize arbitrary global interfaces.
>


You are basically describing "virtual concepts" as per this
work-in-progress proposal (which decided to go
the languae-feature way for argumented reasons:
https://github.com/andyprowl/virtual-concepts


> --
> 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/ee9704b3-656d-4b2c-
> 84cf-eb03bc0800c5%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/ee9704b3-656d-4b2c-84cf-eb03bc0800c5%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/CAOU91ONT037s31FpnZ76VY0D4ye_vhLbjtFp_i84tT1rm7-O8w%40mail.gmail.com.

--001a114420f8ac79eb054aa2e31c
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 13 March 2017 at 19:25, Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D=
"mailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;<=
/span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr">On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smith wrote=
:<span class=3D"gmail-"><blockquote class=3D"gmail_quote" style=3D"margin:0=
px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><=
div dir=3D"ltr"><div><div class=3D"gmail_quote">On 13 March 2017 at 04:18, =
janezz55 . <span dir=3D"ltr">&lt;<a rel=3D"nofollow">jane...@gmail.com</a>&=
gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px =
0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div=
 dir=3D"ltr">because the number and type of arguments is fixed that way, wh=
ile std::any can handle any number of arguments of any type, that&#39;s why=
 it&#39;s called std::any. Say:<div><br></div><div>slots[&quot;selected&quo=
t;] =3D [](int){};</div><div>slots[&quot;selected&quot;](1);</div><div><br>=
</div><div>would also work.</div></div></blockquote><div><br></div><div>Wha=
t about</div><div><br></div><div>slots[&quot;what_is_my_arity&quot;] =3D []=
(auto...){};</div><div><br></div><div>? If that&#39;s supposed to work, how=
? (Even if you had a separate any_function type for this idea, it still see=
ms fundamentally unable to handle function templates or overload sets, and =
it gives you an object with a non-type-safe operator().)</div><div><br></di=
v><div>Fundamentally I completely agree with other commenters: operator() i=
s *not* special. This is just a special case of a general desire: to lift a=
 concept into a concrete type that type-erases the implementation of the co=
ncept. That sure is a useful idea, but this is not the right way to get the=
re.</div></div></div></div></blockquote></span><div><br>Now that&#39;s an i=
nteresting idea: `any_concept&lt;ConceptName&gt;`, which would synthesize t=
he operations specified by the concept. Of course, that would require two t=
hings we don&#39;t have: the ability to introspect the elements of a concep=
t, and the ability to pass concepts to templates.<br><br>This is a pretty g=
ood argument for making a concept something other than just a function/vari=
able, since this would permit us to provide them as template arguments.<br>=
<br>Granted, even those two things wouldn&#39;t be enough, since we cannot =
automatically synthesize arbitrary global interfaces.<br></div></div></bloc=
kquote><div><br></div><div><br></div><div>You are basically describing &quo=
t;virtual concepts&quot; as per this work-in-progress proposal (which decid=
ed to go</div><div>the languae-feature way for argumented reasons:=C2=A0<a =
href=3D"https://github.com/andyprowl/virtual-concepts">https://github.com/a=
ndyprowl/virtual-concepts</a></div><div>=C2=A0</div><blockquote class=3D"gm=
ail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,=
204,204);padding-left:1ex"><div dir=3D"ltr"><div></div></div><span class=3D=
"gmail-">

<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@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/ee9704b3-656d-4b2c-84cf-eb03bc0800c5%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/ee97=
04b3-656d-4b2c-<wbr>84cf-eb03bc0800c5%40isocpp.org</a><wbr>.<br>
</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/CAOU91ONT037s31FpnZ76VY0D4ye_vhLbjtFp=
_i84tT1rm7-O8w%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOU91ONT037s31Fp=
nZ76VY0D4ye_vhLbjtFp_i84tT1rm7-O8w%40mail.gmail.com</a>.<br />

--001a114420f8ac79eb054aa2e31c--

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Mon, 13 Mar 2017 21:08:58 +0000
Raw View
--94eb2c0cfe22bf084b054aa31e2b
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On 13 Mar 2017 20:52, "Klaim - Jo=C3=ABl Lamotte" <mjklaim@gmail.com> wrote=
:



On 13 March 2017 at 19:25, Nicol Bolas <jmckesson@gmail.com> wrote:

> On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smith wrote:
>>
>> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com> wrote:
>>
>>> because the number and type of arguments is fixed that way, while
>>> std::any can handle any number of arguments of any type, that's why it'=
s
>>> called std::any. Say:
>>>
>>> slots["selected"] =3D [](int){};
>>> slots["selected"](1);
>>>
>>> would also work.
>>>
>>
>> What about
>>
>> slots["what_is_my_arity"] =3D [](auto...){};
>>
>> ? If that's supposed to work, how? (Even if you had a separate
>> any_function type for this idea, it still seems fundamentally unable to
>> handle function templates or overload sets, and it gives you an object w=
ith
>> a non-type-safe operator().)
>>
>
Yes, that wouldn't work, except possibly by a tag constructor to select one
preferred signature. The operator() is still type safe, it just will never
succeed.


>> Fundamentally I completely agree with other commenters: operator() is
>> *not* special. This is just a special case of a general desire: to lift =
a
>> concept into a concrete type that type-erases the implementation of the
>> concept. That sure is a useful idea, but this is not the right way to ge=
t
>> there.
>>
>
See below. I don't think this is correct; Callable is not an expressible
concept (as opposed to Callable<Sig>) to my knowledge.


> Now that's an interesting idea: `any_concept<ConceptName>`, which would
> synthesize the operations specified by the concept. Of course, that would
> require two things we don't have: the ability to introspect the elements =
of
> a concept, and the ability to pass concepts to templates.
>
> This is a pretty good argument for making a concept something other than
> just a function/variable, since this would permit us to provide them as
> template arguments.
>
> Granted, even those two things wouldn't be enough, since we cannot
> automatically synthesize arbitrary global interfaces.
>


You are basically describing "virtual concepts" as per this
work-in-progress proposal (which decided to go
the languae-feature way for argumented reasons: https://github.com/
andyprowl/virtual-concepts



I may be missing something, but I don't see the immediate relevance to this
discussion. As far as I'm aware it is not possible for a concept to model
the - ah, concept - of being callable in general, rather than with a
particular signature.

--=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
> 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/ee9704b3-656d-4b2c-84cf-
> eb03bc0800c5%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/ee9704b3-65=
6d-4b2c-84cf-eb03bc0800c5%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=20
You received this message because you are subscribed to a topic in the
Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this topic, visit https://groups.google.com/a/
isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
To unsubscribe from this group and all its topics, 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/CAOU91ONT037s31FpnZ76VY0D4ye_
vhLbjtFp_i84tT1rm7-O8w%40mail.gmail.com
<https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOU91ONT037s=
31FpnZ76VY0D4ye_vhLbjtFp_i84tT1rm7-O8w%40mail.gmail.com?utm_medium=3Demail&=
utm_source=3Dfooter>
..

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAJnLdObQAf3W9o%2BPLi3F8FNoyyb4vEcOAOnJhdeOAVibs=
ojfpw%40mail.gmail.com.

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

<div dir=3D"auto"><div><br><div class=3D"gmail_extra"><br><div class=3D"gma=
il_quote">On 13 Mar 2017 20:52, &quot;Klaim - Jo=C3=ABl Lamotte&quot; &lt;<=
a href=3D"mailto:mjklaim@gmail.com">mjklaim@gmail.com</a>&gt; wrote:<br typ=
e=3D"attribution"><blockquote class=3D"quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br><div class=
=3D"gmail_extra"><br><div class=3D"gmail_quote"><div class=3D"quoted-text">=
On 13 March 2017 at 19:25, Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"mai=
lto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;</spa=
n> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px =
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"=
ltr">On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smith wrote:<sp=
an class=3D"m_-5028807235619877785gmail-"><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex"><div dir=3D"ltr"><div><div class=3D"gmail_quote">On 13 Mar=
ch 2017 at 04:18, janezz55 . <span dir=3D"ltr">&lt;<a rel=3D"nofollow">jane=
....@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padd=
ing-left:1ex"><div dir=3D"ltr">because the number and type of arguments is =
fixed that way, while std::any can handle any number of arguments of any ty=
pe, that&#39;s why it&#39;s called std::any. Say:<div><br></div><div>slots[=
&quot;selected&quot;] =3D [](int){};</div><div>slots[&quot;selected&quot;](=
1);</div><div><br></div><div>would also work.</div></div></blockquote><div>=
<br></div><div>What about</div><div><br></div><div>slots[&quot;what_is_my_a=
rity&quot;] =3D [](auto...){};</div><div><br></div><div>? If that&#39;s sup=
posed to work, how? (Even if you had a separate any_function type for this =
idea, it still seems fundamentally unable to handle function templates or o=
verload sets, and it gives you an object with a non-type-safe operator().)<=
/div><div></div></div></div></div></blockquote></span></div></blockquote></=
div></div></div></div></blockquote></div></div></div><div dir=3D"auto"><br>=
</div><div dir=3D"auto">Yes, that wouldn&#39;t work, except possibly by a t=
ag constructor to select one preferred signature. The operator() is still t=
ype safe, it just will never succeed.=C2=A0</div><div dir=3D"auto"><br></di=
v><div dir=3D"auto"><div class=3D"gmail_extra"><div class=3D"gmail_quote"><=
blockquote class=3D"quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex"><div dir=3D"ltr"><div class=3D"gmail_extra"><div cl=
ass=3D"gmail_quote"><div class=3D"quoted-text"><blockquote class=3D"gmail_q=
uote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2=
04);padding-left:1ex"><div dir=3D"ltr"><span class=3D"m_-502880723561987778=
5gmail-"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"=
><div><div class=3D"gmail_quote"><div><br></div><div>Fundamentally I comple=
tely agree with other commenters: operator() is *not* special. This is just=
 a special case of a general desire: to lift a concept into a concrete type=
 that type-erases the implementation of the concept. That sure is a useful =
idea, but this is not the right way to get there.</div></div></div></div></=
blockquote></span><div></div></div></blockquote></div></div></div></div></b=
lockquote></div></div></div><div dir=3D"auto"><br></div><div dir=3D"auto">S=
ee below. I don&#39;t think this is correct; Callable is not an expressible=
 concept (as opposed to Callable&lt;Sig&gt;) to my knowledge.=C2=A0</div><d=
iv dir=3D"auto"><br></div><div dir=3D"auto"><div class=3D"gmail_extra"><div=
 class=3D"gmail_quote"><blockquote class=3D"quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div class=
=3D"gmail_extra"><div class=3D"gmail_quote"><div class=3D"quoted-text"><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div><br>Now=
 that&#39;s an interesting idea: `any_concept&lt;ConceptName&gt;`, which wo=
uld synthesize the operations specified by the concept. Of course, that wou=
ld require two things we don&#39;t have: the ability to introspect the elem=
ents of a concept, and the ability to pass concepts to templates.<br><br>Th=
is is a pretty good argument for making a concept something other than just=
 a function/variable, since this would permit us to provide them as templat=
e arguments.<br><br>Granted, even those two things wouldn&#39;t be enough, =
since we cannot automatically synthesize arbitrary global interfaces.<br></=
div></div></blockquote><div><br></div><div><br></div></div><div>You are bas=
ically describing &quot;virtual concepts&quot; as per this work-in-progress=
 proposal (which decided to go</div><div>the languae-feature way for argume=
nted reasons:=C2=A0<a href=3D"https://github.com/andyprowl/virtual-concepts=
" target=3D"_blank">https://github.com/<wbr>andyprowl/virtual-concepts</a><=
/div><div>=C2=A0</div></div></div></div></blockquote></div></div></div><div=
 dir=3D"auto"><br></div><div dir=3D"auto">I may be missing something, but I=
 don&#39;t see the immediate relevance to this discussion. As far as I&#39;=
m aware it is not possible for a concept to model the - ah, concept - of be=
ing callable in general, rather than with a particular signature.=C2=A0</di=
v><div dir=3D"auto"><br></div><div dir=3D"auto"><div class=3D"gmail_extra">=
<div class=3D"gmail_quote"><blockquote class=3D"quote" style=3D"margin:0 0 =
0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div c=
lass=3D"gmail_extra"><div class=3D"gmail_quote"><blockquote class=3D"gmail_=
quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,=
204);padding-left:1ex"><div dir=3D"ltr"><div></div></div><span class=3D"m_-=
5028807235619877785gmail-">

<p></p>

-- <br><div class=3D"quoted-text">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br></div>
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>.<div class=3D"quoted-t=
ext"><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></div></span><div =
class=3D"quoted-text">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/ee9704b3-656d-4b2c-84cf-eb03bc0800c5%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/is<wbr>ocpp.org/d/msgid/std-proposals<wbr>/ee97=
04b3-656d-4b2c-84cf-<wbr>eb03bc0800c5%40isocpp.org</a>.<br>
</div></blockquote></div><br></div></div><div class=3D"quoted-text">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></div>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAOU91ONT037s31FpnZ76VY0D4ye_vhLbjtFp=
_i84tT1rm7-O8w%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfooter"=
 target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-=
<wbr>proposals/<wbr>CAOU91ONT037s31FpnZ76VY0D4ye_<wbr>vhLbjtFp_i84tT1rm7-O8=
w%40mail.<wbr>gmail.com</a>.<br>
</blockquote></div><br></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/CAJnLdObQAf3W9o%2BPLi3F8FNoyyb4vEcOAO=
nJhdeOAVibsojfpw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdObQAf3W9o=
%2BPLi3F8FNoyyb4vEcOAOnJhdeOAVibsojfpw%40mail.gmail.com</a>.<br />

--94eb2c0cfe22bf084b054aa31e2b--

.


Author: "'Matt Calabrese' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Mon, 13 Mar 2017 17:12:14 -0400
Raw View
--001a1141d742702c08054aa32a91
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Mon, Mar 13, 2017 at 4:52 PM, Klaim - Jo=C3=ABl Lamotte <mjklaim@gmail.c=
om>
wrote:

>
>
> On 13 March 2017 at 19:25, Nicol Bolas <jmckesson@gmail.com> wrote:
>
>> On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smith wrote:
>>>
>>> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com> wrote:
>>>
>>>> because the number and type of arguments is fixed that way, while
>>>> std::any can handle any number of arguments of any type, that's why it=
's
>>>> called std::any. Say:
>>>>
>>>> slots["selected"] =3D [](int){};
>>>> slots["selected"](1);
>>>>
>>>> would also work.
>>>>
>>>
>>> What about
>>>
>>> slots["what_is_my_arity"] =3D [](auto...){};
>>>
>>> ? If that's supposed to work, how? (Even if you had a separate
>>> any_function type for this idea, it still seems fundamentally unable to
>>> handle function templates or overload sets, and it gives you an object =
with
>>> a non-type-safe operator().)
>>>
>>> Fundamentally I completely agree with other commenters: operator() is
>>> *not* special. This is just a special case of a general desire: to lift=
 a
>>> concept into a concrete type that type-erases the implementation of the
>>> concept. That sure is a useful idea, but this is not the right way to g=
et
>>> there.
>>>
>>
>> Now that's an interesting idea: `any_concept<ConceptName>`, which would
>> synthesize the operations specified by the concept. Of course, that woul=
d
>> require two things we don't have: the ability to introspect the elements=
 of
>> a concept, and the ability to pass concepts to templates.
>>
>> This is a pretty good argument for making a concept something other than
>> just a function/variable, since this would permit us to provide them as
>> template arguments.
>>
>> Granted, even those two things wouldn't be enough, since we cannot
>> automatically synthesize arbitrary global interfaces.
>>
>
>
> You are basically describing "virtual concepts" as per this
> work-in-progress proposal (which decided to go
> the languae-feature way for argumented reasons: https://github.com/
> andyprowl/virtual-concepts
>

Dynamic/virtual concepts (type-erasure based on concepts) is basically what
the Swift language does and it is powerful. All that a std::function is is
the dynamic version of the Invocable (previously "Callable") concept. I see
this being achievable at the language level with C++0x concepts, but I am
very skeptical about it being possible with Concepts TS due to the nature
of the constraints.

--=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/CANh8DEmXuxw7m_Sy1QZm%2B260%3Ddq0-kMSypcXxUdqZgM=
BHKtkpQ%40mail.gmail.com.

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

<div dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote">On M=
on, Mar 13, 2017 at 4:52 PM, Klaim - Jo=C3=ABl Lamotte <span dir=3D"ltr">&l=
t;<a href=3D"mailto:mjklaim@gmail.com" target=3D"_blank">mjklaim@gmail.com<=
/a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><b=
r><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><span class=3D"=
">On 13 March 2017 at 19:25, Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"m=
ailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;</s=
pan> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0p=
x 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr">On Monday, March 13, 2017 at 1:50:19 PM UTC-4, Richard Smith wrote=
:<span class=3D"m_4526505755661795254gmail-"><blockquote class=3D"gmail_quo=
te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204=
);padding-left:1ex"><div dir=3D"ltr"><div><div class=3D"gmail_quote">On 13 =
March 2017 at 04:18, janezz55 . <span dir=3D"ltr">&lt;<a rel=3D"nofollow">j=
ane...@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex"><div dir=3D"ltr">because the number and type of arguments =
is fixed that way, while std::any can handle any number of arguments of any=
 type, that&#39;s why it&#39;s called std::any. Say:<div><br></div><div>slo=
ts[&quot;selected&quot;] =3D [](int){};</div><div>slots[&quot;selected&quot=
;](1);</div><div><br></div><div>would also work.</div></div></blockquote><d=
iv><br></div><div>What about</div><div><br></div><div>slots[&quot;what_is_m=
y_arity&quot;] =3D [](auto...){};</div><div><br></div><div>? If that&#39;s =
supposed to work, how? (Even if you had a separate any_function type for th=
is idea, it still seems fundamentally unable to handle function templates o=
r overload sets, and it gives you an object with a non-type-safe operator()=
..)</div><div><br></div><div>Fundamentally I completely agree with other com=
menters: operator() is *not* special. This is just a special case of a gene=
ral desire: to lift a concept into a concrete type that type-erases the imp=
lementation of the concept. That sure is a useful idea, but this is not the=
 right way to get there.</div></div></div></div></blockquote></span><div><b=
r>Now that&#39;s an interesting idea: `any_concept&lt;ConceptName&gt;`, whi=
ch would synthesize the operations specified by the concept. Of course, tha=
t would require two things we don&#39;t have: the ability to introspect the=
 elements of a concept, and the ability to pass concepts to templates.<br><=
br>This is a pretty good argument for making a concept something other than=
 just a function/variable, since this would permit us to provide them as te=
mplate arguments.<br><br>Granted, even those two things wouldn&#39;t be eno=
ugh, since we cannot automatically synthesize arbitrary global interfaces.<=
br></div></div></blockquote><div><br></div><div><br></div></span><div>You a=
re basically describing &quot;virtual concepts&quot; as per this work-in-pr=
ogress proposal (which decided to go</div><div>the languae-feature way for =
argumented reasons:=C2=A0<a href=3D"https://github.com/andyprowl/virtual-co=
ncepts" target=3D"_blank">https://github.com/<wbr>andyprowl/virtual-concept=
s</a></div></div></div></div></blockquote><div><br></div><div>Dynamic/virtu=
al concepts (type-erasure based on concepts) is basically what the Swift la=
nguage does and it is powerful. All that a std::function is is the dynamic =
version of the Invocable (previously &quot;Callable&quot;) concept. I see t=
his being achievable at the language level with C++0x concepts, but I am ve=
ry skeptical about it being possible with Concepts TS due to the nature of =
the constraints.</div></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CANh8DEmXuxw7m_Sy1QZm%2B260%3Ddq0-kMS=
ypcXxUdqZgMBHKtkpQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CANh8DEmXuxw7=
m_Sy1QZm%2B260%3Ddq0-kMSypcXxUdqZgMBHKtkpQ%40mail.gmail.com</a>.<br />

--001a1141d742702c08054aa32a91--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Mon, 13 Mar 2017 16:15:25 -0700
Raw View
Em segunda-feira, 13 de mar=C3=A7o de 2017, =C3=A0s 13:48:59 PDT, 'Edward C=
atmur' via=20
ISO C++ Standard - Future Proposals escreveu:
> On 13 Mar 2017 15:54, "Thiago Macieira" <thiago@macieira.org> wrote:
>=20
> On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrote:
> > because of information hiding and convenience. Also, why use 2 type
> > erasers? That's inefficient.
>=20
> Because something must know the actual type. Let me take your example:
>=20
> slots["selected"] =3D [](int){};
> slots["selected"](1);
>=20
> What happens if I called slos["selected"]()? How about
> slots["selected"](1.0)?
> What should happen here?
>=20
>  a) UB
>  b) runtime error / exception thrown
>  c) compile error
>=20
>=20
> b) in both cases. As discussed above, this is trivial to implement and
> incurs zero run time cost.

Except for the part that it's not trivial and has a runtime cost.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/1839045.DBs8OGbG07%40tjmaciei-mobl1.

.


Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date: Mon, 13 Mar 2017 16:15:31 -0700 (PDT)
Raw View
------=_Part_11220_1659788772.1489446931815
Content-Type: multipart/alternative;
 boundary="----=_Part_11221_124609124.1489446931815"

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

On Monday, March 13, 2017 at 8:54:18 AM UTC-7, Thiago Macieira wrote:
>
> On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrote:=
=20
> > because of information hiding and convenience. Also, why use 2 type=20
> > erasers? That's inefficient.=20
>
> Because something must know the actual type. Let me take your example:=20
>
> slots["selected"] =3D [](int){};=20
> slots["selected"](1);=20
>
> What happens if I called slos["selected"]()? How about=20
> slots["selected"](1.0)?=20
> What should happen here?=20
>
>  a) UB=20
>  b) runtime error / exception thrown=20
>  c) compile error=20
>

This relates to a feature that I wish existed, but which is not actually=20
implementable: std::visit for std::any objects!

    std::any x =3D something();
    my::visit(x, [](auto&& arg) {
        printf("The dynamic type of x is %s\n", typeid(arg).name());
    });

If this were possible to implement, then it would solve the OP's problem=20
(just define your visitor as [](auto&& arg){ arg(); }); but my strong=20
impression is that *it's impossible to implement this my::visit() function*=
,=20
because heck, the compiler has to generate code at some point, and how can=
=20
it possibly generate "all possible instantiations of that lambda's=20
templated operator()" when the set of possible types is open-ended?
That's why we got std::visit for std::variant, but not for std::any =E2=80=
=94=20
because it is *technologically impossible* to implement std::visit for=20
std::any.

The same impossibility objection applies for *any* open-ended visitation=20
idiom, no matter whether you spell it my::visit(std::any, F&&) or=20
std::any::operator()(A&&...).

If my argument above is wrong, please let me know and I'll write the=20
obvious proposal for Albuquerque. ;)

=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/a3a4babd-fff1-40a8-b075-88dfe4a4fbeb%40isocpp.or=
g.

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

<div dir=3D"ltr">On Monday, March 13, 2017 at 8:54:18 AM UTC-7, Thiago Maci=
eira wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left=
: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">On segunda-feira, 1=
3 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrote:
<br>&gt; because of information hiding and convenience. Also, why use 2 typ=
e
<br>&gt; erasers? That&#39;s inefficient.
<br>
<br>Because something must know the actual type. Let me take your example:
<br>
<br>slots[&quot;selected&quot;] =3D [](int){};
<br>slots[&quot;selected&quot;](1);
<br>
<br>What happens if I called slos[&quot;selected&quot;]()? How about slots[=
&quot;selected&quot;](1.0)?=20
<br>What should happen here?
<br>
<br>=C2=A0a) UB
<br>=C2=A0b) runtime error / exception thrown
<br>=C2=A0c) compile error
<br></blockquote><div><br></div><div>This relates to a feature that I wish =
existed, but which is not actually implementable: std::visit for std::any o=
bjects!</div><div><br></div><div><font face=3D"courier new, monospace">=C2=
=A0 =C2=A0 std::any x =3D something();</font></div><div><font face=3D"couri=
er new, monospace">=C2=A0 =C2=A0 my::visit(x, [](auto&amp;&amp; arg) {</fon=
t></div><div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 printf(&quot;The dynamic type of x is %s\n&quot;, typeid(arg).name());<=
/font></div><div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 });</f=
ont></div><div><br></div><div>If this were possible to implement, then it w=
ould solve the OP&#39;s problem (just define your visitor as <font face=3D"=
courier new, monospace">[](auto&amp;&amp; arg){ arg(); }</font><font face=
=3D"arial, sans-serif">);</font> but my strong impression is that <b>it&#39=
;s impossible to implement this my::visit() function</b>, because heck, the=
 compiler has to generate code at some point, and how can it possibly gener=
ate &quot;all possible instantiations of that lambda&#39;s templated operat=
or()&quot; when the set of possible types is open-ended?</div><div>That&#39=
;s why we got std::visit for std::variant, but not for std::any =E2=80=94 b=
ecause it is <i>technologically impossible</i> to implement std::visit for =
std::any.</div><div><br></div><div>The same impossibility objection applies=
 for <i>any</i> open-ended visitation idiom, no matter whether you spell it=
 <font face=3D"courier new, monospace">my::visit(std::any, F&amp;&amp;)</fo=
nt> or <font face=3D"courier new, monospace">std::any::operator()(A&amp;&am=
p;...)</font>.</div><div><br></div><div>If my argument above is wrong, plea=
se let me know and I&#39;ll write the obvious proposal for Albuquerque. ;)<=
/div><div><br></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/a3a4babd-fff1-40a8-b075-88dfe4a4fbeb%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/a3a4babd-fff1-40a8-b075-88dfe4a4fbeb=
%40isocpp.org</a>.<br />

------=_Part_11221_124609124.1489446931815--

------=_Part_11220_1659788772.1489446931815--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Mon, 13 Mar 2017 16:33:41 -0700 (PDT)
Raw View
------=_Part_3452_417874696.1489448021557
Content-Type: multipart/alternative;
 boundary="----=_Part_3453_620983034.1489448021557"

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



On Monday, March 13, 2017 at 7:15:31 PM UTC-4, Arthur O'Dwyer wrote:
>
> On Monday, March 13, 2017 at 8:54:18 AM UTC-7, Thiago Macieira wrote:
>>
>> On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrote=
:=20
>> > because of information hiding and convenience. Also, why use 2 type=20
>> > erasers? That's inefficient.=20
>>
>> Because something must know the actual type. Let me take your example:=
=20
>>
>> slots["selected"] =3D [](int){};=20
>> slots["selected"](1);=20
>>
>> What happens if I called slos["selected"]()? How about=20
>> slots["selected"](1.0)?=20
>> What should happen here?=20
>>
>>  a) UB=20
>>  b) runtime error / exception thrown=20
>>  c) compile error=20
>>
>
> This relates to a feature that I wish existed, but which is not actually=
=20
> implementable: std::visit for std::any objects!
>
>     std::any x =3D something();
>     my::visit(x, [](auto&& arg) {
>         printf("The dynamic type of x is %s\n", typeid(arg).name());
>     });
>
> If this were possible to implement, then it would solve the OP's problem=
=20
> (just define your visitor as [](auto&& arg){ arg(); }); but my strong=20
> impression is that *it's impossible to implement this my::visit()=20
> function*, because heck, the compiler has to generate code at some point,=
=20
> and how can it possibly generate "all possible instantiations of that=20
> lambda's templated operator()" when the set of possible types is open-end=
ed?
> That's why we got std::visit for std::variant, but not for std::any =E2=
=80=94=20
> because it is *technologically impossible* to implement std::visit for=20
> std::any.
>
> The same impossibility objection applies for *any* open-ended visitation=
=20
> idiom, no matter whether you spell it my::visit(std::any, F&&) or=20
> std::any::operator()(A&&...).
>
> If my argument above is wrong, please let me know and I'll write the=20
> obvious proposal for Albuquerque. ;)
>

Hm... That's a really good point.

`std::function` works because it is statically provided the call signature=
=20
to use. Therefore, when it does its type erasure magic, it has a base class=
=20
with a virtual function that has the call signature. That is, as I=20
understand it, the basic essence of how it does type erasure. This base=20
class is defined/referenced as part of `function`'s implementation.

So how would such type erasure work when the signature is not part of the=
=20
erasing type's definition? `any` works because its type erasure only needs=
=20
to support one operation: fetching the `type_info` for the original type.

Also, it's important to remember that you cannot declare a template=20
function to be virtual. So you can't get around this by declaring the=20
`operator()` to be a variadic template.

--=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/4437e2de-8bfb-4d3c-ad90-5efc8ead852a%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>On Monday, March 13, 2017 at 7:15:31 PM UTC-4, Art=
hur O&#39;Dwyer wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr">On Monday, March 13, 2017 at 8:54:18 AM UTC-7, Thiago Macieira wro=
te:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex">On segunda-feira, 13 de mar=C3=
=A7o de 2017 08:38:24 PDT janezz55 . wrote:
<br>&gt; because of information hiding and convenience. Also, why use 2 typ=
e
<br>&gt; erasers? That&#39;s inefficient.
<br>
<br>Because something must know the actual type. Let me take your example:
<br>
<br>slots[&quot;selected&quot;] =3D [](int){};
<br>slots[&quot;selected&quot;](1);
<br>
<br>What happens if I called slos[&quot;selected&quot;]()? How about slots[=
&quot;selected&quot;](1.0)?=20
<br>What should happen here?
<br>
<br>=C2=A0a) UB
<br>=C2=A0b) runtime error / exception thrown
<br>=C2=A0c) compile error
<br></blockquote><div><br></div><div>This relates to a feature that I wish =
existed, but which is not actually implementable: std::visit for std::any o=
bjects!</div><div><br></div><div><font face=3D"courier new, monospace">=C2=
=A0 =C2=A0 std::any x =3D something();</font></div><div><font face=3D"couri=
er new, monospace">=C2=A0 =C2=A0 my::visit(x, [](auto&amp;&amp; arg) {</fon=
t></div><div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 printf(&quot;The dynamic type of x is %s\n&quot;, typeid(arg).name());<=
/font></div><div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 });</f=
ont></div><div><br></div><div>If this were possible to implement, then it w=
ould solve the OP&#39;s problem (just define your visitor as <font face=3D"=
courier new, monospace">[](auto&amp;&amp; arg){ arg(); }</font><font face=
=3D"arial, sans-serif">);</font> but my strong impression is that <b>it&#39=
;s impossible to implement this my::visit() function</b>, because heck, the=
 compiler has to generate code at some point, and how can it possibly gener=
ate &quot;all possible instantiations of that lambda&#39;s templated operat=
or()&quot; when the set of possible types is open-ended?</div><div>That&#39=
;s why we got std::visit for std::variant, but not for std::any =E2=80=94 b=
ecause it is <i>technologically impossible</i> to implement std::visit for =
std::any.</div><div><br></div><div>The same impossibility objection applies=
 for <i>any</i> open-ended visitation idiom, no matter whether you spell it=
 <font face=3D"courier new, monospace">my::visit(std::any, F&amp;&amp;)</fo=
nt> or <font face=3D"courier new, monospace">std::any::operator()(A&amp;&am=
p;...)</font>.</div><div><br></div><div>If my argument above is wrong, plea=
se let me know and I&#39;ll write the obvious proposal for Albuquerque. ;)<=
/div></div></blockquote><div><br></div>Hm... That&#39;s a really good point=
..<br><br>`std::function` works because it is statically provided the call s=
ignature to use. Therefore, when it does its type erasure magic, it has a b=
ase class with a virtual function that has the call signature. That is, as =
I understand it, the basic essence of how it does type erasure. This base c=
lass is defined/referenced as part of `function`&#39;s implementation.<br><=
br>So how would such type erasure work when the signature is not part of th=
e erasing type&#39;s definition? `any` works because its type erasure only =
needs to support one operation: fetching the `type_info` for the original t=
ype.<br><br>Also, it&#39;s important to remember that you cannot declare a =
template function to be virtual. So you can&#39;t get around this by declar=
ing the `operator()` to be a variadic template.<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/4437e2de-8bfb-4d3c-ad90-5efc8ead852a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/4437e2de-8bfb-4d3c-ad90-5efc8ead852a=
%40isocpp.org</a>.<br />

------=_Part_3453_620983034.1489448021557--

------=_Part_3452_417874696.1489448021557--

.


Author: Nevin Liber <nevin@eviloverlord.com>
Date: Mon, 13 Mar 2017 19:35:30 -0500
Raw View
--94eb2c076ed0c1e8f7054aa6035e
Content-Type: text/plain; charset=UTF-8

On Mon, Mar 13, 2017 at 6:33 PM, Nicol Bolas <jmckesson@gmail.com> wrote:

> So how would such type erasure work when the signature is not part of the
> erasing type's definition? `any` works because its type erasure only needs
> to support one operation: fetching the `type_info` for the original type.
>

Copying and destruction are also operations on any that are type erased.
--
 Nevin ":-)" Liber  <mailto:nevin@eviloverlord.com>  +1-847-691-1404

--
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/CAGg_6%2BPCXWSy8bJNZLxjoV57vR6mLSFRXZbdZO9UG9A%2BjCo%2BEA%40mail.gmail.com.

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

<div dir=3D"ltr"><div class=3D"gmail_extra">On Mon, Mar 13, 2017 at 6:33 PM=
, Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" =
target=3D"_blank">jmckesson@gmail.com</a>&gt;</span> wrote:<br><div class=
=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">So how wou=
ld such type erasure work when the signature is not part of the erasing typ=
e&#39;s definition? `any` works because its type erasure only needs to supp=
ort one operation: fetching the `type_info` for the original type.<br></div=
></blockquote></div><br>Copying and destruction are also operations on any =
that are type erased.<br>-- <br><div class=3D"gmail_signature" data-smartma=
il=3D"gmail_signature"><div dir=3D"ltr"><div><div dir=3D"ltr"><div>=C2=A0Ne=
vin &quot;:-)&quot; Liber=C2=A0 &lt;mailto:<a href=3D"mailto:nevin@evilover=
lord.com" target=3D"_blank">nevin@eviloverlord.com</a>&gt; =C2=A0+1-847-691=
-1404</div></div></div></div></div>
</div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAGg_6%2BPCXWSy8bJNZLxjoV57vR6mLSFRXZ=
bdZO9UG9A%2BjCo%2BEA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAGg_6%2BPC=
XWSy8bJNZLxjoV57vR6mLSFRXZbdZO9UG9A%2BjCo%2BEA%40mail.gmail.com</a>.<br />

--94eb2c076ed0c1e8f7054aa6035e--

.


Author: Tony V E <tvaneerd@gmail.com>
Date: Mon, 13 Mar 2017 20:38:54 -0400
Raw View
--001a1144470e7eac87054aa60dcb
Content-Type: text/plain; charset=UTF-8

I think Boost.TypeErasure is relevant to this thread.
http://www.boost.org/doc/libs/1_63_0/doc/html/boost_typeerasure.html
also under "Predefined Concepts"
http://www.boost.org/doc/libs/1_63_0/doc/html/boost_typeerasure/predef.html
is

callable<Sig, T>

http://www.boost.org/doc/libs/1_63_0/doc/html/boost/type_erasure/callable.html



--
Be seeing you,
Tony

--
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/CAOHCbis_F30hzC5PD5_K%2BS7egxE5zM8dgXJwabTh3_WWSoeF9A%40mail.gmail.com.

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

<div dir=3D"ltr"><div><div><br></div>I think Boost.TypeErasure is relevant =
to this thread.<br><a href=3D"http://www.boost.org/doc/libs/1_63_0/doc/html=
/boost_typeerasure.html">http://www.boost.org/doc/libs/1_63_0/doc/html/boos=
t_typeerasure.html</a><br></div>also under &quot;Predefined Concepts&quot;<=
br><a href=3D"http://www.boost.org/doc/libs/1_63_0/doc/html/boost_typeerasu=
re/predef.html">http://www.boost.org/doc/libs/1_63_0/doc/html/boost_typeera=
sure/predef.html</a><br clear=3D"all"><div><div><div class=3D"gmail_extra">=
is <br><p>
                <code class=3D"gmail-computeroutput">callable</code><code c=
lass=3D"gmail-computeroutput"><span class=3D"gmail-special">&lt;</span><spa=
n class=3D"gmail-identifier">Sig</span><span class=3D"gmail-special">,</spa=
n> <span class=3D"gmail-identifier">T</span><span class=3D"gmail-special">&=
gt;</span></code>
              </p><p><a href=3D"http://www.boost.org/doc/libs/1_63_0/doc/ht=
ml/boost/type_erasure/callable.html">http://www.boost.org/doc/libs/1_63_0/d=
oc/html/boost/type_erasure/callable.html</a></p><p><br></p><p><br></p></div=
><div class=3D"gmail_extra">-- <br><div class=3D"gmail_signature"><div dir=
=3D"ltr"><div>Be seeing you,<br></div>Tony<br></div></div>
</div></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAOHCbis_F30hzC5PD5_K%2BS7egxE5zM8dgX=
JwabTh3_WWSoeF9A%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOHCbis_F30hzC=
5PD5_K%2BS7egxE5zM8dgXJwabTh3_WWSoeF9A%40mail.gmail.com</a>.<br />

--001a1144470e7eac87054aa60dcb--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Tue, 14 Mar 2017 05:15:39 +0100
Raw View
--001a11449ffcad6fed054aa914b9
Content-Type: text/plain; charset=UTF-8

I think boosts class is a costumizable type eraser. you can generate your
own std::function with it. Std::any is simple to use and relieves the user
of having to specify a signature, hides the complexity from the user. As
far as a visitor is concerned, I think it should be possible to obtain a
type id and then you'd have to any cast. But I never needed that. why a
visitor, if you have type id already?

On Mar 14, 2017 1:38 AM, "Tony V E" <tvaneerd@gmail.com> wrote:

>
> I think Boost.TypeErasure is relevant to this thread.
> http://www.boost.org/doc/libs/1_63_0/doc/html/boost_typeerasure.html
> also under "Predefined Concepts"
> http://www.boost.org/doc/libs/1_63_0/doc/html/boost_
> typeerasure/predef.html
> is
>
> callable<Sig, T>
>
> http://www.boost.org/doc/libs/1_63_0/doc/html/boost/type_
> erasure/callable.html
>
>
>
> --
> Be seeing you,
> Tony
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAOHCbis_F30hzC5PD5_
> K%2BS7egxE5zM8dgXJwabTh3_WWSoeF9A%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAOHCbis_F30hzC5PD5_K%2BS7egxE5zM8dgXJwabTh3_WWSoeF9A%40mail.gmail.com?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/CAO9E8GFJ1MocwwfTkei7zhVRad8nvpF7PgZxH6Fh%3DvWcX1%2B0Fg%40mail.gmail.com.

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

<div dir=3D"auto">I think boosts class is a costumizable type eraser. you c=
an generate your own std::function with it. Std::any is simple to use and r=
elieves the user of having to specify a signature, hides the complexity fro=
m the user. As far as a visitor is concerned, I think it should be possible=
 to obtain a type id and then you&#39;d have to any cast. But I never neede=
d that. why a visitor, if you have type id already?</div><div class=3D"gmai=
l_extra"><br><div class=3D"gmail_quote">On Mar 14, 2017 1:38 AM, &quot;Tony=
 V E&quot; &lt;<a href=3D"mailto:tvaneerd@gmail.com">tvaneerd@gmail.com</a>=
&gt; wrote:<br type=3D"attribution"><blockquote class=3D"gmail_quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=
=3D"ltr"><div><div><br></div>I think Boost.TypeErasure is relevant to this =
thread.<br><a href=3D"http://www.boost.org/doc/libs/1_63_0/doc/html/boost_t=
ypeerasure.html" target=3D"_blank">http://www.boost.org/doc/libs/<wbr>1_63_=
0/doc/html/boost_<wbr>typeerasure.html</a><br></div>also under &quot;Predef=
ined Concepts&quot;<br><a href=3D"http://www.boost.org/doc/libs/1_63_0/doc/=
html/boost_typeerasure/predef.html" target=3D"_blank">http://www.boost.org/=
doc/libs/<wbr>1_63_0/doc/html/boost_<wbr>typeerasure/predef.html</a><br cle=
ar=3D"all"><div><div><div class=3D"gmail_extra">is <br><p>
                <code class=3D"m_6438229739969038290gmail-computeroutput">c=
allable</code><code class=3D"m_6438229739969038290gmail-computeroutput"><sp=
an class=3D"m_6438229739969038290gmail-special">&lt;</span><span class=3D"m=
_6438229739969038290gmail-identifier">Sig</span><span class=3D"m_6438229739=
969038290gmail-special">,</span> <span class=3D"m_6438229739969038290gmail-=
identifier">T</span><span class=3D"m_6438229739969038290gmail-special">&gt;=
</span></code>
              </p><p><a href=3D"http://www.boost.org/doc/libs/1_63_0/doc/ht=
ml/boost/type_erasure/callable.html" target=3D"_blank">http://www.boost.org=
/doc/libs/<wbr>1_63_0/doc/html/boost/type_<wbr>erasure/callable.html</a></p=
><p><br></p><p><br></p></div><div class=3D"gmail_extra">-- <br><div class=
=3D"m_6438229739969038290gmail_signature"><div dir=3D"ltr"><div>Be seeing y=
ou,<br></div>Tony<br></div></div>
</div></div></div></div>

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAOHCbis_F30hzC5PD5_K%2BS7egxE5zM8dgX=
JwabTh3_WWSoeF9A%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoote=
r" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgid/st=
d-<wbr>proposals/CAOHCbis_F30hzC5PD5_<wbr>K%2BS7egxE5zM8dgXJwabTh3_<wbr>WWS=
oeF9A%40mail.gmail.com</a>.<br>
</blockquote></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GFJ1MocwwfTkei7zhVRad8nvpF7PgZx=
H6Fh%3DvWcX1%2B0Fg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GFJ1Moc=
wwfTkei7zhVRad8nvpF7PgZxH6Fh%3DvWcX1%2B0Fg%40mail.gmail.com</a>.<br />

--001a11449ffcad6fed054aa914b9--

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Tue, 14 Mar 2017 08:17:21 +0000
Raw View
--94eb2c0cfe22115acc054aac7558
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Mon, Mar 13, 2017 at 11:15 PM, Thiago Macieira <thiago@macieira.org>
wrote:

> Em segunda-feira, 13 de mar=C3=A7o de 2017, =C3=A0s 13:48:59 PDT, 'Edward=
 Catmur' via
> ISO C++ Standard - Future Proposals escreveu:
> > On 13 Mar 2017 15:54, "Thiago Macieira" <thiago@macieira.org> wrote:
> >
> > On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrot=
e:
> > > because of information hiding and convenience. Also, why use 2 type
> > > erasers? That's inefficient.
> >
> > Because something must know the actual type. Let me take your example:
> >
> > slots["selected"] =3D [](int){};
> > slots["selected"](1);
> >
> > What happens if I called slos["selected"]()? How about
> > slots["selected"](1.0)?
> > What should happen here?
> >
> >  a) UB
> >  b) runtime error / exception thrown
> >  c) compile error
> >
> >
> > b) in both cases. As discussed above, this is trivial to implement and
> > incurs zero run time cost.
>
> Except for the part that it's not trivial and has a runtime cost.
>

A small code size increase, admittedly, but zero extra code executed if the
feature is not used. As for triviality, that's in the eye of the beholder,
but I'm certain that any library maintainer presented with the
specification would consider the implementation trivial.


> --
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>    Software Architect - Intel Open Source Technology Center
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/1839045.DBs8OGbG07%40tjmaciei-mobl1.
>

--=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/CAJnLdOZTk-KOz3VDpRV%2Bfdpo6u56Bq%2BmuPncC_%2BfW=
7m9i0CPFA%40mail.gmail.com.

--94eb2c0cfe22115acc054aac7558
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 Mon, Mar 13, 2017 at 11:15 PM, Thiago Macieira <span dir=3D"ltr">&lt=
;<a href=3D"mailto:thiago@macieira.org" target=3D"_blank">thiago@macieira.o=
rg</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"marg=
in:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Em segunda-feira=
, 13 de mar=C3=A7o de 2017, =C3=A0s 13:48:59 PDT, &#39;Edward Catmur&#39; v=
ia<br>
ISO C++ Standard - Future Proposals escreveu:<br>
&gt; On 13 Mar 2017 15:54, &quot;Thiago Macieira&quot; &lt;<a href=3D"mailt=
o:thiago@macieira.org">thiago@macieira.org</a>&gt; wrote:<br>
&gt;<br>
&gt; On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wro=
te:<br>
&gt; &gt; because of information hiding and convenience. Also, why use 2 ty=
pe<br>
&gt; &gt; erasers? That&#39;s inefficient.<br>
&gt;<br>
&gt; Because something must know the actual type. Let me take your example:=
<br>
&gt;<br>
&gt; slots[&quot;selected&quot;] =3D [](int){};<br>
&gt; slots[&quot;selected&quot;](1);<br>
&gt;<br>
&gt; What happens if I called slos[&quot;selected&quot;]()? How about<br>
&gt; slots[&quot;selected&quot;](1.0)?<br>
&gt; What should happen here?<br>
&gt;<br>
&gt;=C2=A0 a) UB<br>
&gt;=C2=A0 b) runtime error / exception thrown<br>
&gt;=C2=A0 c) compile error<br>
&gt;<br>
&gt;<br>
&gt; b) in both cases. As discussed above, this is trivial to implement and=
<br>
&gt; incurs zero run time cost.<br>
<br>
Except for the part that it&#39;s not trivial and has a runtime cost.<span =
class=3D"HOEnZb"><font color=3D"#888888"><br></font></span></blockquote><di=
v><br></div><div>A small code size increase, admittedly, but zero extra cod=
e executed if the feature is not used. As for triviality, that&#39;s in the=
 eye of the beholder, but I&#39;m certain that any library maintainer prese=
nted with the specification would consider the implementation trivial.</div=
><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .=
8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"HOEnZb"><fo=
nt color=3D"#888888">
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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/1839045.DBs8OGbG07%40tjmaciei-mobl1" =
rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/<wbr>isocp=
p.org/d/msgid/std-<wbr>proposals/1839045.DBs8OGbG07%<wbr>40tjmaciei-mobl1</=
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/CAJnLdOZTk-KOz3VDpRV%2Bfdpo6u56Bq%2Bm=
uPncC_%2BfW7m9i0CPFA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdOZTk-=
KOz3VDpRV%2Bfdpo6u56Bq%2BmuPncC_%2BfW7m9i0CPFA%40mail.gmail.com</a>.<br />

--94eb2c0cfe22115acc054aac7558--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Tue, 14 Mar 2017 09:23:47 +0100
Raw View
--f403045d9a18186c26054aac8c16
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

My thoughts exactly. I'm amazed how complex signal/slot implementations of
many C++ applications are, I think my proposal would simplify these. The
small size increase is better than introducing a new language feature (C#
delegate comes to mind).

2017-03-14 9:17 GMT+01:00 'Edward Catmur' via ISO C++ Standard - Future
Proposals <std-proposals@isocpp.org>:

>
>
> On Mon, Mar 13, 2017 at 11:15 PM, Thiago Macieira <thiago@macieira.org>
> wrote:
>
>> Em segunda-feira, 13 de mar=C3=A7o de 2017, =C3=A0s 13:48:59 PDT, 'Edwar=
d Catmur'
>> via
>> ISO C++ Standard - Future Proposals escreveu:
>> > On 13 Mar 2017 15:54, "Thiago Macieira" <thiago@macieira.org> wrote:
>> >
>> > On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wro=
te:
>> > > because of information hiding and convenience. Also, why use 2 type
>> > > erasers? That's inefficient.
>> >
>> > Because something must know the actual type. Let me take your example:
>> >
>> > slots["selected"] =3D [](int){};
>> > slots["selected"](1);
>> >
>> > What happens if I called slos["selected"]()? How about
>> > slots["selected"](1.0)?
>> > What should happen here?
>> >
>> >  a) UB
>> >  b) runtime error / exception thrown
>> >  c) compile error
>> >
>> >
>> > b) in both cases. As discussed above, this is trivial to implement and
>> > incurs zero run time cost.
>>
>> Except for the part that it's not trivial and has a runtime cost.
>>
>
> A small code size increase, admittedly, but zero extra code executed if
> the feature is not used. As for triviality, that's in the eye of the
> beholder, but I'm certain that any library maintainer presented with the
> specification would consider the implementation trivial.
>
>
>> --
>> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>>    Software Architect - Intel Open Source Technology Center
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this topic, visit https://groups.google.com/a/is
>> ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/1839045.DBs8OGbG07%40tjmaciei-mobl1.
>>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAJnLdOZTk-KOz3VDpRV%2Bfdpo6u56Bq%
> 2BmuPncC_%2BfW7m9i0CPFA%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdOZTk-=
KOz3VDpRV%2Bfdpo6u56Bq%2BmuPncC_%2BfW7m9i0CPFA%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GG8BjUESUyfJPTkvCsukisGfpaBMPWYMNPmGJDWvpF=
2Ng%40mail.gmail.com.

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

<div dir=3D"ltr">My thoughts exactly. I&#39;m amazed how complex signal/slo=
t implementations of many C++ applications are, I think my proposal would s=
implify these. The small size increase is better than introducing a new lan=
guage feature (C# delegate comes to mind).</div><div class=3D"gmail_extra">=
<br><div class=3D"gmail_quote">2017-03-14 9:17 GMT+01:00 &#39;Edward Catmur=
&#39; via ISO C++ Standard - Future Proposals <span dir=3D"ltr">&lt;<a href=
=3D"mailto:std-proposals@isocpp.org" target=3D"_blank">std-proposals@isocpp=
..org</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><br=
><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Mon, Mar 13, =
2017 at 11:15 PM, Thiago Macieira <span dir=3D"ltr">&lt;<a href=3D"mailto:t=
hiago@macieira.org" target=3D"_blank">thiago@macieira.org</a>&gt;</span> wr=
ote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border=
-left:1px #ccc solid;padding-left:1ex">Em segunda-feira, 13 de mar=C3=A7o d=
e 2017, =C3=A0s 13:48:59 PDT, &#39;Edward Catmur&#39; via<br>
ISO C++ Standard - Future Proposals escreveu:<br>
&gt; On 13 Mar 2017 15:54, &quot;Thiago Macieira&quot; &lt;<a href=3D"mailt=
o:thiago@macieira.org" target=3D"_blank">thiago@macieira.org</a>&gt; wrote:=
<br>
&gt;<br>
&gt; On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wro=
te:<br>
&gt; &gt; because of information hiding and convenience. Also, why use 2 ty=
pe<br>
&gt; &gt; erasers? That&#39;s inefficient.<br>
&gt;<br>
&gt; Because something must know the actual type. Let me take your example:=
<br>
&gt;<br>
&gt; slots[&quot;selected&quot;] =3D [](int){};<br>
&gt; slots[&quot;selected&quot;](1);<br>
&gt;<br>
&gt; What happens if I called slos[&quot;selected&quot;]()? How about<br>
&gt; slots[&quot;selected&quot;](1.0)?<br>
&gt; What should happen here?<br>
&gt;<br>
&gt;=C2=A0 a) UB<br>
&gt;=C2=A0 b) runtime error / exception thrown<br>
&gt;=C2=A0 c) compile error<br>
&gt;<br>
&gt;<br>
&gt; b) in both cases. As discussed above, this is trivial to implement and=
<br>
&gt; incurs zero run time cost.<br>
<br>
Except for the part that it&#39;s not trivial and has a runtime cost.<span =
class=3D"m_2429558284221456196HOEnZb"><font color=3D"#888888"><br></font></=
span></blockquote><div><br></div><div>A small code size increase, admittedl=
y, but zero extra code executed if the feature is not used. As for triviali=
ty, that&#39;s in the eye of the beholder, but I&#39;m certain that any lib=
rary maintainer presented with the specification would consider the impleme=
ntation trivial.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span=
 class=3D"m_2429558284221456196HOEnZb"><font color=3D"#888888">
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<span =
class=3D"HOEnZb"><font color=3D"#888888"><br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/s=
td-proposals<wbr>/cJD8urBWN7c/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" target=3D"_blank">std-pr=
oposals+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/1839045.DBs8OGbG07%40tjmaciei-mobl1" =
rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/is<wbr>ocp=
p.org/d/msgid/std-proposals<wbr>/1839045.DBs8OGbG07%40tjmaciei<wbr>-mobl1</=
a>.<br>
</font></span></font></span></blockquote></div><span class=3D"HOEnZb"><font=
 color=3D"#888888"><br></font></span></div></div><span class=3D"HOEnZb"><fo=
nt color=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAJnLdOZTk-KOz3VDpRV%2Bfdpo6u56Bq%2Bm=
uPncC_%2BfW7m9i0CPFA%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Df=
ooter" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/msgi=
d/std-<wbr>proposals/CAJnLdOZTk-<wbr>KOz3VDpRV%2Bfdpo6u56Bq%<wbr>2BmuPncC_%=
2BfW7m9i0CPFA%<wbr>40mail.gmail.com</a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GG8BjUESUyfJPTkvCsukisGfpaBMPWY=
MNPmGJDWvpF2Ng%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GG8BjUESUyf=
JPTkvCsukisGfpaBMPWYMNPmGJDWvpF2Ng%40mail.gmail.com</a>.<br />

--f403045d9a18186c26054aac8c16--

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Tue, 14 Mar 2017 08:30:32 +0000
Raw View
--94eb2c0cfe22388fb5054aaca4fd
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Mon, Mar 13, 2017 at 11:33 PM, Nicol Bolas <jmckesson@gmail.com> wrote:

>
>
> On Monday, March 13, 2017 at 7:15:31 PM UTC-4, Arthur O'Dwyer wrote:
>>
>> On Monday, March 13, 2017 at 8:54:18 AM UTC-7, Thiago Macieira wrote:
>>>
>>> On segunda-feira, 13 de mar=C3=A7o de 2017 08:38:24 PDT janezz55 . wrot=
e:
>>> > because of information hiding and convenience. Also, why use 2 type
>>> > erasers? That's inefficient.
>>>
>>> Because something must know the actual type. Let me take your example:
>>>
>>> slots["selected"] =3D [](int){};
>>> slots["selected"](1);
>>>
>>> What happens if I called slos["selected"]()? How about
>>> slots["selected"](1.0)?
>>> What should happen here?
>>>
>>>  a) UB
>>>  b) runtime error / exception thrown
>>>  c) compile error
>>>
>>
>> This relates to a feature that I wish existed, but which is not actually
>> implementable: std::visit for std::any objects!
>>
>>     std::any x =3D something();
>>     my::visit(x, [](auto&& arg) {
>>         printf("The dynamic type of x is %s\n", typeid(arg).name());
>>     });
>>
>> If this were possible to implement, then it would solve the OP's problem
>> (just define your visitor as [](auto&& arg){ arg(); }); but my strong
>> impression is that *it's impossible to implement this my::visit()
>> function*, because heck, the compiler has to generate code at some
>> point, and how can it possibly generate "all possible instantiations of
>> that lambda's templated operator()" when the set of possible types is
>> open-ended?
>> That's why we got std::visit for std::variant, but not for std::any =E2=
=80=94
>> because it is *technologically impossible* to implement std::visit for
>> std::any.
>>
>> The same impossibility objection applies for *any* open-ended visitation
>> idiom, no matter whether you spell it my::visit(std::any, F&&) or
>> std::any::operator()(A&&...).
>>
>> If my argument above is wrong, please let me know and I'll write the
>> obvious proposal for Albuquerque. ;)
>>
>
> Hm... That's a really good point.
>
> `std::function` works because it is statically provided the call signatur=
e
> to use. Therefore, when it does its type erasure magic, it has a base cla=
ss
> with a virtual function that has the call signature. That is, as I
> understand it, the basic essence of how it does type erasure. This base
> class is defined/referenced as part of `function`'s implementation.
>

That's the implementation technique used in toy examples and student
exercises. Production implementations use more efficient and more evolvable
techniques, although the expressive power is the same.

So how would such type erasure work when the signature is not part of the
> erasing type's definition? `any` works because its type erasure only need=
s
> to support one operation: fetching the `type_info` for the original type.
>

See above. The signature is supplied at construction time and at calling
time (possibly implicitly both times), so it does not need to be erased.
(It needs to be stored, so that it can be checked at calling time.) All
that is erased is the nested-name-specifier part of the call operator, T in
R (T::)(A...) to R(A...).

Also, it's important to remember that you cannot declare a template
> function to be virtual. So you can't get around this by declaring the
> `operator()` to be a variadic template.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/4437e2de-8bfb-4d3c-
> ad90-5efc8ead852a%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/4437e2de-8b=
fb-4d3c-ad90-5efc8ead852a%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAJnLdOauEAJC1_04Psouqa%3DR-MnZG%3DMOmJhEpsGTi3-=
9mB3KCA%40mail.gmail.com.

--94eb2c0cfe22388fb5054aaca4fd
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 Mon, Mar 13, 2017 at 11:33 PM, Nicol Bolas <span dir=3D"ltr">&lt;<a =
href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail.com</=
a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0=
 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><sp=
an class=3D""><br><br>On Monday, March 13, 2017 at 7:15:31 PM UTC-4, Arthur=
 O&#39;Dwyer wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;marg=
in-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"=
>On Monday, March 13, 2017 at 8:54:18 AM UTC-7, Thiago Macieira wrote:<bloc=
kquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-lef=
t:1px #ccc solid;padding-left:1ex">On segunda-feira, 13 de mar=C3=A7o de 20=
17 08:38:24 PDT janezz55 . wrote:
<br>&gt; because of information hiding and convenience. Also, why use 2 typ=
e
<br>&gt; erasers? That&#39;s inefficient.
<br>
<br>Because something must know the actual type. Let me take your example:
<br>
<br>slots[&quot;selected&quot;] =3D [](int){};
<br>slots[&quot;selected&quot;](1);
<br>
<br>What happens if I called slos[&quot;selected&quot;]()? How about slots[=
&quot;selected&quot;](1.0)?=20
<br>What should happen here?
<br>
<br>=C2=A0a) UB
<br>=C2=A0b) runtime error / exception thrown
<br>=C2=A0c) compile error
<br></blockquote><div><br></div><div>This relates to a feature that I wish =
existed, but which is not actually implementable: std::visit for std::any o=
bjects!</div><div><br></div><div><font face=3D"courier new, monospace">=C2=
=A0 =C2=A0 std::any x =3D something();</font></div><div><font face=3D"couri=
er new, monospace">=C2=A0 =C2=A0 my::visit(x, [](auto&amp;&amp; arg) {</fon=
t></div><div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 printf(&quot;The dynamic type of x is %s\n&quot;, typeid(arg).name());<=
/font></div><div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 });</f=
ont></div><div><br></div><div>If this were possible to implement, then it w=
ould solve the OP&#39;s problem (just define your visitor as <font face=3D"=
courier new, monospace">[](auto&amp;&amp; arg){ arg(); }</font><font face=
=3D"arial, sans-serif">);</font> but my strong impression is that <b>it&#39=
;s impossible to implement this my::visit() function</b>, because heck, the=
 compiler has to generate code at some point, and how can it possibly gener=
ate &quot;all possible instantiations of that lambda&#39;s templated operat=
or()&quot; when the set of possible types is open-ended?</div><div>That&#39=
;s why we got std::visit for std::variant, but not for std::any =E2=80=94 b=
ecause it is <i>technologically impossible</i> to implement std::visit for =
std::any.</div><div><br></div><div>The same impossibility objection applies=
 for <i>any</i> open-ended visitation idiom, no matter whether you spell it=
 <font face=3D"courier new, monospace">my::visit(std::any, F&amp;&amp;)</fo=
nt> or <font face=3D"courier new, monospace">std::any::operator()(A&amp;&am=
p;...)</font>.</div><div><br></div><div>If my argument above is wrong, plea=
se let me know and I&#39;ll write the obvious proposal for Albuquerque. ;)<=
/div></div></blockquote><div><br></div></span>Hm... That&#39;s a really goo=
d point.<br><br>`std::function` works because it is statically provided the=
 call signature to use. Therefore, when it does its type erasure magic, it =
has a base class with a virtual function that has the call signature. That =
is, as I understand it, the basic essence of how it does type erasure. This=
 base class is defined/referenced as part of `function`&#39;s implementatio=
n.<br></div></blockquote><div><br></div><div>That&#39;s the implementation =
technique used in toy examples and student exercises. Production implementa=
tions use more efficient and more evolvable techniques, although the expres=
sive power is the same.</div><div><br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">=
<div dir=3D"ltr">So how would such type erasure work when the signature is =
not part of the erasing type&#39;s definition? `any` works because its type=
 erasure only needs to support one operation: fetching the `type_info` for =
the original type.<br></div></blockquote><div><br></div><div>See above. The=
 signature is supplied at construction time and at calling time (possibly i=
mplicitly both times), so it does not need to be erased. (It needs to be st=
ored, so that it can be checked at calling time.) All that is erased is the=
 nested-name-specifier part of the call operator, T in R (T::)(A...) to R(A=
....).</div><div><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">A=
lso, it&#39;s important to remember that you cannot declare a template func=
tion to be virtual. So you can&#39;t get around this by declaring the `oper=
ator()` to be a variadic template.<br></div><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/4437e2de-8bfb-4d3c-ad90-5efc8ead852a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/4437=
e2de-8bfb-4d3c-<wbr>ad90-5efc8ead852a%40isocpp.org</a><wbr>.<br>
</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/CAJnLdOauEAJC1_04Psouqa%3DR-MnZG%3DMO=
mJhEpsGTi3-9mB3KCA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdOauEAJC=
1_04Psouqa%3DR-MnZG%3DMOmJhEpsGTi3-9mB3KCA%40mail.gmail.com</a>.<br />

--94eb2c0cfe22388fb5054aaca4fd--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Tue, 14 Mar 2017 06:27:49 -0700 (PDT)
Raw View
------=_Part_3729_329010317.1489498069170
Content-Type: multipart/alternative;
 boundary="----=_Part_3730_792971614.1489498069170"

------=_Part_3730_792971614.1489498069170
Content-Type: text/plain; charset=UTF-8

On Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 . wrote:
>
> My thoughts exactly. I'm amazed how complex signal/slot implementations of
> many C++ applications are, I think my proposal would simplify these.
>

How is providing a specific function call signature a significant part of
the complexity of signal implementations in C++? Equally importantly,
exactly how does it make sense for two signal receiving functions in the
same slot to have different call signatures? Because that's the *only
difference* that your `any` makes: it erases the type of the call
signature. If you don't erase that, then you can use `std::function` or
similar tools.

To me, the main complexity of C++ signal/slot implementations comes from
the fact that C++ has no effective way to remove registered signal handlers
without using some sort of handle interface. This is due to the fact that
most functors are not equality comparable, and indeed equality
comparability doesn't make sense for C++ functors.

The small size increase is better than introducing a new language feature
> (C# delegate comes to mind).
>

C# delegates are little more than an object that stores an array of
`std::function`s. The call signature is not variable; for any particular
delegate, you may only use one particular call signature.

Your `any` changes are overkill for matching C# delegates.

--
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/c5b27d08-dcc8-4713-b600-cc4bfb1ff52a%40isocpp.org.

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

<div dir=3D"ltr">On Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 .=
 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">My tho=
ughts exactly. I&#39;m amazed how complex signal/slot implementations of ma=
ny C++ applications are, I think my proposal would simplify these.</div></b=
lockquote><div><br>How is providing a specific function call signature a si=
gnificant part of the complexity of signal implementations in C++? Equally =
importantly, exactly how does it make sense for two signal receiving functi=
ons in the same slot to have different call signatures? Because that&#39;s =
the <i>only difference</i> that your `any` makes: it erases the type of the=
 call signature. If you don&#39;t erase that, then you can use `std::functi=
on` or similar tools.<br><br>To me, the main complexity of C++ signal/slot =
implementations comes from the fact that C++ has no effective way to remove=
 registered signal handlers without using some sort of handle interface. Th=
is is due to the fact that most functors are not equality comparable, and i=
ndeed equality comparability doesn&#39;t make sense for C++ functors.<br><b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0=
..8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">The s=
mall size increase is better than introducing a new language feature (C# de=
legate comes to mind).</div></blockquote><div><br>C# delegates are little m=
ore than an object that stores an array of `std::function`s. The call signa=
ture is not variable; for any particular delegate, you may only use one par=
ticular call signature.<br><br>Your `any` changes are overkill for matching=
 C# delegates.</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/c5b27d08-dcc8-4713-b600-cc4bfb1ff52a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/c5b27d08-dcc8-4713-b600-cc4bfb1ff52a=
%40isocpp.org</a>.<br />

------=_Part_3730_792971614.1489498069170--

------=_Part_3729_329010317.1489498069170--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Tue, 14 Mar 2017 14:42:44 +0100
Raw View
--001a1143ba4cb8d672054ab100a2
Content-Type: text/plain; charset=UTF-8

How is providing a specific function call signature a significant part of
the complexity of signal implementations in C++? Equally importantly,
exactly how does it make sense for two signal receiving functions in the
same slot to have different call signatures? Because that's the *only
difference* that your `any` makes: it erases the type of the call
signature. If you don't erase that, then you can use `std::function` or
similar tools.

You need to provide one signal type for each signal, which means more code,
which means greater complexity. They are not allowed to, an exception,
assert ... will be raised. Also, look at Qts MOC preprocessor, a very
complex code generator. The any changes I propose don't erase the call
signature, they simply obtain it automatically, to save the users time.
Usually you don't want type conversions in a signal handler, as they cost
time.

To me, the main complexity of C++ signal/slot implementations comes from
the fact that C++ has no effective way to remove registered signal handlers
without using some sort of handle interface. This is due to the fact that
most functors are not equality comparable, and indeed equality
comparability doesn't make sense for C++ functors.

That's not really relevant here, but my solution to this problem would be
to return a lambda as a callback to remove the signal handler after
registering it.

Your `any` changes are overkill for matching C# delegates.
I'm not really fluent in C#, but delegate is a language feature. The
changes I propose are not significant in any sense.

2017-03-14 14:27 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

> On Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 . wrote:
>>
>> My thoughts exactly. I'm amazed how complex signal/slot implementations
>> of many C++ applications are, I think my proposal would simplify these.
>>
>
> How is providing a specific function call signature a significant part of
> the complexity of signal implementations in C++? Equally importantly,
> exactly how does it make sense for two signal receiving functions in the
> same slot to have different call signatures? Because that's the *only
> difference* that your `any` makes: it erases the type of the call
> signature. If you don't erase that, then you can use `std::function` or
> similar tools.
>
> To me, the main complexity of C++ signal/slot implementations comes from
> the fact that C++ has no effective way to remove registered signal handlers
> without using some sort of handle interface. This is due to the fact that
> most functors are not equality comparable, and indeed equality
> comparability doesn't make sense for C++ functors.
>
> The small size increase is better than introducing a new language feature
>> (C# delegate comes to mind).
>>
>
> C# delegates are little more than an object that stores an array of
> `std::function`s. The call signature is not variable; for any particular
> delegate, you may only use one particular call signature.
>
> Your `any` changes are overkill for matching C# delegates.
>

--
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/CAO9E8GH%2B0QKnT81Ugg8%2Bt7_0yq3g6S4vQXC4606f%3DrPzG%3DksZQ%40mail.gmail.com.

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

<div dir=3D"ltr"><span style=3D"font-size:12.8px">How is providing a specif=
ic function call signature a significant part of the complexity of signal i=
mplementations in C++? Equally importantly, exactly how does it make sense =
for two signal receiving functions in the same slot to have different call =
signatures? Because that&#39;s the=C2=A0</span><i style=3D"font-size:12.8px=
">only difference</i><span style=3D"font-size:12.8px">=C2=A0that your `any`=
 makes: it erases the type of the call signature. If you don&#39;t erase th=
at, then you can use `std::function` or similar tools.</span><br><div><span=
 style=3D"font-size:12.8px"><br></span></div><div><span style=3D"font-size:=
12.8px">You need to provide one signal type for each signal, which means mo=
re code, which means greater complexity. They are not allowed to, an except=
ion, assert ... will be raised. Also, look at Qts MOC preprocessor, a very =
complex code generator. The any changes I propose don&#39;t erase the call =
signature, they simply obtain it automatically, to save the users time. Usu=
ally you don&#39;t want type conversions in a signal handler, as they cost =
time.</span></div><div><br></div><div><span style=3D"font-size:12.8px">To m=
e, the main complexity of C++ signal/slot implementations comes from the fa=
ct that C++ has no effective way to remove registered signal handlers witho=
ut using some sort of handle interface. This is due to the fact that most f=
unctors are not equality comparable, and indeed equality comparability does=
n&#39;t make sense for C++ functors.</span><span style=3D"font-size:12.8px"=
><br></span></div><div><span style=3D"font-size:12.8px"><br></span></div><d=
iv><span style=3D"font-size:12.8px">That&#39;s not really relevant here, bu=
t my solution to this problem would be to return a lambda as a callback to =
remove the signal handler after registering it.</span></div><div><span styl=
e=3D"font-size:12.8px"><br></span></div><div><div class=3D"gmail-adn gmail-=
ads"><div class=3D"gmail-gs"><div id=3D"gmail-:26a" class=3D"gmail-ii gmail=
-gt gmail-adP gmail-adO" style=3D"font-size:12.8px"><div id=3D"gmail-:21d" =
class=3D"gmail-a3s gmail-aXjCH gmail-m15acd00dd307c744"><div dir=3D"ltr">Yo=
ur `any` changes are overkill for matching C# delegates.</div></div><div cl=
ass=3D"gmail-yj6qo"></div></div><div class=3D"gmail-hi"></div></div><div cl=
ass=3D"gmail-ajx"></div></div><div class=3D"gmail-gA gmail-gt" style=3D"fon=
t-size:12.8px"><div class=3D"gmail-gB gmail-acO"><div class=3D"gmail-ip gma=
il-adB"><div class=3D"gmail-M9"><div id=3D"gmail-:2fu" style=3D"font-size:1=
2.8px"></div><div id=3D"gmail-:1vx" style=3D"font-size:12.8px"></div></div>=
</div></div></div></div><div><span style=3D"font-size:12.8px">I&#39;m not r=
eally fluent in C#, but delegate is a language feature. The changes I propo=
se are not significant in any sense.</span></div></div><div class=3D"gmail_=
extra"><br><div class=3D"gmail_quote">2017-03-14 14:27 GMT+01:00 Nicol Bola=
s <span dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_b=
lank">jmckesson@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quo=
te" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div dir=3D"ltr">On Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 =
.. wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8=
ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">My thought=
s exactly. I&#39;m amazed how complex signal/slot implementations of many C=
++ applications are, I think my proposal would simplify these.</div></block=
quote><div><br>How is providing a specific function call signature a signif=
icant part of the complexity of signal implementations in C++? Equally impo=
rtantly, exactly how does it make sense for two signal receiving functions =
in the same slot to have different call signatures? Because that&#39;s the =
<i>only difference</i> that your `any` makes: it erases the type of the cal=
l signature. If you don&#39;t erase that, then you can use `std::function` =
or similar tools.<br><br>To me, the main complexity of C++ signal/slot impl=
ementations comes from the fact that C++ has no effective way to remove reg=
istered signal handlers without using some sort of handle interface. This i=
s due to the fact that most functors are not equality comparable, and indee=
d equality comparability doesn&#39;t make sense for C++ functors.<br><br></=
div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;b=
order-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">The small size=
 increase is better than introducing a new language feature (C# delegate co=
mes to mind).</div></blockquote><div><br>C# delegates are little more than =
an object that stores an array of `std::function`s. The call signature is n=
ot variable; for any particular delegate, you may only use one particular c=
all signature.<br><br>Your `any` changes are overkill for matching C# deleg=
ates.</div></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GH%2B0QKnT81Ugg8%2Bt7_0yq3g6S4v=
QXC4606f%3DrPzG%3DksZQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoo=
ter">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GH%=
2B0QKnT81Ugg8%2Bt7_0yq3g6S4vQXC4606f%3DrPzG%3DksZQ%40mail.gmail.com</a>.<br=
 />

--001a1143ba4cb8d672054ab100a2--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Tue, 14 Mar 2017 08:15:48 -0700 (PDT)
Raw View
------=_Part_3815_1843899467.1489504548315
Content-Type: multipart/alternative;
 boundary="----=_Part_3816_1809549329.1489504548316"

------=_Part_3816_1809549329.1489504548316
Content-Type: text/plain; charset=UTF-8

On Tuesday, March 14, 2017 at 9:42:47 AM UTC-4, janezz55 . wrote:
>
> How is providing a specific function call signature a significant part of
>> the complexity of signal implementations in C++? Equally importantly,
>> exactly how does it make sense for two signal receiving functions in the
>> same slot to have different call signatures? Because that's the *only
>> difference* that your `any` makes: it erases the type of the call
>> signature. If you don't erase that, then you can use `std::function` or
>> similar tools.
>>
>
> You need to provide one signal type for each signal, which means more
> code, which means greater complexity.
>

So you see `vector<int>` and `vector<float>` as "more code, which means
greater complexity"? Because that's what we're talking about: a different
template instantiation.

I cannot agree that this is a significant problem for actual user code.

They are not allowed to, an exception, assert ... will be raised.
>

.... I don't know what you're talking about here.

Also, look at Qts MOC preprocessor, a very complex code generator.
>

So in exactly what way would these `any` changes reduce Qt's MOC complexity
with regard to signals/slots? Also, the reasons Qt gives for using MOC
<http://doc.qt.io/qt-5/why-moc.html> for signals/slots doesn't include "the
standard library doesn't have a signature-erased `function` type". If they
wanted to use one, they could have written one themselves, rather than
relying on code generation.

So even if we accept your premise that signals/slots require lots of
complexity in C++, it is not clear at all that this `any` change would
solve that problem.

The any changes I propose don't erase the call signature,
>

If the signature isn't present in the typename of `any`, then the signature
has been erased. Much like `any` erases the type of the object it contains.

they simply obtain it automatically, to save the users time.
>

How exactly does this save the user time?

Usually you don't want type conversions in a signal handler, as they cost
> time.
>

To me, the main complexity of C++ signal/slot implementations comes from
>> the fact that C++ has no effective way to remove registered signal handlers
>> without using some sort of handle interface. This is due to the fact that
>> most functors are not equality comparable, and indeed equality
>> comparability doesn't make sense for C++ functors.
>>
>
> That's not really relevant here, but my solution to this problem would be
> to return a lambda as a callback to remove the signal handler after
> registering it.
>

So it's just like any other slot handle, except much harder to work with,
since it doesn't have a well-defined type. I fail to see how that is a
better approach than using a real slot handle.

--
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/f35e957b-0e56-4dbf-b60f-184729350b40%40isocpp.org.

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

<div dir=3D"ltr">On Tuesday, March 14, 2017 at 9:42:47 AM UTC-4, janezz55 .=
 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"><block=
quote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-left=
: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><span style=3D"font-siz=
e:12.8px">How is providing a specific function call signature a significant=
 part of the complexity of signal implementations in C++? Equally important=
ly, exactly how does it make sense for two signal receiving functions in th=
e same slot to have different call signatures? Because that&#39;s the=C2=A0=
</span><i style=3D"font-size:12.8px">only difference</i><span style=3D"font=
-size:12.8px">=C2=A0that your `any` makes: it erases the type of the call s=
ignature. If you don&#39;t erase that, then you can use `std::function` or =
similar tools.</span><br></blockquote><div><span style=3D"font-size:12.8px"=
><br></span></div><div><span style=3D"font-size:12.8px">You need to provide=
 one signal type for each signal, which means more code, which means greate=
r complexity.</span></div></div></blockquote><div><br>So you see `vector&lt=
;int&gt;` and `vector&lt;float&gt;` as &quot;more code, which means greater=
 complexity&quot;? Because that&#39;s what we&#39;re talking about: a diffe=
rent template instantiation.<br><br>I cannot agree that this is a significa=
nt problem for actual user code.<br><br></div><blockquote class=3D"gmail_qu=
ote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padd=
ing-left: 1ex;"><div dir=3D"ltr"><div><span style=3D"font-size:12.8px">They=
 are not allowed to, an exception, assert ... will be raised.</span></div><=
/div></blockquote><div><br>... I don&#39;t know what you&#39;re talking abo=
ut here.<br><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;=
margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><div><span style=3D"font-size:12.8px">Also, look at Qts MOC prepro=
cessor, a very complex code generator.</span></div></div></blockquote><div>=
<br>So in exactly what way would these `any` changes reduce Qt&#39;s MOC co=
mplexity with regard to signals/slots? Also, the reasons Qt <a href=3D"http=
://doc.qt.io/qt-5/why-moc.html">gives for using MOC</a> for signals/slots d=
oesn&#39;t include &quot;the standard library doesn&#39;t have a signature-=
erased `function` type&quot;. If they wanted to use one, they could have wr=
itten one themselves, rather than relying on code generation.<br><br>So eve=
n if we accept your premise that signals/slots require lots of complexity i=
n C++, it is not clear at all that this `any` change would solve that probl=
em.<br><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margi=
n-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"l=
tr"><div><span style=3D"font-size:12.8px">The any changes I propose don&#39=
;t erase the call signature,</span></div></div></blockquote><div><br>If the=
 signature isn&#39;t present in the typename of `any`, then the signature h=
as been erased. Much like `any` erases the type of the object it contains.<=
br><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-le=
ft: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">=
<div><span style=3D"font-size:12.8px">they simply obtain it automatically, =
to save the users time.</span></div></div></blockquote><div><br>How exactly=
 does this save the user time?<br><br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;paddin=
g-left: 1ex;"><div dir=3D"ltr"><div><span style=3D"font-size:12.8px">Usuall=
y you don&#39;t want type conversions in a signal handler, as they cost tim=
e.</span></div></div></blockquote><div><br></div><blockquote class=3D"gmail=
_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;p=
adding-left: 1ex;"><div dir=3D"ltr"><div></div><blockquote class=3D"gmail_q=
uote" style=3D"margin: 0px 0px 0px 0.8ex; border-left: 1px solid rgb(204, 2=
04, 204); padding-left: 1ex;"><div><span style=3D"font-size:12.8px">To me, =
the main complexity of C++ signal/slot implementations comes from the fact =
that C++ has no effective way to remove registered signal handlers without =
using some sort of handle interface. This is due to the fact that most func=
tors are not equality comparable, and indeed equality comparability doesn&#=
39;t make sense for C++ functors.</span><span style=3D"font-size:12.8px"><b=
r></span></div></blockquote><div><span style=3D"font-size:12.8px"><br></spa=
n></div><div><span style=3D"font-size:12.8px">That&#39;s not really relevan=
t here, but my solution to this problem would be to return a lambda as a ca=
llback to remove the signal handler after registering it.</span></div></div=
></blockquote><div><br>So it&#39;s just like any other slot handle, except =
much harder to work with, since it doesn&#39;t have a well-defined type. I =
fail to see how that is a better approach than using a real slot handle.</d=
iv></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/f35e957b-0e56-4dbf-b60f-184729350b40%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/f35e957b-0e56-4dbf-b60f-184729350b40=
%40isocpp.org</a>.<br />

------=_Part_3816_1809549329.1489504548316--

------=_Part_3815_1843899467.1489504548315--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Tue, 14 Mar 2017 09:03:56 -0700
Raw View
On ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017 01:17:21 PDT 'Edward Catmur' =
via ISO C++=20
Standard - Future Proposals wrote:
> Because something must know the actual type. Let me take your example:
> > > slots["selected"] =3D [](int){};
> > > slots["selected"](1);
> > >=20
> > > What happens if I called slos["selected"]()? How about
> > > slots["selected"](1.0)?
> > > What should happen here?
> > >=20
> > > a) UB
> > > b) runtime error / exception thrown
> > > c) compile error
> > >=20
> > >=20
> > > b) in both cases. As discussed above, this is trivial to implement an=
d
> > > incurs zero run time cost.
> >=20
> > Except for the part that it's not trivial and has a runtime cost.
>=20
> A small code size increase, admittedly, but zero extra code executed if t=
he
> feature is not used. As for triviality, that's in the eye of the beholder=
,
> but I'm certain that any library maintainer presented with the
> specification would consider the implementation trivial.

If it generates code, then the cost is non-zero, even if not executed (larg=
er=20
binaries -> higher cache miss rate).

More importantly, it needs to save some kind of erasure for when the callab=
le=20
would be used, as a void function taking int is not the same type as a lamb=
da=20
taking int, and neither is the same as a function taking int and returning =
a=20
large structure. That means the sizeof(std::any) has increase and that has =
a=20
cost for everyone who uses it.

So, no, the cost is most definitely not zero.

As for triviality, see the erasure above.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2262188.yk3gOplj8S%40tjmaciei-mobl1.

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Tue, 14 Mar 2017 09:11:08 -0700
Raw View
On ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017 06:27:49 PDT Nicol Bolas wrot=
e:
> To me, the main complexity of C++ signal/slot implementations comes from
> the fact that C++ has no effective way to remove registered signal handle=
rs
> without using some sort of handle interface. This is due to the fact that
> most functors are not equality comparable, and indeed equality
> comparability doesn't make sense for C++ functors.

The complexity comes from other things too, like thread-safety. What happen=
s=20
if the connection list of the signal emitted is modified while inspecting t=
hat=20
list?

Another one that comes to mind is how to uniquely identify as signal withou=
t=20
increasing the sender's object size. Using PMFs is not easy in C++.

Finally, note that the type erasure is actually the least of the problems, =
at=20
least in Qt's signal/slot implementation. The types are erased at a higher=
=20
layer (in user code). The connection lists only need one type:

 void (int which, QSlotObjectBase *this_, QObject *r, void **a, bool *ret)

See https://code.woboq.org/qt5/qtbase/src/corelib/kernel/
qobject_impl.h.html#QtPrivate::QSlotObjectBase.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2034526.WMRoUUvAiG%40tjmaciei-mobl1.

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Tue, 14 Mar 2017 16:42:27 +0000
Raw View
--001a11405cd874e239054ab38345
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On 14 Mar 2017 16:04, "Thiago Macieira" <thiago@macieira.org> wrote:

On ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017 01:17:21 PDT 'Edward Catmur' =
via ISO C++
Standard - Future Proposals wrote:
> Because something must know the actual type. Let me take your example:
> > > slots["selected"] =3D [](int){};
> > > slots["selected"](1);
> > >
> > > What happens if I called slos["selected"]()? How about
> > > slots["selected"](1.0)?
> > > What should happen here?
> > >
> > > a) UB
> > > b) runtime error / exception thrown
> > > c) compile error
> > >
> > >
> > > b) in both cases. As discussed above, this is trivial to implement an=
d
> > > incurs zero run time cost.
> >
> > Except for the part that it's not trivial and has a runtime cost.
>
> A small code size increase, admittedly, but zero extra code executed if
the
> feature is not used. As for triviality, that's in the eye of the beholder=
,
> but I'm certain that any library maintainer presented with the
> specification would consider the implementation trivial.

If it generates code, then the cost is non-zero, even if not executed
(larger
binaries -> higher cache miss rate).


Potentially, yes. In practice it's very difficult to measure.

More importantly, it needs to save some kind of erasure for when the
callable
would be used, as a void function taking int is not the same type as a
lambda
taking int, and neither is the same as a function taking int and returning =
a
large structure. That means the sizeof(std::any) has increase and that has =
a
cost for everyone who uses it.

So, no, the cost is most definitely not zero.


That can be held behind the vptr, or in practice the op handler. Just add
two vtable slots or ops. (libstdc++ and libcxx use ops; I can't remember
what MSVC uses. Boost.Any uses for-goodness polymorphism, wow. Still zero
runtime memory cost.)

As for triviality, see the erasure above.


I'd consider that trivial.

--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--
You received this message because you are subscribed to a topic in the
Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this topic, visit https://groups.google.com/a/
isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
To unsubscribe from this group and all its topics, 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/2262188.yk3gOplj8S%40tjmaciei-mobl1.

--=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/CAJnLdOb7fwN8YHXjc%3Dp7GrHCeqJg4NytFzoHuVJYjGkKY=
1skuw%40mail.gmail.com.

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

<div dir=3D"auto"><div><br></div><div dir=3D"auto"><div class=3D"gmail_extr=
a" dir=3D"auto"><div class=3D"gmail_quote">On 14 Mar 2017 16:04, &quot;Thia=
go Macieira&quot; &lt;<a href=3D"mailto:thiago@macieira.org">thiago@macieir=
a.org</a>&gt; wrote:<br type=3D"attribution"><blockquote class=3D"quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On te=
r=C3=A7a-feira, 14 de mar=C3=A7o de 2017 01:17:21 PDT &#39;Edward Catmur&#3=
9; via ISO C++<br>
<div class=3D"quoted-text">Standard - Future Proposals wrote:<br>
&gt; Because something must know the actual type. Let me take your example:=
<br>
&gt; &gt; &gt; slots[&quot;selected&quot;] =3D [](int){};<br>
&gt; &gt; &gt; slots[&quot;selected&quot;](1);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; What happens if I called slos[&quot;selected&quot;]()? How a=
bout<br>
&gt; &gt; &gt; slots[&quot;selected&quot;](1.0)?<br>
&gt; &gt; &gt; What should happen here?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; a) UB<br>
&gt; &gt; &gt; b) runtime error / exception thrown<br>
&gt; &gt; &gt; c) compile error<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; b) in both cases. As discussed above, this is trivial to imp=
lement and<br>
&gt; &gt; &gt; incurs zero run time cost.<br>
&gt; &gt;<br>
&gt; &gt; Except for the part that it&#39;s not trivial and has a runtime c=
ost.<br>
&gt;<br>
&gt; A small code size increase, admittedly, but zero extra code executed i=
f the<br>
&gt; feature is not used. As for triviality, that&#39;s in the eye of the b=
eholder,<br>
&gt; but I&#39;m certain that any library maintainer presented with the<br>
&gt; specification would consider the implementation trivial.<br>
<br>
</div>If it generates code, then the cost is non-zero, even if not executed=
 (larger<br>
binaries -&gt; higher cache miss rate).<br></blockquote></div></div></div><=
div dir=3D"auto"><br></div><div dir=3D"auto">Potentially, yes. In practice =
it&#39;s very difficult to measure.=C2=A0</div><div dir=3D"auto"><br></div>=
<div dir=3D"auto"><div class=3D"gmail_extra" dir=3D"auto"><div class=3D"gma=
il_quote"><blockquote class=3D"quote" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex">More importantly, it needs to save some =
kind of erasure for when the callable<br>
would be used, as a void function taking int is not the same type as a lamb=
da<br>
taking int, and neither is the same as a function taking int and returning =
a<br>
large structure. That means the sizeof(std::any) has increase and that has =
a<br>
cost for everyone who uses it.<br>
<br>
So, no, the cost is most definitely not zero.<br>
</blockquote></div></div></div><div dir=3D"auto"><br></div><div dir=3D"auto=
">That can be held behind the vptr, or in practice the op handler. Just add=
 two vtable slots or ops. (libstdc++ and libcxx use ops; I can&#39;t rememb=
er what MSVC uses. Boost.Any uses for-goodness polymorphism, wow. Still zer=
o runtime memory cost.)=C2=A0</div><div dir=3D"auto"><br></div><div dir=3D"=
auto"><div class=3D"gmail_extra" dir=3D"auto"><div class=3D"gmail_quote"><b=
lockquote class=3D"quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc s=
olid;padding-left:1ex">As for triviality, see the erasure above.<br>
<div class=3D"quoted-text"></div></blockquote></div></div></div><div dir=3D=
"auto"><br></div><div dir=3D"auto">I&#39;d consider that trivial.=C2=A0</di=
v><div dir=3D"auto"><br></div><div dir=3D"auto"><div class=3D"gmail_extra" =
dir=3D"auto"><div class=3D"gmail_quote"><blockquote class=3D"quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div cla=
ss=3D"quoted-text">--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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>
</div>To view this discussion on the web visit <a href=3D"https://groups.go=
ogle.com/a/isocpp.org/d/msgid/std-proposals/2262188.yk3gOplj8S%40tjmaciei-m=
obl1" rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/<wbr=
>isocpp.org/d/msgid/std-<wbr>proposals/2262188.yk3gOplj8S%<wbr>40tjmaciei-m=
obl1</a>.<br>
</blockquote></div><br></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/CAJnLdOb7fwN8YHXjc%3Dp7GrHCeqJg4NytFz=
oHuVJYjGkKY1skuw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdOb7fwN8YH=
Xjc%3Dp7GrHCeqJg4NytFzoHuVJYjGkKY1skuw%40mail.gmail.com</a>.<br />

--001a11405cd874e239054ab38345--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Tue, 14 Mar 2017 12:40:07 -0700
Raw View
On ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017 09:42:27 PDT 'Edward Catmur' =
via ISO C++=20
Standard - Future Proposals wrote:
> That can be held behind the vptr, or in practice the op handler. Just add
> two vtable slots or ops. (libstdc++ and libcxx use ops; I can't remember
> what MSVC uses. Boost.Any uses for-goodness polymorphism, wow. Still zero
> runtime memory cost.)
>=20
> As for triviality, see the erasure above.
>=20
>=20
> I'd consider that trivial.

Then patch it and you'll see.

Specifically, how to implement the throw case when the parameters don't mat=
ch.

And do they need to match exactly, or will promotion/demotion rules apply? =
How=20
about type conversions, like the string -> string_view case in the other=20
thread?

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/1526565.MOgQWsrflj%40tjmaciei-mobl1.

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Wed, 15 Mar 2017 00:38:52 +0100
Raw View
--001a1144b3faa68665054ab954d0
Content-Type: text/plain; charset=UTF-8

So you see `vector<int>` and `vector<float>` as "more code, which means
greater complexity"? Because that's what we're talking about: a different
template instantiation.

I didn't have that in mind at all. Currently signal/slots outside of Qt's
mechanism are used something like:

signal_t s<void()> clicked;
// ...
// a whole bunch of signal declarations

That can be reduced to a single line, for example:

std::map<std::string, std::any> signals;

they simply obtain it automatically, to save the users time.

They can change the signatures of signal handlers without updating code as
much as would be necessary otherwise.

So in exactly what way would these `any` changes reduce Qt's MOC complexity
with regard to signals/slots? Also, the reasons Qt gives for using MOC
<http://doc.qt.io/qt-5/why-moc.html> for signals/slots doesn't include "the
standard library doesn't have a signature-erased `function` type". If they
wanted to use one, they could have written one themselves, rather than
relying on code generation.

It would make that code-generating approach unnecessary. See:

https://github.com/user1095108/crl



2017-03-14 16:15 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

> On Tuesday, March 14, 2017 at 9:42:47 AM UTC-4, janezz55 . wrote:
>>
>> How is providing a specific function call signature a significant part of
>>> the complexity of signal implementations in C++? Equally importantly,
>>> exactly how does it make sense for two signal receiving functions in the
>>> same slot to have different call signatures? Because that's the *only
>>> difference* that your `any` makes: it erases the type of the call
>>> signature. If you don't erase that, then you can use `std::function` or
>>> similar tools.
>>>
>>
>> You need to provide one signal type for each signal, which means more
>> code, which means greater complexity.
>>
>
> So you see `vector<int>` and `vector<float>` as "more code, which means
> greater complexity"? Because that's what we're talking about: a different
> template instantiation.
>
> I cannot agree that this is a significant problem for actual user code.
>
> They are not allowed to, an exception, assert ... will be raised.
>>
>
> ... I don't know what you're talking about here.
>
> Also, look at Qts MOC preprocessor, a very complex code generator.
>>
>
> So in exactly what way would these `any` changes reduce Qt's MOC
> complexity with regard to signals/slots? Also, the reasons Qt gives for
> using MOC <http://doc.qt.io/qt-5/why-moc.html> for signals/slots doesn't
> include "the standard library doesn't have a signature-erased `function`
> type". If they wanted to use one, they could have written one themselves,
> rather than relying on code generation.
>
> So even if we accept your premise that signals/slots require lots of
> complexity in C++, it is not clear at all that this `any` change would
> solve that problem.
>
> The any changes I propose don't erase the call signature,
>>
>
> If the signature isn't present in the typename of `any`, then the
> signature has been erased. Much like `any` erases the type of the object it
> contains.
>
> they simply obtain it automatically, to save the users time.
>>
>
> How exactly does this save the user time?
>
> Usually you don't want type conversions in a signal handler, as they cost
>> time.
>>
>
> To me, the main complexity of C++ signal/slot implementations comes from
>>> the fact that C++ has no effective way to remove registered signal handlers
>>> without using some sort of handle interface. This is due to the fact that
>>> most functors are not equality comparable, and indeed equality
>>> comparability doesn't make sense for C++ functors.
>>>
>>
>> That's not really relevant here, but my solution to this problem would be
>> to return a lambda as a callback to remove the signal handler after
>> registering it.
>>
>
> So it's just like any other slot handle, except much harder to work with,
> since it doesn't have a well-defined type. I fail to see how that is a
> better approach than using a real slot handle.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/f35e957b-0e56-4dbf-
> b60f-184729350b40%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/f35e957b-0e56-4dbf-b60f-184729350b40%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/CAO9E8GE69jMjktDdPTC2xs3LZKo6C-uSyW9KsieerrTVczDmLw%40mail.gmail.com.

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

<div dir=3D"ltr"><span style=3D"font-size:12.8px">So you see `vector&lt;int=
&gt;` and `vector&lt;float&gt;` as &quot;more code, which means greater com=
plexity&quot;? Because that&#39;s what we&#39;re talking about: a different=
 template instantiation.</span><br><div><span style=3D"font-size:12.8px"><b=
r></span></div><div><span style=3D"font-size:12.8px">I didn&#39;t have that=
 in mind at all. Currently signal/slots outside of Qt&#39;s mechanism are u=
sed something like:</span></div><div><span style=3D"font-size:12.8px"><br><=
/span></div><div><span style=3D"font-size:12.8px">signal_t s&lt;void()&gt; =
clicked;</span></div><div><span style=3D"font-size:12.8px">// ...</span></d=
iv><div><span style=3D"font-size:12.8px">// a whole bunch of signal declara=
tions</span></div><div><span style=3D"font-size:12.8px"><br></span></div><d=
iv><span style=3D"font-size:12.8px">That can be reduced to a single line, f=
or example:</span></div><div><span style=3D"font-size:12.8px"><br></span></=
div><div><span style=3D"font-size:12.8px">std::map&lt;std::string, std::any=
&gt; signals;</span></div><div><span style=3D"font-size:12.8px"><br></span>=
</div><div><span style=3D"color:rgb(80,0,80);font-size:12.8px">they simply =
obtain it automatically, to save the users time.</span><span style=3D"font-=
size:12.8px"><br></span></div><div><span style=3D"color:rgb(80,0,80);font-s=
ize:12.8px"><br></span></div><div><span style=3D"color:rgb(80,0,80);font-si=
ze:12.8px">They can change the signatures of signal handlers without updati=
ng code as much as would be necessary otherwise.</span></div><div><br></div=
><div><span style=3D"font-size:12.8px">So in exactly what way would these `=
any` changes reduce Qt&#39;s MOC complexity with regard to signals/slots? A=
lso, the reasons Qt=C2=A0</span><a href=3D"http://doc.qt.io/qt-5/why-moc.ht=
ml" target=3D"_blank" style=3D"font-size:12.8px">gives for using MOC</a><sp=
an style=3D"font-size:12.8px">=C2=A0for signals/slots doesn&#39;t include &=
quot;the standard library doesn&#39;t have a signature-erased `function` ty=
pe&quot;. If they wanted to use one, they could have written one themselves=
, rather than relying on code generation.</span><span style=3D"color:rgb(80=
,0,80);font-size:12.8px"><br></span></div><div><span style=3D"color:rgb(80,=
0,80);font-size:12.8px"><br></span></div><div><span style=3D"color:rgb(80,0=
,80);font-size:12.8px">It would make that code-generating approach unnecess=
ary. See:</span></div><div><span style=3D"color:rgb(80,0,80);font-size:12.8=
px"><br></span></div><div><font color=3D"#500050"><span style=3D"font-size:=
12.8px"><a href=3D"https://github.com/user1095108/crl">https://github.com/u=
ser1095108/crl</a></span></font><br></div><div><span style=3D"font-size:12.=
8px"><br></span></div><div><span style=3D"font-size:12.8px"><br></span></di=
v></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">2017-03-1=
4 16:15 GMT+01:00 Nicol Bolas <span dir=3D"ltr">&lt;<a href=3D"mailto:jmcke=
sson@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&gt;</span>:<br><b=
lockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px =
#ccc solid;padding-left:1ex"><div dir=3D"ltr"><span class=3D"">On Tuesday, =
March 14, 2017 at 9:42:47 AM UTC-4, janezz55 . wrote:<blockquote class=3D"g=
mail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><span style=3D"font-size:12.8px">How is providing a specific fun=
ction call signature a significant part of the complexity of signal impleme=
ntations in C++? Equally importantly, exactly how does it make sense for tw=
o signal receiving functions in the same slot to have different call signat=
ures? Because that&#39;s the=C2=A0</span><i style=3D"font-size:12.8px">only=
 difference</i><span style=3D"font-size:12.8px">=C2=A0that your `any` makes=
: it erases the type of the call signature. If you don&#39;t erase that, th=
en you can use `std::function` or similar tools.</span><br></blockquote><di=
v><span style=3D"font-size:12.8px"><br></span></div><div><span style=3D"fon=
t-size:12.8px">You need to provide one signal type for each signal, which m=
eans more code, which means greater complexity.</span></div></div></blockqu=
ote></span><div><br>So you see `vector&lt;int&gt;` and `vector&lt;float&gt;=
` as &quot;more code, which means greater complexity&quot;? Because that&#3=
9;s what we&#39;re talking about: a different template instantiation.<br><b=
r>I cannot agree that this is a significant problem for actual user code.<b=
r><br></div><span class=3D""><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div d=
ir=3D"ltr"><div><span style=3D"font-size:12.8px">They are not allowed to, a=
n exception, assert ... will be raised.</span></div></div></blockquote></sp=
an><div><br>... I don&#39;t know what you&#39;re talking about here.<br><br=
></div><span class=3D""><blockquote class=3D"gmail_quote" style=3D"margin:0=
;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D=
"ltr"><div><span style=3D"font-size:12.8px">Also, look at Qts MOC preproces=
sor, a very complex code generator.</span></div></div></blockquote></span><=
div><br>So in exactly what way would these `any` changes reduce Qt&#39;s MO=
C complexity with regard to signals/slots? Also, the reasons Qt <a href=3D"=
http://doc.qt.io/qt-5/why-moc.html" target=3D"_blank">gives for using MOC</=
a> for signals/slots doesn&#39;t include &quot;the standard library doesn&#=
39;t have a signature-erased `function` type&quot;. If they wanted to use o=
ne, they could have written one themselves, rather than relying on code gen=
eration.<br><br>So even if we accept your premise that signals/slots requir=
e lots of complexity in C++, it is not clear at all that this `any` change =
would solve that problem.<br><br></div><span class=3D""><blockquote class=
=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc s=
olid;padding-left:1ex"><div dir=3D"ltr"><div><span style=3D"font-size:12.8p=
x">The any changes I propose don&#39;t erase the call signature,</span></di=
v></div></blockquote></span><div><br>If the signature isn&#39;t present in =
the typename of `any`, then the signature has been erased. Much like `any` =
erases the type of the object it contains.<br><br></div><span class=3D""><b=
lockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-=
left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><span style=3D"=
font-size:12.8px">they simply obtain it automatically, to save the users ti=
me.</span></div></div></blockquote></span><div><br>How exactly does this sa=
ve the user time?<br><br></div><span class=3D""><blockquote class=3D"gmail_=
quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddi=
ng-left:1ex"><div dir=3D"ltr"><div><span style=3D"font-size:12.8px">Usually=
 you don&#39;t want type conversions in a signal handler, as they cost time=
..</span></div></div></blockquote><div><br></div><blockquote class=3D"gmail_=
quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddi=
ng-left:1ex"><div dir=3D"ltr"><div></div><blockquote class=3D"gmail_quote" =
style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa=
dding-left:1ex"><div><span style=3D"font-size:12.8px">To me, the main compl=
exity of C++ signal/slot implementations comes from the fact that C++ has n=
o effective way to remove registered signal handlers without using some sor=
t of handle interface. This is due to the fact that most functors are not e=
quality comparable, and indeed equality comparability doesn&#39;t make sens=
e for C++ functors.</span><span style=3D"font-size:12.8px"><br></span></div=
></blockquote><div><span style=3D"font-size:12.8px"><br></span></div><div><=
span style=3D"font-size:12.8px">That&#39;s not really relevant here, but my=
 solution to this problem would be to return a lambda as a callback to remo=
ve the signal handler after registering it.</span></div></div></blockquote>=
</span><div><br>So it&#39;s just like any other slot handle, except much ha=
rder to work with, since it doesn&#39;t have a well-defined type. I fail to=
 see how that is a better approach than using a real slot handle.</div></di=
v><span class=3D"">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/f35e957b-0e56-4dbf-b60f-184729350b40%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/f35e=
957b-0e56-4dbf-<wbr>b60f-184729350b40%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GE69jMjktDdPTC2xs3LZKo6C-uSyW9K=
sieerrTVczDmLw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GE69jMjktDd=
PTC2xs3LZKo6C-uSyW9KsieerrTVczDmLw%40mail.gmail.com</a>.<br />

--001a1144b3faa68665054ab954d0--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Tue, 14 Mar 2017 17:32:17 -0700 (PDT)
Raw View
------=_Part_3523_1957528745.1489537937295
Content-Type: multipart/alternative;
 boundary="----=_Part_3524_995898445.1489537937296"

------=_Part_3524_995898445.1489537937296
Content-Type: text/plain; charset=UTF-8

On Tuesday, March 14, 2017 at 7:38:55 PM UTC-4, janezz55 . wrote:
>
> So you see `vector<int>` and `vector<float>` as "more code, which means
>> greater complexity"? Because that's what we're talking about: a different
>> template instantiation.
>>
>
> I didn't have that in mind at all. Currently signal/slots outside of Qt's
> mechanism are used something like:
>
> signal_t s<void()> clicked;
> // ...
> // a whole bunch of signal declarations
>
> That can be reduced to a single line, for example:
>
> std::map<std::string, std::any> signals;
>
> they simply obtain it automatically, to save the users time.
>

I'm going to forget for the moment that `any` has no mechanism to allow
multiple users to add multiple callbacks to the same object, while
`signal_t` does. So really, what you'd need is a `vector<any>` along with
various controlling info and so forth to unregister functions. But again,
let's ignore that.

I am mostly ignorant of how Qt's signals/slots stuff works. However, I'm
fairly sure that having a single variable declaration doesn't save users
any time over multiple declarations. Why? Because they still have to
populate that `map`.

The initializer may not be in the header. But it still has to *exist*. And
therefore, it is the difference between:

signal_t s<void()> sig1;
signal_t s<void(int)> sig2;
signal_t s<void(float)> sig3;

And:

std::map<std::string, std::any> signals = {
    {"sig1", {}},
    {"sig2", {}},
    {"sig3", {}}};

I fail to see how this saved anyone time. Indeed it now takes up time,
since I have to do a map access in order to get to a signal. The other way,
it's just a member access, which is comparably negligible. So that's
*wasting* time; specifically, runtime performance. And memory allocation
overhead.

Also, with individual declarations, it is impossible for me to accidentally
misspell a signal name without the compiler complaining. Whereas the
runtime version makes it very possible for me to misspell signal names.

Lastly, considering that Qt's signals/slots are all based on code
generation, if Qt *wanted* to do their signals with type-erased function
signatures, they could have. We therefore must assume that they explicitly
choose not to.

They can change the signatures of signal handlers without updating code as
> much as would be necessary otherwise.
>

Um, how? If you change the signature of a signal, then every handler
registered to it must match. And since we're talking `any`, it has to match
the exact signature provided (just as `any_cast` requires an exact match of
the type).

All you've done is make the necessary matching be implicit rather than
explicit.


> So in exactly what way would these `any` changes reduce Qt's MOC
>> complexity with regard to signals/slots? Also, the reasons Qt gives for
>> using MOC <http://doc.qt.io/qt-5/why-moc.html> for signals/slots doesn't
>> include "the standard library doesn't have a signature-erased `function`
>> type". If they wanted to use one, they could have written one themselves,
>> rather than relying on code generation.
>>
>
> It would make that code-generating approach unnecessary.
>

If you read what I linked to, you'll see that they use the code generator
for a *lot more* than signals/slots. So it's not going away, no matter what
you do with `any`.

See:
>
> https://github.com/user1095108/crl
>
>
.... it'd be nice if you explained what code is on that site that is
relevant to this discussion.

--
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/84ce2d13-ed47-4734-8cc0-f7e90113e65a%40isocpp.org.

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

<div dir=3D"ltr">On Tuesday, March 14, 2017 at 7:38:55 PM UTC-4, janezz55 .=
 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"><block=
quote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-left=
: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><span style=3D"font-siz=
e:12.8px">So you see `vector&lt;int&gt;` and `vector&lt;float&gt;` as &quot=
;more code, which means greater complexity&quot;? Because that&#39;s what w=
e&#39;re talking about: a different template instantiation.</span><br></blo=
ckquote><div><span style=3D"font-size:12.8px"><br></span></div><div><span s=
tyle=3D"font-size:12.8px">I didn&#39;t have that in mind at all. Currently =
signal/slots outside of Qt&#39;s mechanism are used something like:</span><=
/div><div><span style=3D"font-size:12.8px"><br></span></div><div><span styl=
e=3D"font-size:12.8px">signal_t s&lt;void()&gt; clicked;</span></div><div><=
span style=3D"font-size:12.8px">// ...</span></div><div><span style=3D"font=
-size:12.8px">// a whole bunch of signal declarations</span></div><div><spa=
n style=3D"font-size:12.8px"><br></span></div><div><span style=3D"font-size=
:12.8px">That can be reduced to a single line, for example:</span></div><di=
v><span style=3D"font-size:12.8px"><br></span></div><div><span style=3D"fon=
t-size:12.8px">std::map&lt;std::string, std::any&gt; signals;</span></div><=
div><span style=3D"font-size:12.8px"><br></span></div><div><span style=3D"c=
olor:rgb(80,0,80);font-size:12.8px">they simply obtain it automatically, to=
 save the users time.</span><span style=3D"font-size:12.8px"><br></span></d=
iv></div></blockquote><div><br>I&#39;m going to forget for the moment that =
`any` has no mechanism to allow multiple users to add multiple callbacks to=
 the same object, while `signal_t` does. So really, what you&#39;d need is =
a `vector&lt;any&gt;` along with various controlling info and so forth to u=
nregister functions. But again, let&#39;s ignore that.<br><br>I am mostly i=
gnorant of how Qt&#39;s signals/slots stuff works. However, I&#39;m fairly =
sure that having a single variable declaration doesn&#39;t save users any t=
ime over multiple declarations. Why? Because they still have to populate th=
at `map`.<br><br>The initializer may not be in the header. But it still has=
 to <i>exist</i>. And therefore, it is the difference between:<br><br><div =
style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, 187, =
187); border-style: solid; border-width: 1px; overflow-wrap: break-word;" c=
lass=3D"prettyprint"><code class=3D"prettyprint"><div class=3D"subprettypri=
nt"><span style=3D"color: #000;" class=3D"styled-by-prettify">signal_t s</s=
pan><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><s=
pan style=3D"color: #008;" class=3D"styled-by-prettify">void</span><span st=
yle=3D"color: #660;" class=3D"styled-by-prettify">()&gt;</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> sig1</span><span style=3D"c=
olor: #660;" class=3D"styled-by-prettify">;</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"><br>signal_t s</span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">&lt;</span><span style=3D"color: #008;=
" class=3D"styled-by-prettify">void</span><span style=3D"color: #660;" clas=
s=3D"styled-by-prettify">(</span><span style=3D"color: #008;" class=3D"styl=
ed-by-prettify">int</span><span style=3D"color: #660;" class=3D"styled-by-p=
rettify">)&gt;</span><span style=3D"color: #000;" class=3D"styled-by-pretti=
fy"> sig2</span><span style=3D"color: #660;" class=3D"styled-by-prettify">;=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>signal=
_t s</span><span style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</=
span><span style=3D"color: #008;" class=3D"styled-by-prettify">void</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span styl=
e=3D"color: #008;" class=3D"styled-by-prettify">float</span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">)&gt;</span><span style=3D"color=
: #000;" class=3D"styled-by-prettify"> sig3</span><span style=3D"color: #66=
0;" class=3D"styled-by-prettify">;</span></div></code></div><div><span styl=
e=3D"font-size:12.8px"><br>And:<br><br></span><div style=3D"background-colo=
r: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style: soli=
d; border-width: 1px; overflow-wrap: break-word;" class=3D"prettyprint"><co=
de class=3D"prettyprint"><div class=3D"subprettyprint"><span style=3D"color=
: #000;" class=3D"styled-by-prettify">std</span><span style=3D"color: #660;=
" class=3D"styled-by-prettify">::</span><span style=3D"color: #000;" class=
=3D"styled-by-prettify">map</span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">&lt;</span><span style=3D"color: #000;" class=3D"styled-by=
-prettify">std</span><span style=3D"color: #660;" class=3D"styled-by-pretti=
fy">::</span><span style=3D"color: #008;" class=3D"styled-by-prettify">stri=
ng</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,</span>=
<span style=3D"color: #000;" class=3D"styled-by-prettify"> std</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">::</span><span style=3D=
"color: #000;" class=3D"styled-by-prettify">any</span><span style=3D"color:=
 #660;" class=3D"styled-by-prettify">&gt;</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> signals </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">{</span><span style=3D"color: #000;" class=3D"styled-by-pret=
tify"><br>=C2=A0 =C2=A0 </span><span style=3D"color: #660;" class=3D"styled=
-by-prettify">{</span><span style=3D"color: #080;" class=3D"styled-by-prett=
ify">&quot;sig1&quot;</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">{}},</s=
pan><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: #080;" class=3D"styled-by-prettify">&quot;sig2&q=
uot;</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"color: #000;" class=3D"styled-by-prettify"><br>=C2=A0 =C2=A0 </span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">{</span><span style=
=3D"color: #080;" class=3D"styled-by-prettify">&quot;sig3&quot;</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><span style=3D"color: #000;"=
 class=3D"styled-by-prettify"><br></span></div></code></div><span style=3D"=
font-size:12.8px"><br>I fail to see how this saved anyone time. Indeed it n=
ow takes up time, since I have to do a map access in order to get to a sign=
al. The other way, it&#39;s just a member access, which is comparably negli=
gible. So that&#39;s <i>wasting</i> time; specifically, runtime performance=
.. And memory allocation overhead.<br><br>Also, with individual declarations=
, it is impossible for me to accidentally misspell a signal name without th=
e compiler complaining. Whereas the runtime version makes it very possible =
for me to misspell signal names.<br><br>Lastly, considering that Qt&#39;s s=
ignals/slots are all based on code generation, if Qt <i>wanted</i> to do th=
eir signals with type-erased function signatures, they could have. We there=
fore must assume that they explicitly choose not to.<br><br></span><span st=
yle=3D"font-size:12.8px"></span></div><span style=3D"font-size:12.8px"></sp=
an></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: =
0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div=
><span style=3D"font-size:12.8px"></span></div><div><span style=3D"color:rg=
b(80,0,80);font-size:12.8px"></span></div><div><span style=3D"color:rgb(80,=
0,80);font-size:12.8px">They can change the signatures of signal handlers w=
ithout updating code as much as would be necessary otherwise.</span></div><=
/div></blockquote><div><br>Um, how? If you change the signature of a signal=
, then every handler registered to it must match. And since we&#39;re talki=
ng `any`, it has to match the exact signature provided (just as `any_cast` =
requires an exact match of the type).<br><br>All you&#39;ve done is make th=
e necessary matching be implicit rather than explicit.<br>=C2=A0</div><bloc=
kquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-l=
eft: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div></div><blockq=
uote class=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-left:=
 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><span style=3D"font=
-size:12.8px">So in exactly what way would these `any` changes reduce Qt&#3=
9;s MOC complexity with regard to signals/slots? Also, the reasons Qt=C2=A0=
</span><a href=3D"http://doc.qt.io/qt-5/why-moc.html" style=3D"font-size:12=
..8px" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;ht=
tp://www.google.com/url?q\x3dhttp%3A%2F%2Fdoc.qt.io%2Fqt-5%2Fwhy-moc.html\x=
26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNEbNKUwXaG_Whlox2Q-59aSKCtpCA&#39;;re=
turn true;" onclick=3D"this.href=3D&#39;http://www.google.com/url?q\x3dhttp=
%3A%2F%2Fdoc.qt.io%2Fqt-5%2Fwhy-moc.html\x26sa\x3dD\x26sntz\x3d1\x26usg\x3d=
AFQjCNEbNKUwXaG_Whlox2Q-59aSKCtpCA&#39;;return true;">gives for using MOC</=
a><span style=3D"font-size:12.8px">=C2=A0for signals/slots doesn&#39;t incl=
ude &quot;the standard library doesn&#39;t have a signature-erased `functio=
n` type&quot;. If they wanted to use one, they could have written one thems=
elves, rather than relying on code generation.</span><span style=3D"color:r=
gb(80,0,80);font-size:12.8px"><br></span></div></blockquote><div><span styl=
e=3D"color:rgb(80,0,80);font-size:12.8px"><br></span></div><div><span style=
=3D"color:rgb(80,0,80);font-size:12.8px">It would make that code-generating=
 approach unnecessary.</span></div></div></blockquote><div><br>If you read =
what I linked to, you&#39;ll see that they use the code generator for a <i>=
lot more</i> than signals/slots. So it&#39;s not going away, no matter what=
 you do with `any`.<br><br></div><blockquote class=3D"gmail_quote" style=3D=
"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex=
;"><div dir=3D"ltr"><div><span style=3D"color:rgb(80,0,80);font-size:12.8px=
">See:</span></div><div><span style=3D"color:rgb(80,0,80);font-size:12.8px"=
><br></span></div><div><font color=3D"#500050"><span style=3D"font-size:12.=
8px"><a href=3D"https://github.com/user1095108/crl" target=3D"_blank" rel=
=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://www.google.com/url?q\=
x3dhttps%3A%2F%2Fgithub.com%2Fuser1095108%2Fcrl\x26sa\x3dD\x26sntz\x3d1\x26=
usg\x3dAFQjCNGJyySA7nW6jmVw0fqtmNbIzbWzDw&#39;;return true;" onclick=3D"thi=
s.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.com%2Fus=
er1095108%2Fcrl\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNGJyySA7nW6jmVw0fqtm=
NbIzbWzDw&#39;;return true;">https://github.com/<wbr>user1095108/crl</a></s=
pan></font><br></div><div><span style=3D"font-size:12.8px"><br></span></div=
></div></blockquote><div><br>... it&#39;d be nice if you explained what cod=
e is on that site that is relevant to this discussion.</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/84ce2d13-ed47-4734-8cc0-f7e90113e65a%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/84ce2d13-ed47-4734-8cc0-f7e90113e65a=
%40isocpp.org</a>.<br />

------=_Part_3524_995898445.1489537937296--

------=_Part_3523_1957528745.1489537937295--

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Wed, 15 Mar 2017 01:08:14 +0000
Raw View
--94eb2c124cc441df6e054aba94ff
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Tue, Mar 14, 2017 at 7:40 PM, Thiago Macieira <thiago@macieira.org>
wrote:

> On ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017 09:42:27 PDT 'Edward Catmur=
' via ISO
> C++
> Standard - Future Proposals wrote:
> > That can be held behind the vptr, or in practice the op handler. Just a=
dd
> > two vtable slots or ops. (libstdc++ and libcxx use ops; I can't remembe=
r
> > what MSVC uses. Boost.Any uses for-goodness polymorphism, wow. Still ze=
ro
> > runtime memory cost.)
> >
> > As for triviality, see the erasure above.
> >
> >
> > I'd consider that trivial.
>
> Then patch it and you'll see.
>

Sure:
https://github.com/llvm-mirror/libcxx/compare/master...ecatmur:any-invoke
That took a little over an hour, mostly due to unfamiliarity with the
libcxx build system (I was initially going to implement it on top of
libstdc++ but got bored waiting for the gcc git tree to download).


> Specifically, how to implement the throw case when the parameters don't
> match.
>

Compare typeids of signatures and throw on mismatch.

And do they need to match exactly, or will promotion/demotion rules apply?
> How
> about type conversions, like the string -> string_view case in the other
> thread?
>

Yes, an exact match is required. Arguments can be converted at call time,
but the supplied signature must match exactly.

--=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/CAJnLdObDNzjpkj-%3DDx0TEt%2BdYGDLz0wmd1pfVjfNH9B=
LgZO6tQ%40mail.gmail.com.

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

<div dir=3D"ltr">On Tue, Mar 14, 2017 at 7:40 PM, Thiago Macieira <span dir=
=3D"ltr">&lt;<a href=3D"mailto:thiago@macieira.org" target=3D"_blank">thiag=
o@macieira.org</a>&gt;</span> wrote:<br><div class=3D"gmail_extra"><div cla=
ss=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border=
-left-style:solid;padding-left:1ex">On ter=C3=A7a-feira, 14 de mar=C3=A7o d=
e 2017 09:42:27 PDT &#39;Edward Catmur&#39; via ISO C++<br>
Standard - Future Proposals wrote:<br>
&gt; That can be held behind the vptr, or in practice the op handler. Just =
add<br>
&gt; two vtable slots or ops. (libstdc++ and libcxx use ops; I can&#39;t re=
member<br>
&gt; what MSVC uses. Boost.Any uses for-goodness polymorphism, wow. Still z=
ero<br>
&gt; runtime memory cost.)<br>
&gt;<br>
&gt; As for triviality, see the erasure above.<br>
&gt;<br>
&gt;<br>
&gt; I&#39;d consider that trivial.<br>
<br>
Then patch it and you&#39;ll see.<br></blockquote><div><br></div><div>Sure:=
=C2=A0<a href=3D"https://github.com/llvm-mirror/libcxx/compare/master...eca=
tmur:any-invoke">https://github.com/llvm-mirror/libcxx/compare/master...eca=
tmur:any-invoke</a></div><div>That took a little over an hour, mostly due t=
o unfamiliarity with the libcxx build system (I was initially going to impl=
ement it on top of libstdc++ but got bored waiting for the gcc git tree to =
download).</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D=
"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,2=
04,204);border-left-style:solid;padding-left:1ex">
Specifically, how to implement the throw case when the parameters don&#39;t=
 match.<br></blockquote><div><br></div><div>Compare typeids of signatures a=
nd throw on mismatch.</div><div><br></div><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:=
rgb(204,204,204);border-left-style:solid;padding-left:1ex">
And do they need to match exactly, or will promotion/demotion rules apply? =
How<br>
about type conversions, like the string -&gt; string_view case in the other=
<br>
thread?<br></blockquote><div><br></div><div>Yes, an exact match is required=
.. Arguments can be converted at call time, but the supplied signature must =
match exactly.</div></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAJnLdObDNzjpkj-%3DDx0TEt%2BdYGDLz0wm=
d1pfVjfNH9BLgZO6tQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdObDNzjp=
kj-%3DDx0TEt%2BdYGDLz0wmd1pfVjfNH9BLgZO6tQ%40mail.gmail.com</a>.<br />

--94eb2c124cc441df6e054aba94ff--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Tue, 14 Mar 2017 18:43:54 -0700
Raw View
Em ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 16:38:52 PDT, janezz=
55 . escreveu:
> I didn't have that in mind at all. Currently signal/slots outside of Qt's
> mechanism are used something like:
>=20
> signal_t s<void()> clicked;
> // ...
> // a whole bunch of signal declarations
>=20
> That can be reduced to a single line, for example:
>=20
> std::map<std::string, std::any> signals;
>=20
> they simply obtain it automatically, to save the users time.

Now you introduce the possibility of typos, because you have something (a=
=20
std::string) that the compiler cannot check. I advise against designing you=
r=20
API like this.

> They can change the signatures of signal handlers without updating code a=
s
> much as would be necessary otherwise.

And that's probably even worse, because now suddenly a slot that used to wo=
rk=20
when connected to a given signal will produce an exception.

In fact, I've said time and again: signals ought to be noexcept (or close t=
o).=20
A slot shouldn't throw, since the signal emitter shouldn't have to care abo=
ut=20
a mistake that happened because a third party connected the signal to the=
=20
slot. But this means that you cannot have a conversion problem from std::an=
y=20
to the correct type, which in turn means that the code that connected must=
=20
have a way to ensure that the types are correct.

By type-erasing the signal, you lose that.

> So in exactly what way would these `any` changes reduce Qt's MOC complexi=
ty
> with regard to signals/slots? Also, the reasons Qt gives for using MOC
> <http://doc.qt.io/qt-5/why-moc.html> for signals/slots doesn't include "t=
he
> standard library doesn't have a signature-erased `function` type". If the=
y
> wanted to use one, they could have written one themselves, rather than
> relying on code generation.
>=20
> It would make that code-generating approach unnecessary. See:
>=20
> https://github.com/user1095108/crl

You forgot all the other reasons. One of them is what I gave above: ensurin=
g=20
the correct parameter types between the signal and the slot. If you erase t=
he=20
type in the public API[*], you lose that. Qt's signal-slot mechanism, becau=
se=20
it has an actual type, allows the connect() code to ensure the proper=20
connection. More than that, it also allows conversion, so you can connect a=
=20
signal that carries (int, int) to a slot that takes (unsigned long long).=
=20

[*] in the public API; whatever you use in the internals to keep your=20
connection list is your business. Type erasure here makes sense.

The next reason is the need to be able to add signals to an existing class=
=20
without changing the class layout. The only thing that can accomplish that =
in=20
the current ABIs are member functions.

And third, we need to be able to interact with RPC mechanisms and other=20
languages, which is the reason another reason MOC must still exist.

If you put all of those together, then not even when we have C++ Reflection=
=20
will MOC go away. It might be simplified, but something must implement thos=
e=20
member functions.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/106399611.LVhzSDA8if%40tjmaciei-mobl1.

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Tue, 14 Mar 2017 18:58:10 -0700
Raw View
Em ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 18:08:14 PDT, 'Edwar=
d Catmur' via ISO=20
C++ Standard - Future Proposals escreveu:
> Sure:
> https://github.com/llvm-mirror/libcxx/compare/master...ecatmur:any-invoke
> That took a little over an hour, mostly due to unfamiliarity with the
> libcxx build system (I was initially going to implement it on top of
> libstdc++ but got bored waiting for the gcc git tree to download).

Yeah, that takes a while. You can help by downloading only the master branc=
h.

> > Specifically, how to implement the throw case when the parameters don't
> > match.
>=20
> Compare typeids of signatures and throw on mismatch.

Please write some tests. I don't think you've covered enough.

Specifically, I think this is a deal breaker:

> > And do they need to match exactly, or will promotion/demotion rules app=
ly?
> > How
> > about type conversions, like the string -> string_view case in the othe=
r
> > thread?
>=20
> Yes, an exact match is required. Arguments can be converted at call time,
> but the supplied signature must match exactly.

Note that it's an *exact* exact type match. That is, a const int& parameter=
 is=20
not the same as int. To operate this callable, you must ensure that the _A=
=20
template type pack matches completely exactly.

That is, these two produce different signatures:

 std::string s("Hello");
 std::invoke(myany, s);
 std::invoke(myany, std::string("Hello"));

Because of that, every time you try to pass a variable instead of a tempora=
ry,=20
you'd have to explicitly make it rvalue.

Therefore, I'd say that requiring exact match is not acceptable and leads t=
o=20
unusable API. You need to insert some leeway.

Let us know what you come up with.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2663636.SEFX8e3ZWL%40tjmaciei-mobl1.

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Tue, 14 Mar 2017 20:18:53 -0700
Raw View
Em ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 17:32:17 PDT, Nicol =
Bolas escreveu:
> I am mostly ignorant of how Qt's signals/slots stuff works. However, I'm
> fairly sure that having a single variable declaration doesn't save users
> any time over multiple declarations. Why? Because they still have to
> populate that `map`.

It doesn't. A single variable would make things worse. See my other reply.

> Lastly, considering that Qt's signals/slots are all based on code
> generation, if Qt *wanted* to do their signals with type-erased function
> signatures, they could have. We therefore must assume that they explicitl=
y
> choose not to.

The public API is not type-erased; the internal implementation erases the=
=20
type.

=3D=3D Simplified, crash course in Qt's signal-slot implementation =3D=3D

A signal is a member function, such as:

    void channelBytesWritten(int channel, qint64 bytes);

That function is implemented by moc, which simply puts all the parameters i=
n a=20
type-erased array:

void QIODevice::channelBytesWritten(int _t1, qint64 _t2)
{
    void *_a[] =3D { nullptr,=20
 const_cast<void*>(reinterpret_cast<const void*>(&_t1)),=20
 const_cast<void*>(reinterpret_cast<const void*>(&_t2)) };
    QMetaObject::activate(this, &staticMetaObject, 3, _a);
}

Internally, QObject has an associative container that (indirectly) associat=
es
 1 x void (QObject:: *)()   to N x callable(void **)

This allows QObject to keep a single structure that applies to all signals =
and=20
can operate without having to care what the actual signals and slot types a=
re.

The magic happens in the connect() call. When you do:

 connect(sender, &QIODevice::channelBytesWritten, [](unsigned) { });

the template connect() function will register the actual mapper, which is:

static void call(Function &f, void **arg)=20
{
 f((*reinterpret_cast<typename RemoveRef<SignalArgs>::Type *>(arg[II+1]))..=
..);
}

SignalArgs and II are template parameter packs; SignalArgs is shortened to =
the=20
number of arguments in the slot function. This "call" function does the typ=
e=20
conversion and, because it must compile, checks that the arguments are=20
compatible. That is, if you tried to connect the signal above to [](void *)=
,=20
the function wouldn't compile as f(*reinterpret_cast<int *>(arg[1])) wouldn=
't=20
compile.





It's actually more complicated than I described, because:
 a) there's the cross-thread functionality which must copy the signal's val=
ues=20
    and post that to another thread (think std::vector<std::any>)
 b) PMFs are extremely hard to manipulate, so the internal associative=20
    container maps a signal ID to the callable; the connect() function obta=
ins=20
    that ID at runtime by querying more MOC-generated code (it's that
    "3" you see in the MOC-generated code for the signal)
 c) I didn't show in the callable the code that deals with non-void return
    types. Signals and slots can return and they must match too. The return=
 is=20
    that "nullptr" in the first element of the void** array.
 d) the connection list is more complex than a simple associative container=
,=20
    as each connection belongs to both sender and receiver. When a QObject
    is destroyed, it must clear the connections in all senders and receiver=
s
    it is connected to.
 e) I didn't include the part about managing the callable object's lifetime
   and the QMetaObject::Connection handle that QObject::connect returns.
 f) there's the legacy, string-based connect code that must keep working

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2687608.NXmMsiyksr%40tjmaciei-mobl1.

.


Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date: Tue, 14 Mar 2017 20:44:27 -0700 (PDT)
Raw View
------=_Part_14014_68683676.1489549467198
Content-Type: multipart/alternative;
 boundary="----=_Part_14015_805213189.1489549467198"

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

On Thursday, March 2, 2017 at 10:26:01 AM UTC-8, jane...@gmail.com wrote:
>
> I believe that std::any should be made invokable, if an invokable object=
=20
> is stored into it, such as a function pointer, method pointer, or a funct=
or=20
> (such as std::function<> and others). This would raise the level of=20
> abstraction C++ offers to one comparable to scripting languages, where yo=
u=20
> can often invoke an arbitrary variable. I've prepared 2 examples:
>
> https://github.com/user1095108/generic/blob/master/anyfunction.hpp
> https://github.com/user1095108/generic/blob/master/anyfunction.cpp
>
> These examples are built around a std::any lookalike, but their=20
> functionality could be easily merged into a std.:any, asserts could be=20
> substituted for exception throwing and other changes made to make it more=
=20
> std:: palatable.
>

Sorry it took me until now to follow these links!
Here are the failing test cases I found by inspection of the code.

  gnr::any_function<> f;
  int i =3D 42;
  f =3D [a=3D&i, b=3D&i, c=3D&i, d=3D&i, e=3D&i]() { };

fails a static_assert. I think this one can be fixed easily.

  auto g =3D +[](){ return 42; };
  f =3D g;

gives a nasty compiler error about dropping a `const` qualifier. I think=20
this one can probably be fixed, although to be honest I don't understand=20
why it should have failed. Might even be a compiler bug.

  gnr::any_function<> f;
  int i =3D 42;
  f =3D [](const int& i) { };
  f(i);

fails an assertion at runtime. Unfortunately, I think this one is=20
fundamentally unfixable and explodes the whole idea.

=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/77e54280-d3fd-47db-ac25-207b4866cc84%40isocpp.or=
g.

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

<div dir=3D"ltr">On Thursday, March 2, 2017 at 10:26:01 AM UTC-8, jane...@g=
mail.com wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr=
">I believe that std::any should be made invokable, if an invokable object =
is stored into it, such as a function pointer, method pointer, or a functor=
 (such as std::function&lt;&gt; and others). This would raise the level of =
abstraction C++ offers to one comparable to scripting languages, where you =
can often invoke an arbitrary variable. I&#39;ve prepared 2 examples:<div><=
br></div><div><a href=3D"https://github.com/user1095108/generic/blob/master=
/anyfunction.hpp" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.hr=
ef=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.com%2Fuser10=
95108%2Fgeneric%2Fblob%2Fmaster%2Fanyfunction.hpp\x26sa\x3dD\x26sntz\x3d1\x=
26usg\x3dAFQjCNHiOJZc_GQQHihg4JUyh_yPTkYVEA&#39;;return true;" onclick=3D"t=
his.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.com%2F=
user1095108%2Fgeneric%2Fblob%2Fmaster%2Fanyfunction.hpp\x26sa\x3dD\x26sntz\=
x3d1\x26usg\x3dAFQjCNHiOJZc_GQQHihg4JUyh_yPTkYVEA&#39;;return true;">https:=
//github.com/<wbr>user1095108/generic/blob/<wbr>master/anyfunction.hpp</a><=
br></div><div><div><a href=3D"https://github.com/user1095108/generic/blob/m=
aster/anyfunction.cpp" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"th=
is.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.com%2Fu=
ser1095108%2Fgeneric%2Fblob%2Fmaster%2Fanyfunction.cpp\x26sa\x3dD\x26sntz\x=
3d1\x26usg\x3dAFQjCNGJMSuq9jlbdXeWFwuMbWo4fuFtAw&#39;;return true;" onclick=
=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.c=
om%2Fuser1095108%2Fgeneric%2Fblob%2Fmaster%2Fanyfunction.cpp\x26sa\x3dD\x26=
sntz\x3d1\x26usg\x3dAFQjCNGJMSuq9jlbdXeWFwuMbWo4fuFtAw&#39;;return true;">h=
ttps://github.com/<wbr>user1095108/generic/blob/<wbr>master/anyfunction.cpp=
</a><br></div></div><div><br></div><div>These examples are built around a s=
td::any lookalike, but their functionality could be easily merged into a st=
d.:any, asserts could be substituted for exception throwing and other chang=
es made to make it more std:: palatable.</div></div></blockquote><div><br><=
/div><div>Sorry it took me until now to follow these links!</div><div>Here =
are the failing test cases I found by inspection of the code.</div><div><br=
></div><div><div style=3D"font-family: arial, sans-serif;"><font face=3D"mo=
nospace, monospace">=C2=A0 gnr::any_function&lt;&gt; f;</font></div><div st=
yle=3D"font-family: arial, sans-serif;"><font face=3D"monospace, monospace"=
>=C2=A0 int i =3D 42;</font></div><div style=3D"font-family: arial, sans-se=
rif;"><font face=3D"monospace, monospace">=C2=A0 f =3D [a=3D&amp;i, b=3D&am=
p;i, c=3D&amp;i, d=3D&amp;i, e=3D&amp;i]() { };</font></div><div style=3D"f=
ont-family: arial, sans-serif;"><br></div><div style=3D"font-family: arial,=
 sans-serif;">fails a static_assert. I think this one can be fixed easily.<=
/div><div style=3D"font-family: arial, sans-serif;"><br></div><div style=3D=
"font-family: arial, sans-serif;"><div><span style=3D"font-family: monospac=
e, monospace;">=C2=A0 auto g =3D +[](){ return 42; };</span><br></div><div>=
<font face=3D"monospace, monospace">=C2=A0 f =3D g;</font></div><div><br></=
div><div>gives a nasty compiler error about dropping a `const` qualifier. I=
 think this one can probably be fixed, although to be honest I don&#39;t un=
derstand why it should have failed. Might even be a compiler bug.</div></di=
v><div style=3D"font-family: arial, sans-serif;"><br></div><div style=3D"fo=
nt-family: arial, sans-serif;"><div><font face=3D"monospace, monospace">=C2=
=A0 gnr::any_function&lt;&gt; f;</font></div><div><font face=3D"monospace, =
monospace">=C2=A0 int i =3D 42;</font></div><div><font face=3D"monospace, m=
onospace">=C2=A0 f =3D [](const int&amp; i) { };</font></div><div><font fac=
e=3D"monospace, monospace">=C2=A0 f(i);</font></div></div><div style=3D"fon=
t-family: arial, sans-serif;"><br></div><div style=3D"font-family: arial, s=
ans-serif;">fails an assertion at runtime. Unfortunately, I think this one =
is fundamentally unfixable and explodes the whole idea.</div><div style=3D"=
font-family: arial, sans-serif;"><br></div></div><div style=3D"font-family:=
 arial, sans-serif;">=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/77e54280-d3fd-47db-ac25-207b4866cc84%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/77e54280-d3fd-47db-ac25-207b4866cc84=
%40isocpp.org</a>.<br />

------=_Part_14015_805213189.1489549467198--

------=_Part_14014_68683676.1489549467198--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Wed, 15 Mar 2017 09:55:12 +0100
Raw View
--94eb2c06146a4fa938054ac11a7a
Content-Type: text/plain; charset=UTF-8

I fail to see how this saved anyone time. Indeed it now takes up time,
since I have to do a map access in order to get to a signal. The other way,
it's just a member access, which is comparably negligible. So that's
*wasting* time; specifically, runtime performance. And memory allocation
overhead.

You neglect the fact you need to connect those plethora of signals to slots
somewhere. Also, you may hide the map, or whatever you use, behind a
convenient interface.

Lastly, considering that Qt's signals/slots are all based on code
generation, if Qt *wanted* to do their signals with type-erased function
signatures, they could have. We therefore must assume that they explicitly
choose not to.

We can assume many things. In my opinion, Qt implements signal/slots
through code generation to support a broader range of compiler than it
otherwise might and because of portability concerns.

Um, how? If you change the signature of a signal, then every handler
registered to it must match. And since we're talking `any`, it has to match
the exact signature provided (just as `any_cast` requires an exact match of
the type).

Not having to update

signal_t<signature> of course, just the signal handlers and signal emits.

.... it'd be nice if you explained what code is on that site that is
relevant to this discussion.

it's an example of a signal/slot implementation. I for one, don't want to
use a Qt-specific code generator for my signals and slots. But, in essence,
it is not relevant. We are discussing changes to any, not signals and
slots. I just would not need to implement any_function. If the object
stored in any could be invoked without an any_cast. This means either an
operator() overload or std::invoke support for any.

2017-03-15 1:32 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

> On Tuesday, March 14, 2017 at 7:38:55 PM UTC-4, janezz55 . wrote:
>>
>> So you see `vector<int>` and `vector<float>` as "more code, which means
>>> greater complexity"? Because that's what we're talking about: a different
>>> template instantiation.
>>>
>>
>> I didn't have that in mind at all. Currently signal/slots outside of Qt's
>> mechanism are used something like:
>>
>> signal_t s<void()> clicked;
>> // ...
>> // a whole bunch of signal declarations
>>
>> That can be reduced to a single line, for example:
>>
>> std::map<std::string, std::any> signals;
>>
>> they simply obtain it automatically, to save the users time.
>>
>
> I'm going to forget for the moment that `any` has no mechanism to allow
> multiple users to add multiple callbacks to the same object, while
> `signal_t` does. So really, what you'd need is a `vector<any>` along with
> various controlling info and so forth to unregister functions. But again,
> let's ignore that.
>
> I am mostly ignorant of how Qt's signals/slots stuff works. However, I'm
> fairly sure that having a single variable declaration doesn't save users
> any time over multiple declarations. Why? Because they still have to
> populate that `map`.
>
> The initializer may not be in the header. But it still has to *exist*.
> And therefore, it is the difference between:
>
> signal_t s<void()> sig1;
> signal_t s<void(int)> sig2;
> signal_t s<void(float)> sig3;
>
> And:
>
> std::map<std::string, std::any> signals = {
>     {"sig1", {}},
>     {"sig2", {}},
>     {"sig3", {}}};
>
> I fail to see how this saved anyone time. Indeed it now takes up time,
> since I have to do a map access in order to get to a signal. The other way,
> it's just a member access, which is comparably negligible. So that's
> *wasting* time; specifically, runtime performance. And memory allocation
> overhead.
>
> Also, with individual declarations, it is impossible for me to
> accidentally misspell a signal name without the compiler complaining.
> Whereas the runtime version makes it very possible for me to misspell
> signal names.
>
> Lastly, considering that Qt's signals/slots are all based on code
> generation, if Qt *wanted* to do their signals with type-erased function
> signatures, they could have. We therefore must assume that they explicitly
> choose not to.
>
> They can change the signatures of signal handlers without updating code as
>> much as would be necessary otherwise.
>>
>
> Um, how? If you change the signature of a signal, then every handler
> registered to it must match. And since we're talking `any`, it has to match
> the exact signature provided (just as `any_cast` requires an exact match of
> the type).
>
> All you've done is make the necessary matching be implicit rather than
> explicit.
>
>
>> So in exactly what way would these `any` changes reduce Qt's MOC
>>> complexity with regard to signals/slots? Also, the reasons Qt gives for
>>> using MOC <http://doc.qt.io/qt-5/why-moc.html> for signals/slots
>>> doesn't include "the standard library doesn't have a signature-erased
>>> `function` type". If they wanted to use one, they could have written one
>>> themselves, rather than relying on code generation.
>>>
>>
>> It would make that code-generating approach unnecessary.
>>
>
> If you read what I linked to, you'll see that they use the code generator
> for a *lot more* than signals/slots. So it's not going away, no matter
> what you do with `any`.
>
> See:
>>
>> https://github.com/user1095108/crl
>>
>>
> ... it'd be nice if you explained what code is on that site that is
> relevant to this discussion.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/84ce2d13-ed47-4734-
> 8cc0-f7e90113e65a%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/84ce2d13-ed47-4734-8cc0-f7e90113e65a%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/CAO9E8GEYvsG%3D77jmN-mPVp7ZPrdchD-0nmof5OduiehDNwxn-w%40mail.gmail.com.

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

<div dir=3D"ltr"><span style=3D"font-size:12.8px">I fail to see how this sa=
ved anyone time. Indeed it now takes up time, since I have to do a map acce=
ss in order to get to a signal. The other way, it&#39;s just a member acces=
s, which is comparably negligible. So that&#39;s=C2=A0</span><i style=3D"fo=
nt-size:12.8px">wasting</i><span style=3D"font-size:12.8px">=C2=A0time; spe=
cifically, runtime performance. And memory allocation overhead.</span><br s=
tyle=3D"font-size:12.8px"><div><span style=3D"font-size:12.8px"><br></span>=
</div><div><span style=3D"font-size:12.8px">You neglect the fact you need t=
o connect those plethora of signals to slots somewhere. Also, you may hide =
the map, or whatever you use, behind a convenient interface.</span></div><d=
iv><span style=3D"font-size:12.8px"><br></span></div><div><span style=3D"fo=
nt-size:12.8px">Lastly, considering that Qt&#39;s signals/slots are all bas=
ed on code generation, if Qt=C2=A0</span><i style=3D"font-size:12.8px">want=
ed</i><span style=3D"font-size:12.8px">=C2=A0to do their signals with type-=
erased function signatures, they could have. We therefore must assume that =
they explicitly choose not to.</span><br style=3D"font-size:12.8px"></div><=
div><span style=3D"font-size:12.8px"><br></span></div><div><span style=3D"f=
ont-size:12.8px">We can assume many things. In my opinion, Qt implements si=
gnal/slots through code generation to support a broader range of compiler t=
han it otherwise might and because of portability concerns.</span></div><di=
v><span style=3D"font-size:12.8px"><br></span></div><div><span style=3D"fon=
t-size:12.8px">Um, how? If you change the signature of a signal, then every=
 handler registered to it must match. And since we&#39;re talking `any`, it=
 has to match the exact signature provided (just as `any_cast` requires an =
exact match of the type).</span><br style=3D"font-size:12.8px"></div><div><=
br></div><div>Not having to update</div><div><br></div><div>signal_t&lt;sig=
nature&gt; of course, just the signal handlers and signal emits.</div><div>=
<br></div><div><div style=3D"font-size:12.8px">... it&#39;d be nice if you =
explained what code is on that site that is relevant to this discussion.</d=
iv><div class=3D"gmail-yj6qo gmail-ajU" style=3D"font-size:12.8px"></div></=
div><div><span style=3D"font-size:12.8px"><br></span></div><div>it&#39;s an=
 example of a signal/slot implementation. I for one, don&#39;t want to use =
a Qt-specific code generator for my signals and slots. But, in essence, it =
is not relevant. We are discussing changes to any, not signals and slots. I=
 just would not need to implement any_function. If the object stored in any=
 could be invoked without an any_cast. This means either an operator() over=
load or std::invoke support for any.</div></div><div class=3D"gmail_extra">=
<br><div class=3D"gmail_quote">2017-03-15 1:32 GMT+01:00 Nicol Bolas <span =
dir=3D"ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jm=
ckesson@gmail.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div di=
r=3D"ltr">On Tuesday, March 14, 2017 at 7:38:55 PM UTC-4, janezz55 . wrote:=
<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex"><span style=3D"font-size:12.8px">So you se=
e `vector&lt;int&gt;` and `vector&lt;float&gt;` as &quot;more code, which m=
eans greater complexity&quot;? Because that&#39;s what we&#39;re talking ab=
out: a different template instantiation.</span><br></blockquote><div><span =
style=3D"font-size:12.8px"><br></span></div><div><span style=3D"font-size:1=
2.8px">I didn&#39;t have that in mind at all. Currently signal/slots outsid=
e of Qt&#39;s mechanism are used something like:</span></div><div><span sty=
le=3D"font-size:12.8px"><br></span></div><div><span style=3D"font-size:12.8=
px">signal_t s&lt;void()&gt; clicked;</span></div><div><span style=3D"font-=
size:12.8px">// ...</span></div><div><span style=3D"font-size:12.8px">// a =
whole bunch of signal declarations</span></div><div><span style=3D"font-siz=
e:12.8px"><br></span></div><div><span style=3D"font-size:12.8px">That can b=
e reduced to a single line, for example:</span></div><div><span style=3D"fo=
nt-size:12.8px"><br></span></div><div><span style=3D"font-size:12.8px">std:=
:map&lt;std::string, std::any&gt; signals;</span></div><div><span style=3D"=
font-size:12.8px"><br></span></div><div><span style=3D"color:rgb(80,0,80);f=
ont-size:12.8px">they simply obtain it automatically, to save the users tim=
e.</span><span style=3D"font-size:12.8px"><br></span></div></div></blockquo=
te><div><br>I&#39;m going to forget for the moment that `any` has no mechan=
ism to allow multiple users to add multiple callbacks to the same object, w=
hile `signal_t` does. So really, what you&#39;d need is a `vector&lt;any&gt=
;` along with various controlling info and so forth to unregister functions=
.. But again, let&#39;s ignore that.<br><br>I am mostly ignorant of how Qt&#=
39;s signals/slots stuff works. However, I&#39;m fairly sure that having a =
single variable declaration doesn&#39;t save users any time over multiple d=
eclarations. Why? Because they still have to populate that `map`.<br><br>Th=
e initializer may not be in the header. But it still has to <i>exist</i>. A=
nd therefore, it is the difference between:<br><br><div style=3D"background=
-color:rgb(250,250,250);border-color:rgb(187,187,187);border-style:solid;bo=
rder-width:1px" class=3D"m_-7537146832279090069prettyprint"><code class=3D"=
m_-7537146832279090069prettyprint"><div class=3D"m_-7537146832279090069subp=
rettyprint"><span style=3D"color:#000" class=3D"m_-7537146832279090069style=
d-by-prettify">signal_t s</span><span style=3D"color:#660" class=3D"m_-7537=
146832279090069styled-by-prettify">&lt;</span><span style=3D"color:#008" cl=
ass=3D"m_-7537146832279090069styled-by-prettify">void</span><span style=3D"=
color:#660" class=3D"m_-7537146832279090069styled-by-prettify">()&gt;</span=
><span style=3D"color:#000" class=3D"m_-7537146832279090069styled-by-pretti=
fy"> sig1</span><span style=3D"color:#660" class=3D"m_-7537146832279090069s=
tyled-by-prettify">;</span><span style=3D"color:#000" class=3D"m_-753714683=
2279090069styled-by-prettify"><br>signal_t s</span><span style=3D"color:#66=
0" class=3D"m_-7537146832279090069styled-by-prettify">&lt;</span><span styl=
e=3D"color:#008" class=3D"m_-7537146832279090069styled-by-prettify">void</s=
pan><span style=3D"color:#660" class=3D"m_-7537146832279090069styled-by-pre=
ttify">(</span><span style=3D"color:#008" class=3D"m_-7537146832279090069st=
yled-by-prettify">int</span><span style=3D"color:#660" class=3D"m_-75371468=
32279090069styled-by-prettify">)&gt;</span><span style=3D"color:#000" class=
=3D"m_-7537146832279090069styled-by-prettify"> sig2</span><span style=3D"co=
lor:#660" class=3D"m_-7537146832279090069styled-by-prettify">;</span><span =
style=3D"color:#000" class=3D"m_-7537146832279090069styled-by-prettify"><br=
>signal_t s</span><span style=3D"color:#660" class=3D"m_-753714683227909006=
9styled-by-prettify">&lt;</span><span style=3D"color:#008" class=3D"m_-7537=
146832279090069styled-by-prettify">void</span><span style=3D"color:#660" cl=
ass=3D"m_-7537146832279090069styled-by-prettify">(</span><span style=3D"col=
or:#008" class=3D"m_-7537146832279090069styled-by-prettify">float</span><sp=
an style=3D"color:#660" class=3D"m_-7537146832279090069styled-by-prettify">=
)&gt;</span><span style=3D"color:#000" class=3D"m_-7537146832279090069style=
d-by-prettify"> sig3</span><span style=3D"color:#660" class=3D"m_-753714683=
2279090069styled-by-prettify">;</span></div></code></div><div><span style=
=3D"font-size:12.8px"><br>And:<br><br></span><div style=3D"background-color=
:rgb(250,250,250);border-color:rgb(187,187,187);border-style:solid;border-w=
idth:1px" class=3D"m_-7537146832279090069prettyprint"><code class=3D"m_-753=
7146832279090069prettyprint"><div class=3D"m_-7537146832279090069subprettyp=
rint"><span style=3D"color:#000" class=3D"m_-7537146832279090069styled-by-p=
rettify">std</span><span style=3D"color:#660" class=3D"m_-75371468322790900=
69styled-by-prettify">::</span><span style=3D"color:#000" class=3D"m_-75371=
46832279090069styled-by-prettify">map</span><span style=3D"color:#660" clas=
s=3D"m_-7537146832279090069styled-by-prettify">&lt;</span><span style=3D"co=
lor:#000" class=3D"m_-7537146832279090069styled-by-prettify">std</span><spa=
n style=3D"color:#660" class=3D"m_-7537146832279090069styled-by-prettify">:=
:</span><span style=3D"color:#008" class=3D"m_-7537146832279090069styled-by=
-prettify">string</span><span style=3D"color:#660" class=3D"m_-753714683227=
9090069styled-by-prettify">,</span><span style=3D"color:#000" class=3D"m_-7=
537146832279090069styled-by-prettify"> std</span><span style=3D"color:#660"=
 class=3D"m_-7537146832279090069styled-by-prettify">::</span><span style=3D=
"color:#000" class=3D"m_-7537146832279090069styled-by-prettify">any</span><=
span style=3D"color:#660" class=3D"m_-7537146832279090069styled-by-prettify=
">&gt;</span><span style=3D"color:#000" class=3D"m_-7537146832279090069styl=
ed-by-prettify"> signals </span><span style=3D"color:#660" class=3D"m_-7537=
146832279090069styled-by-prettify">=3D</span><span style=3D"color:#000" cla=
ss=3D"m_-7537146832279090069styled-by-prettify"> </span><span style=3D"colo=
r:#660" class=3D"m_-7537146832279090069styled-by-prettify">{</span><span st=
yle=3D"color:#000" class=3D"m_-7537146832279090069styled-by-prettify"><br>=
=C2=A0 =C2=A0 </span><span style=3D"color:#660" class=3D"m_-753714683227909=
0069styled-by-prettify">{</span><span style=3D"color:#080" class=3D"m_-7537=
146832279090069styled-by-prettify">&quot;sig1&quot;</span><span style=3D"co=
lor:#660" class=3D"m_-7537146832279090069styled-by-prettify">,</span><span =
style=3D"color:#000" class=3D"m_-7537146832279090069styled-by-prettify"> </=
span><span style=3D"color:#660" class=3D"m_-7537146832279090069styled-by-pr=
ettify">{}},</span><span style=3D"color:#000" class=3D"m_-75371468322790900=
69styled-by-prettify"><br>=C2=A0 =C2=A0 </span><span style=3D"color:#660" c=
lass=3D"m_-7537146832279090069styled-by-prettify">{</span><span style=3D"co=
lor:#080" class=3D"m_-7537146832279090069styled-by-prettify">&quot;sig2&quo=
t;</span><span style=3D"color:#660" class=3D"m_-7537146832279090069styled-b=
y-prettify">,</span><span style=3D"color:#000" class=3D"m_-7537146832279090=
069styled-by-prettify"> </span><span style=3D"color:#660" class=3D"m_-75371=
46832279090069styled-by-prettify">{}},</span><span style=3D"color:#000" cla=
ss=3D"m_-7537146832279090069styled-by-prettify"><br>=C2=A0 =C2=A0 </span><s=
pan style=3D"color:#660" class=3D"m_-7537146832279090069styled-by-prettify"=
>{</span><span style=3D"color:#080" class=3D"m_-7537146832279090069styled-b=
y-prettify">&quot;sig3&quot;</span><span style=3D"color:#660" class=3D"m_-7=
537146832279090069styled-by-prettify">,</span><span style=3D"color:#000" cl=
ass=3D"m_-7537146832279090069styled-by-prettify"> </span><span style=3D"col=
or:#660" class=3D"m_-7537146832279090069styled-by-prettify">{}}};</span><sp=
an style=3D"color:#000" class=3D"m_-7537146832279090069styled-by-prettify">=
<br></span></div></code></div><span style=3D"font-size:12.8px"><br>I fail t=
o see how this saved anyone time. Indeed it now takes up time, since I have=
 to do a map access in order to get to a signal. The other way, it&#39;s ju=
st a member access, which is comparably negligible. So that&#39;s <i>wastin=
g</i> time; specifically, runtime performance. And memory allocation overhe=
ad.<br><br>Also, with individual declarations, it is impossible for me to a=
ccidentally misspell a signal name without the compiler complaining. Wherea=
s the runtime version makes it very possible for me to misspell signal name=
s.<br><br>Lastly, considering that Qt&#39;s signals/slots are all based on =
code generation, if Qt <i>wanted</i> to do their signals with type-erased f=
unction signatures, they could have. We therefore must assume that they exp=
licitly choose not to.<br><br></span><span style=3D"font-size:12.8px"></spa=
n></div><span style=3D"font-size:12.8px"></span></div><blockquote class=3D"=
gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div dir=3D"ltr"><div><span style=3D"font-size:12.8px"><=
/span></div><div><span style=3D"color:rgb(80,0,80);font-size:12.8px"></span=
></div><div><span style=3D"color:rgb(80,0,80);font-size:12.8px">They can ch=
ange the signatures of signal handlers without updating code as much as wou=
ld be necessary otherwise.</span></div></div></blockquote><div><br>Um, how?=
 If you change the signature of a signal, then every handler registered to =
it must match. And since we&#39;re talking `any`, it has to match the exact=
 signature provided (just as `any_cast` requires an exact match of the type=
).<br><br>All you&#39;ve done is make the necessary matching be implicit ra=
ther than explicit.<br>=C2=A0</div><blockquote class=3D"gmail_quote" style=
=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"=
><div dir=3D"ltr"><div></div><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1=
ex"><div><span style=3D"font-size:12.8px">So in exactly what way would thes=
e `any` changes reduce Qt&#39;s MOC complexity with regard to signals/slots=
? Also, the reasons Qt=C2=A0</span><a href=3D"http://doc.qt.io/qt-5/why-moc=
..html" style=3D"font-size:12.8px" rel=3D"nofollow" target=3D"_blank">gives =
for using MOC</a><span style=3D"font-size:12.8px">=C2=A0for signals/slots d=
oesn&#39;t include &quot;the standard library doesn&#39;t have a signature-=
erased `function` type&quot;. If they wanted to use one, they could have wr=
itten one themselves, rather than relying on code generation.</span><span s=
tyle=3D"color:rgb(80,0,80);font-size:12.8px"><br></span></div></blockquote>=
<div><span style=3D"color:rgb(80,0,80);font-size:12.8px"><br></span></div><=
div><span style=3D"color:rgb(80,0,80);font-size:12.8px">It would make that =
code-generating approach unnecessary.</span></div></div></blockquote><div><=
br>If you read what I linked to, you&#39;ll see that they use the code gene=
rator for a <i>lot more</i> than signals/slots. So it&#39;s not going away,=
 no matter what you do with `any`.<br><br></div><blockquote class=3D"gmail_=
quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddi=
ng-left:1ex"><div dir=3D"ltr"><div><span style=3D"color:rgb(80,0,80);font-s=
ize:12.8px">See:</span></div><div><span style=3D"color:rgb(80,0,80);font-si=
ze:12.8px"><br></span></div><div><font color=3D"#500050"><span style=3D"fon=
t-size:12.8px"><a href=3D"https://github.com/user1095108/crl" rel=3D"nofoll=
ow" target=3D"_blank">https://github.com/user1095108<wbr>/crl</a></span></f=
ont><br></div><div><span style=3D"font-size:12.8px"><br></span></div></div>=
</blockquote><div><br>... it&#39;d be nice if you explained what code is on=
 that site that is relevant to this discussion.</div><span class=3D"HOEnZb"=
><font color=3D"#888888"><br></font></span></div><span class=3D"HOEnZb"><fo=
nt color=3D"#888888">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/84ce2d13-ed47-4734-8cc0-f7e90113e65a%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/84ce=
2d13-ed47-4734-<wbr>8cc0-f7e90113e65a%40isocpp.org</a><wbr>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEYvsG%3D77jmN-mPVp7ZPrdchD-0nm=
of5OduiehDNwxn-w%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEYvsG%3D=
77jmN-mPVp7ZPrdchD-0nmof5OduiehDNwxn-w%40mail.gmail.com</a>.<br />

--94eb2c06146a4fa938054ac11a7a--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Wed, 15 Mar 2017 08:13:29 -0700
Raw View
Em quarta-feira, 15 de mar=C3=A7o de 2017, =C3=A0s 01:55:12 PDT, janezz55 .=
 escreveu:
> We can assume many things. In my opinion, Qt implements signal/slots
> through code generation to support a broader range of compiler than it
> otherwise might and because of portability concerns.

Opinions are irrelevant here. The use of MOC has nothing to do with=20
portability and everything to do with the fact that the C++ language does n=
ot=20
have support for reflection.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2678048.5ZDxK9zII1%40tjmaciei-mobl1.

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Wed, 15 Mar 2017 08:15:48 -0700
Raw View
Em ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 20:44:27 PDT, Arthur=
 O'Dwyer escreveu:
>   gnr::any_function<> f;
>   int i =3D 42;
>   f =3D [](const int& i) { };
>   f(i);
>=20
> fails an assertion at runtime. Unfortunately, I think this one is
> fundamentally unfixable and explodes the whole idea.

Indeed, that's exactly the same issue I found when replying to Edward Catmu=
r=20
(see Message-ID: <2663636.SEFX8e3ZWL@tjmaciei-mobl1>). I was thinking that =
it=20
was unfixable, but I wasn't prepared to make that claim yet.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/1976706.iW0ED2DjAJ%40tjmaciei-mobl1.

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Wed, 15 Mar 2017 16:23:40 +0100
Raw View
--f403045d9a1888da1c054ac68770
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

I beg to differ, MSVC, for example, has for years had problems catching up
to the latest standards. Not to mention the more exotic ones, some still at
c++98. My signal/slot implementation, for example, does not compile with
MSVC, but does compile with clang and gcc.

However, whether you are right or wrong, does not matter here. We should be
discussing std::any/std::invoke, not Qt or my library or any advantages
either might have.

2017-03-15 16:13 GMT+01:00 Thiago Macieira <thiago@macieira.org>:

> Em quarta-feira, 15 de mar=C3=A7o de 2017, =C3=A0s 01:55:12 PDT, janezz55=
 . escreveu:
> > We can assume many things. In my opinion, Qt implements signal/slots
> > through code generation to support a broader range of compiler than it
> > otherwise might and because of portability concerns.
>
> Opinions are irrelevant here. The use of MOC has nothing to do with
> portability and everything to do with the fact that the C++ language does
> not
> have support for reflection.
>
> --
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>    Software Architect - Intel Open Source Technology Center
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/2678048.5ZDxK9zII1%40tjmaciei-mobl1.
>

--=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/CAO9E8GEmhrgrSC8yLf7otQ9HFju26uC%3D2q2hFb8K21_JJ=
Ccyww%40mail.gmail.com.

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

<div dir=3D"ltr">I beg to differ, MSVC, for example, has for years had prob=
lems catching up to the latest standards. Not to mention the more exotic on=
es, some still at c++98. My signal/slot implementation, for example, does n=
ot compile with MSVC, but does compile with clang and gcc.<div><br></div><d=
iv>However, whether you are right or wrong, does not matter here. We should=
 be discussing std::any/std::invoke, not Qt or my library or any advantages=
 either might have.</div></div><div class=3D"gmail_extra"><br><div class=3D=
"gmail_quote">2017-03-15 16:13 GMT+01:00 Thiago Macieira <span dir=3D"ltr">=
&lt;<a href=3D"mailto:thiago@macieira.org" target=3D"_blank">thiago@macieir=
a.org</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Em quarta-feira, 15=
 de mar=C3=A7o de 2017, =C3=A0s 01:55:12 PDT, janezz55 . escreveu:<br>
&gt; We can assume many things. In my opinion, Qt implements signal/slots<b=
r>
&gt; through code generation to support a broader range of compiler than it=
<br>
&gt; otherwise might and because of portability concerns.<br>
<br>
Opinions are irrelevant here. The use of MOC has nothing to do with<br>
portability and everything to do with the fact that the C++ language does n=
ot<br>
have support for reflection.<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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/2678048.5ZDxK9zII1%40tjmaciei-mobl1" =
rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/<wbr>isocp=
p.org/d/msgid/std-<wbr>proposals/2678048.5ZDxK9zII1%<wbr>40tjmaciei-mobl1</=
a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEmhrgrSC8yLf7otQ9HFju26uC%3D2q=
2hFb8K21_JJCcyww%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEmhrgrSC=
8yLf7otQ9HFju26uC%3D2q2hFb8K21_JJCcyww%40mail.gmail.com</a>.<br />

--f403045d9a1888da1c054ac68770--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Wed, 15 Mar 2017 16:26:04 +0100
Raw View
--001a1146f2b4219a2f054ac69092
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Because both of you don't read my posts very well and Ed obviously does.
Hint: std::cref().

2017-03-15 16:15 GMT+01:00 Thiago Macieira <thiago@macieira.org>:

> Em ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 20:44:27 PDT, Arth=
ur O'Dwyer
> escreveu:
> >   gnr::any_function<> f;
> >   int i =3D 42;
> >   f =3D [](const int& i) { };
> >   f(i);
> >
> > fails an assertion at runtime. Unfortunately, I think this one is
> > fundamentally unfixable and explodes the whole idea.
>
> Indeed, that's exactly the same issue I found when replying to Edward
> Catmur
> (see Message-ID: <2663636.SEFX8e3ZWL@tjmaciei-mobl1>). I was thinking
> that it
> was unfixable, but I wasn't prepared to make that claim yet.
>
> --
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>    Software Architect - Intel Open Source Technology Center
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/1976706.iW0ED2DjAJ%40tjmaciei-mobl1.
>

--=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/CAO9E8GEE36jiQnaT%3Dq8TO6KsJCN%3DupmmVpV1K2AcZFW=
gm1aipw%40mail.gmail.com.

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

<div dir=3D"ltr">Because both of you don&#39;t read my posts very well and =
Ed obviously does. Hint: std::cref().</div><div class=3D"gmail_extra"><br><=
div class=3D"gmail_quote">2017-03-15 16:15 GMT+01:00 Thiago Macieira <span =
dir=3D"ltr">&lt;<a href=3D"mailto:thiago@macieira.org" target=3D"_blank">th=
iago@macieira.org</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Em ter=
=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 20:44:27 PDT, Arthur O&#39=
;Dwyer escreveu:<br>
&gt;=C2=A0 =C2=A0gnr::any_function&lt;&gt; f;<br>
&gt;=C2=A0 =C2=A0int i =3D 42;<br>
&gt;=C2=A0 =C2=A0f =3D [](const int&amp; i) { };<br>
&gt;=C2=A0 =C2=A0f(i);<br>
&gt;<br>
&gt; fails an assertion at runtime. Unfortunately, I think this one is<br>
&gt; fundamentally unfixable and explodes the whole idea.<br>
<br>
Indeed, that&#39;s exactly the same issue I found when replying to Edward C=
atmur<br>
(see Message-ID: &lt;2663636.SEFX8e3ZWL@tjmaciei-<wbr>mobl1&gt;). I was thi=
nking that it<br>
was unfixable, but I wasn&#39;t prepared to make that claim yet.<br>
<span class=3D""><br>
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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>
</span>To view this discussion on the web visit <a href=3D"https://groups.g=
oogle.com/a/isocpp.org/d/msgid/std-proposals/1976706.iW0ED2DjAJ%40tjmaciei-=
mobl1" rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/<wb=
r>isocpp.org/d/msgid/std-<wbr>proposals/1976706.iW0ED2DjAJ%<wbr>40tjmaciei-=
mobl1</a>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GEE36jiQnaT%3Dq8TO6KsJCN%3Dupmm=
VpV1K2AcZFWgm1aipw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEE36ji=
QnaT%3Dq8TO6KsJCN%3DupmmVpV1K2AcZFWgm1aipw%40mail.gmail.com</a>.<br />

--001a1146f2b4219a2f054ac69092--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Wed, 15 Mar 2017 08:42:14 -0700 (PDT)
Raw View
------=_Part_4399_1996395078.1489592534818
Content-Type: multipart/alternative;
 boundary="----=_Part_4400_1552281624.1489592534818"

------=_Part_4400_1552281624.1489592534818
Content-Type: text/plain; charset=UTF-8

On Wednesday, March 15, 2017 at 11:23:43 AM UTC-4, janezz55 . wrote:
>
> I beg to differ,
>

Before you get too far in the differing, I should point out that Thiago
Macieria is actually one of the developers of Qt. So I'd take his word on
it as far as what a Qt tool is intended to do.

However, whether you are right or wrong, does not matter here. We should be
> discussing std::any/std::invoke, not Qt or my library or any advantages
> either might have.
>

But it does matter.

Thus far, the justification for this feature, type-erasing function
signatures, has been decidedly lacking. The closest to a useful motivation
you've provided is with signals/slots, through your claims that such things
are too complicated when you have to provide a function signature.

If we ignore that example, then it ceases to be a motivation. So we have to
ask again: why do we need this feature? What purpose does it serve? What
problem does it solve?

--
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/47819a7d-d22a-463e-8ae8-c04368ec1286%40isocpp.org.

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

<div dir=3D"ltr">On Wednesday, March 15, 2017 at 11:23:43 AM UTC-4, janezz5=
5 . wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left:=
 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I b=
eg to differ,</div></blockquote><div><br>Before you get too far in the diff=
ering, I should point out that Thiago Macieria is actually one of the devel=
opers of Qt. So I&#39;d take his word on it as far as what a Qt tool is int=
ended to do.<br><br></div><blockquote class=3D"gmail_quote" style=3D"margin=
: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div=
 dir=3D"ltr"><div></div><div>However, whether you are right or wrong, does =
not matter here. We should be discussing std::any/std::invoke, not Qt or my=
 library or any advantages either might have.</div></div></blockquote><div>=
<br>But it does matter.<br><br>Thus far, the justification for this feature=
, type-erasing function signatures, has been decidedly lacking. The closest=
 to a useful motivation you&#39;ve provided is with signals/slots, through =
your claims that such things are too complicated when you have to provide a=
 function signature.<br><br>If we ignore that example, then it ceases to be=
 a motivation. So we have to ask again: why do we need this feature? What p=
urpose does it serve? What problem does it solve?<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/47819a7d-d22a-463e-8ae8-c04368ec1286%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/47819a7d-d22a-463e-8ae8-c04368ec1286=
%40isocpp.org</a>.<br />

------=_Part_4400_1552281624.1489592534818--

------=_Part_4399_1996395078.1489592534818--

.


Author: =?UTF-8?Q?Micha=C5=82_Dominiak?= <griwes@griwes.info>
Date: Wed, 15 Mar 2017 15:48:04 +0000
Raw View
--001a11425e446d25ce054ac6df21
Content-Type: text/plain; charset=UTF-8

We are really running in circles now.

On Wed, Mar 15, 2017 at 4:42 PM Nicol Bolas <jmckesson@gmail.com> wrote:

> On Wednesday, March 15, 2017 at 11:23:43 AM UTC-4, janezz55 . wrote:
>
> I beg to differ,
>
>
> Before you get too far in the differing, I should point out that Thiago
> Macieria is actually one of the developers of Qt. So I'd take his word on
> it as far as what a Qt tool is intended to do.
>
> However, whether you are right or wrong, does not matter here. We should
> be discussing std::any/std::invoke, not Qt or my library or any advantages
> either might have.
>
>
> But it does matter.
>
> Thus far, the justification for this feature, type-erasing function
> signatures, has been decidedly lacking. The closest to a useful motivation
> you've provided is with signals/slots, through your claims that such things
> are too complicated when you have to provide a function signature.
>
> If we ignore that example, then it ceases to be a motivation. So we have
> to ask again: why do we need this feature? What purpose does it serve? What
> problem does it solve?
>
> --
> 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/47819a7d-d22a-463e-8ae8-c04368ec1286%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/47819a7d-d22a-463e-8ae8-c04368ec1286%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/CAPCFJdTCwCX66oPMFJF2mV--kOKWMY%2BqPUj7Fdq74q3nMTcsVg%40mail.gmail.com.

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

<div dir=3D"ltr">We are really running in circles now.</div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr">On Wed, Mar 15, 2017 at 4:42 PM Nicol Bol=
as &lt;<a href=3D"mailto:jmckesson@gmail.com">jmckesson@gmail.com</a>&gt; w=
rote:<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" class=3D"gma=
il_msg">On Wednesday, March 15, 2017 at 11:23:43 AM UTC-4, janezz55 . wrote=
:<blockquote class=3D"gmail_quote gmail_msg" style=3D"margin:0;margin-left:=
0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=
=3D"gmail_msg">I beg to differ,</div></blockquote><div class=3D"gmail_msg">=
<br class=3D"gmail_msg">Before you get too far in the differing, I should p=
oint out that Thiago Macieria is actually one of the developers of Qt. So I=
&#39;d take his word on it as far as what a Qt tool is intended to do.<br c=
lass=3D"gmail_msg"><br class=3D"gmail_msg"></div></div><div dir=3D"ltr" cla=
ss=3D"gmail_msg"><blockquote class=3D"gmail_quote gmail_msg" style=3D"margi=
n:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=
=3D"ltr" class=3D"gmail_msg"><div class=3D"gmail_msg"></div><div class=3D"g=
mail_msg">However, whether you are right or wrong, does not matter here. We=
 should be discussing std::any/std::invoke, not Qt or my library or any adv=
antages either might have.</div></div></blockquote></div><div dir=3D"ltr" c=
lass=3D"gmail_msg"><div class=3D"gmail_msg"><br class=3D"gmail_msg">But it =
does matter.<br class=3D"gmail_msg"><br class=3D"gmail_msg">Thus far, the j=
ustification for this feature, type-erasing function signatures, has been d=
ecidedly lacking. The closest to a useful motivation you&#39;ve provided is=
 with signals/slots, through your claims that such things are too complicat=
ed when you have to provide a function signature.<br class=3D"gmail_msg"><b=
r class=3D"gmail_msg">If we ignore that example, then it ceases to be a mot=
ivation. So we have to ask again: why do we need this feature? What purpose=
 does it serve? What problem does it solve?<br class=3D"gmail_msg"></div></=
div>

<p class=3D"gmail_msg"></p>

-- <br class=3D"gmail_msg">
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"gmail_msg=
">
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" class=3D"gm=
ail_msg" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br cla=
ss=3D"gmail_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"gmail_msg" target=3D"_blank">std-proposals@isocpp.org</a>.<b=
r class=3D"gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/47819a7d-d22a-463e-8ae8-c04368ec1286%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" class=3D"gmail_msg=
" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-prop=
osals/47819a7d-d22a-463e-8ae8-c04368ec1286%40isocpp.org</a>.<br class=3D"gm=
ail_msg">
</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/CAPCFJdTCwCX66oPMFJF2mV--kOKWMY%2BqPU=
j7Fdq74q3nMTcsVg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAPCFJdTCwCX66o=
PMFJF2mV--kOKWMY%2BqPUj7Fdq74q3nMTcsVg%40mail.gmail.com</a>.<br />

--001a11425e446d25ce054ac6df21--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Wed, 15 Mar 2017 17:02:38 +0100
Raw View
--001a1144b3fad68af3054ac7128c
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Yes, I'll write a proposal and we will see. Fortunately the language is
rich enough to implement this without requiring new language features, so
even if I'm the only user, I'll be happy with their decision.

2017-03-15 16:48 GMT+01:00 Micha=C5=82 Dominiak <griwes@griwes.info>:

> We are really running in circles now.
>
> On Wed, Mar 15, 2017 at 4:42 PM Nicol Bolas <jmckesson@gmail.com> wrote:
>
>> On Wednesday, March 15, 2017 at 11:23:43 AM UTC-4, janezz55 . wrote:
>>
>> I beg to differ,
>>
>>
>> Before you get too far in the differing, I should point out that Thiago
>> Macieria is actually one of the developers of Qt. So I'd take his word o=
n
>> it as far as what a Qt tool is intended to do.
>>
>> However, whether you are right or wrong, does not matter here. We should
>> be discussing std::any/std::invoke, not Qt or my library or any advantag=
es
>> either might have.
>>
>>
>> But it does matter.
>>
>> Thus far, the justification for this feature, type-erasing function
>> signatures, has been decidedly lacking. The closest to a useful motivati=
on
>> you've provided is with signals/slots, through your claims that such thi=
ngs
>> are too complicated when you have to provide a function signature.
>>
>> If we ignore that example, then it ceases to be a motivation. So we have
>> to ask again: why do we need this feature? What purpose does it serve? W=
hat
>> problem does it solve?
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit https://groups.google.com/a/
>> isocpp.org/d/msgid/std-proposals/47819a7d-d22a-463e-
>> 8ae8-c04368ec1286%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/47819a7d-d=
22a-463e-8ae8-c04368ec1286%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoo=
ter>
>> .
>>
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAO9E8GF62%3DYRAdOgTPH3BNXWjGU3_CM2LsaVfKV2UUxw%=
2BsuH9A%40mail.gmail.com.

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

<div dir=3D"ltr">Yes, I&#39;ll write a proposal and we will see. Fortunatel=
y the language is rich enough to implement this without requiring new langu=
age features, so even if I&#39;m the only user, I&#39;ll be happy with thei=
r decision.</div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">=
2017-03-15 16:48 GMT+01:00 Micha=C5=82 Dominiak <span dir=3D"ltr">&lt;<a hr=
ef=3D"mailto:griwes@griwes.info" target=3D"_blank">griwes@griwes.info</a>&g=
t;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">We are really=
 running in circles now.</div><br><div class=3D"gmail_quote"><span class=3D=
""><div dir=3D"ltr">On Wed, Mar 15, 2017 at 4:42 PM Nicol Bolas &lt;<a href=
=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmail.com</a>&g=
t; wrote:<br></div></span><blockquote class=3D"gmail_quote" style=3D"margin=
:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D""><=
div dir=3D"ltr" class=3D"m_7777053808037925235gmail_msg">On Wednesday, Marc=
h 15, 2017 at 11:23:43 AM UTC-4, janezz55 . wrote:<blockquote class=3D"gmai=
l_quote m_7777053808037925235gmail_msg" style=3D"margin:0;margin-left:0.8ex=
;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" class=3D"m_7=
777053808037925235gmail_msg">I beg to differ,</div></blockquote><div class=
=3D"m_7777053808037925235gmail_msg"><br class=3D"m_7777053808037925235gmail=
_msg">Before you get too far in the differing, I should point out that Thia=
go Macieria is actually one of the developers of Qt. So I&#39;d take his wo=
rd on it as far as what a Qt tool is intended to do.<br class=3D"m_77770538=
08037925235gmail_msg"><br class=3D"m_7777053808037925235gmail_msg"></div></=
div><div dir=3D"ltr" class=3D"m_7777053808037925235gmail_msg"><blockquote c=
lass=3D"gmail_quote m_7777053808037925235gmail_msg" style=3D"margin:0;margi=
n-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr" =
class=3D"m_7777053808037925235gmail_msg"><div class=3D"m_777705380803792523=
5gmail_msg"></div><div class=3D"m_7777053808037925235gmail_msg">However, wh=
ether you are right or wrong, does not matter here. We should be discussing=
 std::any/std::invoke, not Qt or my library or any advantages either might =
have.</div></div></blockquote></div><div dir=3D"ltr" class=3D"m_77770538080=
37925235gmail_msg"><div class=3D"m_7777053808037925235gmail_msg"><br class=
=3D"m_7777053808037925235gmail_msg">But it does matter.<br class=3D"m_77770=
53808037925235gmail_msg"><br class=3D"m_7777053808037925235gmail_msg">Thus =
far, the justification for this feature, type-erasing function signatures, =
has been decidedly lacking. The closest to a useful motivation you&#39;ve p=
rovided is with signals/slots, through your claims that such things are too=
 complicated when you have to provide a function signature.<br class=3D"m_7=
777053808037925235gmail_msg"><br class=3D"m_7777053808037925235gmail_msg">I=
f we ignore that example, then it ceases to be a motivation. So we have to =
ask again: why do we need this feature? What purpose does it serve? What pr=
oblem does it solve?<br class=3D"m_7777053808037925235gmail_msg"></div></di=
v>

<p class=3D"m_7777053808037925235gmail_msg"></p>

-- <br class=3D"m_7777053808037925235gmail_msg"></span>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br class=3D"m_7777053=
808037925235gmail_msg">
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" class=3D"m_=
7777053808037925235gmail_msg" target=3D"_blank">std-proposals+unsubscribe@<=
wbr>isocpp.org</a>.<span class=3D""><br class=3D"m_7777053808037925235gmail=
_msg">
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" class=3D"m_7777053808037925235gmail_msg" target=3D"_blank">std-propos=
als@isocpp.org</a>.<br class=3D"m_7777053808037925235gmail_msg">
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/47819a7d-d22a-463e-8ae8-c04368ec1286%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" class=3D"m_7777053=
808037925235gmail_msg" target=3D"_blank">https://groups.google.com/a/<wbr>i=
socpp.org/d/msgid/std-<wbr>proposals/47819a7d-d22a-463e-<wbr>8ae8-c04368ec1=
286%40isocpp.org</a><wbr>.<br class=3D"m_7777053808037925235gmail_msg">
</span></blockquote></div>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GF62%3DYRAdOgTPH3BNXWjGU3_CM2Ls=
aVfKV2UUxw%2BsuH9A%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GF62%3D=
YRAdOgTPH3BNXWjGU3_CM2LsaVfKV2UUxw%2BsuH9A%40mail.gmail.com</a>.<br />

--001a1144b3fad68af3054ac7128c--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Wed, 15 Mar 2017 09:10:58 -0700
Raw View
Em quarta-feira, 15 de mar=C3=A7o de 2017, =C3=A0s 08:26:04 PDT, janezz55 .=
 escreveu:
> Because both of you don't read my posts very well and Ed obviously does.
> Hint: std::cref().

That puts the burden in the caller to remember the callee's signature exact=
ly.=20
I said that this leads to an API that is too difficult to use, too prone to=
=20
errors. As such, I don't think it will be accepted.

I recommend searching for an alternative so that it's less prone to errors.=
=20
But I don't think there's a solution.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2200779.koFCFZkZpI%40tjmaciei-mobl1.

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Wed, 15 Mar 2017 17:17:35 +0100
Raw View
--94eb2c06136e5ce291054ac748ee
Content-Type: text/plain; charset=UTF-8

Before you get too far in the differing, I should point out that Thiago
Macieria is actually one of the developers of Qt. So I'd take his word on
it as far as what a Qt tool is intended to do.

I know, I submitted a thread-related bug to him once. Anyway, I am a very
dissatisfied Qt user. You can do almost anything in Qt, but sometimes you
need an extraordinary amount of hacks and workarounds to make it happen. I
have a long list of unresolved bugs on their bug tracker. This is what
happens if the goals of a library are too ambitious, in my opinion. Also,
the library is too big in some cases. I couldn't afford to upload it on my
5 GB VPS, for example (i'd need their development file too, as I can't
cross compile at home). For me, the problem my proposition solves is my
signal/slot implementation. I could not afford to use Qt and I did not
trust other implementations on my VPS. The other problem my proposition
solves is the bottomless sink, that std::any is for temporary lambda
objects.

2017-03-15 16:42 GMT+01:00 Nicol Bolas <jmckesson@gmail.com>:

> On Wednesday, March 15, 2017 at 11:23:43 AM UTC-4, janezz55 . wrote:
>>
>> I beg to differ,
>>
>
> Before you get too far in the differing, I should point out that Thiago
> Macieria is actually one of the developers of Qt. So I'd take his word on
> it as far as what a Qt tool is intended to do.
>
> However, whether you are right or wrong, does not matter here. We should
>> be discussing std::any/std::invoke, not Qt or my library or any advantages
>> either might have.
>>
>
> But it does matter.
>
> Thus far, the justification for this feature, type-erasing function
> signatures, has been decidedly lacking. The closest to a useful motivation
> you've provided is with signals/slots, through your claims that such things
> are too complicated when you have to provide a function signature.
>
> If we ignore that example, then it ceases to be a motivation. So we have
> to ask again: why do we need this feature? What purpose does it serve? What
> problem does it solve?
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/47819a7d-d22a-463e-
> 8ae8-c04368ec1286%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/47819a7d-d22a-463e-8ae8-c04368ec1286%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/CAO9E8GH6orGbz7MyX9M%2BpX_WMbcbC4Mv_fu6Tw%3DASZsaa8c0dA%40mail.gmail.com.

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

<div dir=3D"ltr"><div>Before you get too far in the differing, I should poi=
nt out that Thiago Macieria is actually one of the developers of Qt. So I&#=
39;d take his word on it as far as what a Qt tool is intended to do.</div><=
div><div><br></div></div><div>I know, I submitted a thread-related bug to h=
im once. Anyway, I am a very dissatisfied Qt user. You can do almost anythi=
ng in Qt, but sometimes you need an extraordinary amount of hacks and worka=
rounds to make it happen. I have a long list of unresolved bugs on their bu=
g tracker. This is what happens if the goals of a library are too ambitious=
, in my opinion. Also, the library is too big in some cases. I couldn&#39;t=
 afford to upload it on my 5 GB VPS, for example (i&#39;d need their develo=
pment file too, as I can&#39;t cross compile at home). For me, the problem =
my proposition solves is my signal/slot implementation. I could not afford =
to use Qt and I did not trust other implementations on my VPS. The other pr=
oblem my proposition solves is the bottomless sink, that std::any is for te=
mporary lambda objects.</div></div><div class=3D"gmail_extra"><br><div clas=
s=3D"gmail_quote">2017-03-15 16:42 GMT+01:00 Nicol Bolas <span dir=3D"ltr">=
&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmckesson@gmai=
l.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:=
0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">On=
 Wednesday, March 15, 2017 at 11:23:43 AM UTC-4, janezz55 . wrote:<blockquo=
te class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"ltr">I beg to differ,</div></blo=
ckquote><div><br>Before you get too far in the differing, I should point ou=
t that Thiago Macieria is actually one of the developers of Qt. So I&#39;d =
take his word on it as far as what a Qt tool is intended to do.<br><br></di=
v><span class=3D""><blockquote class=3D"gmail_quote" style=3D"margin:0;marg=
in-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"=
><div></div><div>However, whether you are right or wrong, does not matter h=
ere. We should be discussing std::any/std::invoke, not Qt or my library or =
any advantages either might have.</div></div></blockquote></span><div><br>B=
ut it does matter.<br><br>Thus far, the justification for this feature, typ=
e-erasing function signatures, has been decidedly lacking. The closest to a=
 useful motivation you&#39;ve provided is with signals/slots, through your =
claims that such things are too complicated when you have to provide a func=
tion signature.<br><br>If we ignore that example, then it ceases to be a mo=
tivation. So we have to ask again: why do we need this feature? What purpos=
e does it serve? What problem does it solve?<br></div></div><span class=3D"=
">

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/c=
JD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/47819a7d-d22a-463e-8ae8-c04368ec1286%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/4781=
9a7d-d22a-463e-<wbr>8ae8-c04368ec1286%40isocpp.org</a><wbr>.<br>
</blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GH6orGbz7MyX9M%2BpX_WMbcbC4Mv_f=
u6Tw%3DASZsaa8c0dA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GH6orGb=
z7MyX9M%2BpX_WMbcbC4Mv_fu6Tw%3DASZsaa8c0dA%40mail.gmail.com</a>.<br />

--94eb2c06136e5ce291054ac748ee--

.


Author: "janezz55 ." <janezz55@gmail.com>
Date: Wed, 15 Mar 2017 17:36:37 +0100
Raw View
--94eb2c06136e5e2857054ac78cf1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

That puts the burden in the caller to remember the callee's signature
exactly.

That's one of the burdens of std::any, in general. Maybe this is the reason
why Qt does not have an any lookalike, just QVariant. But, obviously,
std::any made it into the standard.

2017-03-15 17:10 GMT+01:00 Thiago Macieira <thiago@macieira.org>:

> Em quarta-feira, 15 de mar=C3=A7o de 2017, =C3=A0s 08:26:04 PDT, janezz55=
 . escreveu:
> > Because both of you don't read my posts very well and Ed obviously does=
..
> > Hint: std::cref().
>
> That puts the burden in the caller to remember the callee's signature
> exactly.
> I said that this leads to an API that is too difficult to use, too prone =
to
> errors. As such, I don't think it will be accepted.
>
> I recommend searching for an alternative so that it's less prone to error=
s.
> But I don't think there's a solution.
>
> --
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>    Software Architect - Intel Open Source Technology Center
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit https://groups.google.com/a/
> isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
> To unsubscribe from this group and all its topics, 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/2200779.koFCFZkZpI%40tjmaciei-mobl1.
>

--=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/CAO9E8GG_Dx_hc%3DR%2BdvRrZQg9A8Aihiqh5_7uvXutCr_=
SWmqcNw%40mail.gmail.com.

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

<div dir=3D"ltr">That puts the burden in the caller to remember the callee&=
#39;s signature exactly.<br><div><br></div><div>That&#39;s one of the burde=
ns of std::any, in general. Maybe this is the reason why Qt does not have a=
n any lookalike, just QVariant. But, obviously, std::any made it into the s=
tandard.</div></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quot=
e">2017-03-15 17:10 GMT+01:00 Thiago Macieira <span dir=3D"ltr">&lt;<a href=
=3D"mailto:thiago@macieira.org" target=3D"_blank">thiago@macieira.org</a>&g=
t;</span>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex">Em quarta-feira, 15 de mar=C3=
=A7o de 2017, =C3=A0s 08:26:04 PDT, janezz55 . escreveu:<br>
&gt; Because both of you don&#39;t read my posts very well and Ed obviously=
 does.<br>
&gt; Hint: std::cref().<br>
<br>
That puts the burden in the caller to remember the callee&#39;s signature e=
xactly.<br>
I said that this leads to an API that is too difficult to use, too prone to=
<br>
errors. As such, I don&#39;t think it will be accepted.<br>
<br>
I recommend searching for an alternative so that it&#39;s less prone to err=
ors.<br>
But I don&#39;t think there&#39;s a solution.<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/<wbr>isocpp.org/d/topic/s=
td-<wbr>proposals/cJD8urBWN7c/<wbr>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org">std-proposals+unsubscrib=
e@<wbr>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/2200779.koFCFZkZpI%40tjmaciei-mobl1" =
rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/<wbr>isocp=
p.org/d/msgid/std-<wbr>proposals/2200779.koFCFZkZpI%<wbr>40tjmaciei-mobl1</=
a>.<br>
</font></span></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CAO9E8GG_Dx_hc%3DR%2BdvRrZQg9A8Aihiqh=
5_7uvXutCr_SWmqcNw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GG_Dx_h=
c%3DR%2BdvRrZQg9A8Aihiqh5_7uvXutCr_SWmqcNw%40mail.gmail.com</a>.<br />

--94eb2c06136e5e2857054ac78cf1--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Wed, 15 Mar 2017 12:21:58 -0700
Raw View
Em quarta-feira, 15 de mar=C3=A7o de 2017, =C3=A0s 09:36:37 PDT, janezz55 .=
 escreveu:
> That puts the burden in the caller to remember the callee's signature
> exactly.
>=20
> That's one of the burdens of std::any, in general. Maybe this is the reas=
on
> why Qt does not have an any lookalike, just QVariant. But, obviously,
> std::any made it into the standard.

QVariant does have some vtable for supporting additional operations. You ca=
n,=20
for example, iterate over the elements in a sequential container that was=
=20
added to a QVariant without knowing what that container was. You get QVaria=
nts=20
as the elements, which you then extract as you please.

If QVariant were to have an invocation operation, we'd take a list of=20
QVariants as parameters, then convert that to the actual types requested by=
=20
the application.=20

That is, in fact, exactly what queued signal delivery does, as well as RPC=
=20
calls from D-Bus, calls from JS in both QtScript and QtQml. It works=20
sufficiently well for basic types, but has a lot of limitations for user-
provided types. For example, you can't pass a derived class to a function t=
hat=20
takes the base one.

And this all depends on... you guessed, right, MOC. In specific, the invoca=
tion=20
code that MOC generates:

        case 0: _t->readyRead(); break;
        case 1: _t->channelReadyRead((*reinterpret_cast< int(*)>(_a[1])));=
=20
break;
        case 2: _t->bytesWritten((*reinterpret_cast< qint64(*)>(_a[1])));=
=20
break;

Without moc, you could probably achieve the same using libffi.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/1638870.7o520X9Zz3%40tjmaciei-mobl1.

.


Author: "Arthur O'Dwyer" <arthur.j.odwyer@gmail.com>
Date: Wed, 15 Mar 2017 13:23:23 -0700
Raw View
--94eb2c1cc15063ac46054acab7ba
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On Tue, Mar 14, 2017 at 6:27 AM, Nicol Bolas <jmckesson@gmail.com> wrote:

> On Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 . wrote:
>>
>> My thoughts exactly. I'm amazed how complex signal/slot implementations
>> of many C++ applications are, I think my proposal would simplify these.
>>
>
> How is providing a specific function call signature a significant part of
> the complexity of signal implementations in C++? Equally importantly,
> exactly how does it make sense for two signal receiving functions in the
> same slot to have different call signatures? Because that's the *only
> difference* that your `any` makes: it erases the type of the call
> signature. If you don't erase that, then you can use `std::function` or
> similar tools.
>

In fact, once we boil the puzzle down to its essence ("erase everything
about an object except its signature, and then erase its signature too
until it's time to invoke the object"), we find it's possible to implement
"in user-space" today:

class anyfunc {
    std::any object;
  public:
    template<class Sig, class F>
    void emplace(F&& f) {
        object =3D std::function<Sig>(std::forward<F>(f));
    }

    template<class Sig, class... Args>
    auto invoke(Args&&... args) const {
        const auto *pf =3D std::any_cast<const std::function<Sig>*>(&object=
);
        assert(pf !=3D nullptr); // invokee must know the exact signature
        return (*pf)(std::forward<Args>(args)...);
    }
};

void f1(int&) { puts("in f1"); }
void f2(long) { puts("in f2"); }
int main() {
    anyfunc a1, a2;
    int i =3D 42;
    a1.emplace<void(int&)>(&f1);
    a2.emplace<void(long)>(&f2);
    a1.invoke<void(int&)>(i);  // calls f1
    a2.invoke<void(long)>(i);  // calls f2
}

=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/CADvuK0JVVKfS_rpLdJs%3DrghMoou1q_YB-jcwrf1RmopfL=
2McuQ%40mail.gmail.com.

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

<div dir=3D"ltr">On Tue, Mar 14, 2017 at 6:27 AM, Nicol Bolas <span dir=3D"=
ltr">&lt;<a href=3D"mailto:jmckesson@gmail.com" target=3D"_blank">jmckesson=
@gmail.com</a>&gt;</span> wrote:<br><div class=3D"gmail_extra"><div class=
=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-l=
eft-style:solid;padding-left:1ex"><div dir=3D"ltr"><span class=3D"gmail-">O=
n Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 . wrote:<blockquote=
 class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:=
1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left=
:1ex"><div dir=3D"ltr">My thoughts exactly. I&#39;m amazed how complex sign=
al/slot implementations of many C++ applications are, I think my proposal w=
ould simplify these.</div></blockquote></span><div><br>How is providing a s=
pecific function call signature a significant part of the complexity of sig=
nal implementations in C++? Equally importantly, exactly how does it make s=
ense for two signal receiving functions in the same slot to have different =
call signatures? Because that&#39;s the <i>only difference</i> that your `a=
ny` makes: it erases the type of the call signature. If you don&#39;t erase=
 that, then you can use `std::function` or similar tools.<br></div></div></=
blockquote><div><br></div><div>In fact, once we boil the puzzle down to its=
 essence (&quot;erase everything about an object except its signature, and =
then erase its signature too until it&#39;s time to invoke the object&quot;=
), we find it&#39;s possible to implement &quot;in user-space&quot; today:<=
/div><div><br></div><div><font face=3D"monospace, monospace">class anyfunc =
{</font></div><div><font face=3D"monospace, monospace">=C2=A0 =C2=A0 std::a=
ny object;</font></div><div><font face=3D"monospace, monospace">=C2=A0 publ=
ic:</font></div><div><font face=3D"monospace, monospace">=C2=A0 =C2=A0 temp=
late&lt;class Sig, class F&gt;</font></div><div><font face=3D"monospace, mo=
nospace">=C2=A0 =C2=A0 void emplace(F&amp;&amp; f) {</font></div><div><font=
 face=3D"monospace, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 object =3D std::=
function&lt;Sig&gt;(std::forward&lt;F&gt;(f));</font></div><div><font face=
=3D"monospace, monospace">=C2=A0 =C2=A0 }</font></div><div><font face=3D"mo=
nospace, monospace"><br></font></div><div><font face=3D"monospace, monospac=
e">=C2=A0 =C2=A0 template&lt;class Sig, class... Args&gt;</font></div><div>=
<font face=3D"monospace, monospace">=C2=A0 =C2=A0 auto invoke(Args&amp;&amp=
;... args) const {</font></div><div><font face=3D"monospace, monospace">=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 const auto *pf =3D std::any_cast&lt;const std::fun=
ction&lt;Sig&gt;*&gt;(&amp;object);</font></div><div><font face=3D"monospac=
e, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 assert(pf !=3D nullptr); // invok=
ee must know the exact signature</font></div><div><font face=3D"monospace, =
monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 return (*pf)(std::forward&lt;Args&gt=
;(args)...);<br></font></div><div><font face=3D"monospace, monospace">=C2=
=A0 =C2=A0 }</font></div><div><font face=3D"monospace, monospace">};</font>=
</div><div><font face=3D"monospace, monospace"><br></font></div><div><div s=
tyle=3D"font-size:13px"><font face=3D"monospace, monospace">void f1(int&amp=
;) { puts(&quot;in f1&quot;); }<br></font></div><div style=3D"font-size:13p=
x"><font face=3D"monospace, monospace">void f2(long) { puts(&quot;in f2&quo=
t;); }</font></div><div style=3D"font-size:13px"><font face=3D"monospace, m=
onospace">int main() {</font></div><div style=3D"font-size:13px"><font face=
=3D"monospace, monospace">=C2=A0 =C2=A0=C2=A0<span style=3D"font-size:small=
">anyfunc</span>=C2=A0a1, a2;</font></div><div style=3D"font-size:13px"><fo=
nt face=3D"monospace, monospace">=C2=A0 =C2=A0 int i =3D 42;<br></font></di=
v><div style=3D"font-size:13px"><font face=3D"monospace, monospace">=C2=A0 =
=C2=A0 a1.emplace&lt;void(int&amp;)&gt;(&amp;f1);<br></font></div><div styl=
e=3D"font-size:13px"><font face=3D"monospace, monospace">=C2=A0 =C2=A0 a2.e=
mplace&lt;void(long)&gt;(&amp;f2);</font></div><div style=3D"font-size:13px=
"><font face=3D"monospace, monospace">=C2=A0 =C2=A0 a1.invoke&lt;void(int&a=
mp;)&gt;(i); =C2=A0// calls f1<br></font></div><div style=3D"font-size:13px=
"><font face=3D"monospace, monospace">=C2=A0 =C2=A0 a2.invoke&lt;void(long)=
&gt;(i); =C2=A0// calls f2</font></div><div style=3D"font-size:13px"><font =
face=3D"monospace, monospace">}</font><br></div></div><div style=3D"font-si=
ze:13px"><br></div><div style=3D"font-size:13px">=E2=80=93Arthur</div></div=
></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/CADvuK0JVVKfS_rpLdJs%3DrghMoou1q_YB-j=
cwrf1RmopfL2McuQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CADvuK0JVVKfS_r=
pLdJs%3DrghMoou1q_YB-jcwrf1RmopfL2McuQ%40mail.gmail.com</a>.<br />

--94eb2c1cc15063ac46054acab7ba--

.


Author: "'Edward Catmur' via ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Date: Wed, 15 Mar 2017 21:10:15 +0000
Raw View
--001a114c88d804c6c2054acb5f3d
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On 15 Mar 2017 01:58, "Thiago Macieira" <thiago@macieira.org> wrote:

Em ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 18:08:14 PDT, 'Edwar=
d Catmur' via
ISO
C++ Standard - Future Proposals escreveu:
> Sure:
> https://github.com/llvm-mirror/libcxx/compare/master...ecatmur:any-invoke
> That took a little over an hour, mostly due to unfamiliarity with the
> libcxx build system (I was initially going to implement it on top of
> libstdc++ but got bored waiting for the gcc git tree to download).

Yeah, that takes a while. You can help by downloading only the master
branch.

> > Specifically, how to implement the throw case when the parameters don't
> > match.
>
> Compare typeids of signatures and throw on mismatch.

Please write some tests. I don't think you've covered enough.

Specifically, I think this is a deal breaker:

> > And do they need to match exactly, or will promotion/demotion rules
apply?
> > How
> > about type conversions, like the string -> string_view case in the othe=
r
> > thread?
>
> Yes, an exact match is required. Arguments can be converted at call time,
> but the supplied signature must match exactly.

Note that it's an *exact* exact type match. That is, a const int& parameter
is
not the same as int. To operate this callable, you must ensure that the _A
template type pack matches completely exactly.

That is, these two produce different signatures:

        std::string s("Hello");
        std::invoke(myany, s);
        std::invoke(myany, std::string("Hello"));

Because of that, every time you try to pass a variable instead of a
temporary,
you'd have to explicitly make it rvalue.

Therefore, I'd say that requiring exact match is not acceptable and leads t=
o
unusable API. You need to insert some leeway.

Let us know what you come up with.


No thanks. I appreciate your comments, but I only wrote that code to
demonstrate the possibility of near zero runtime cost implementation; I'm
not interested in making minor and obscuring improvements for the sake of a
slightly safer API. If you want to give it a try I'd think that a
combination of decay_t and special casing reference_wrapper will cover the
cases you've mentioned so far, but I'm sure there are more conversions you
could come up with.


--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--
You received this message because you are subscribed to a topic in the
Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this topic, visit https://groups.google.com/a/is
ocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe.
To unsubscribe from this group and all its topics, 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/2663636.SEFX8e3ZWL%40tjmaciei-mobl1.

--=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/CAJnLdOYMkexPbVi4KN_2_peZgg%3D4%2BPrATScbwdZtQXA=
3gogdNA%40mail.gmail.com.

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

<div dir=3D"auto"><div><br><div class=3D"gmail_extra"><br><div class=3D"gma=
il_quote">On 15 Mar 2017 01:58, &quot;Thiago Macieira&quot; &lt;<a href=3D"=
mailto:thiago@macieira.org" target=3D"_blank">thiago@macieira.org</a>&gt; w=
rote:<br type=3D"attribution"><blockquote class=3D"m_-8020173274449619708qu=
ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
">Em ter=C3=A7a-feira, 14 de mar=C3=A7o de 2017, =C3=A0s 18:08:14 PDT, &#39=
;Edward Catmur&#39; via ISO<br>
C++ Standard - Future Proposals escreveu:<br>
<div class=3D"m_-8020173274449619708quoted-text">&gt; Sure:<br>
&gt; <a href=3D"https://github.com/llvm-mirror/libcxx/compare/master...ecat=
mur:any-invoke" rel=3D"noreferrer" target=3D"_blank">https://github.com/llv=
m-mirror<wbr>/libcxx/compare/master...<wbr>ecatmur:any-invoke</a><br>
&gt; That took a little over an hour, mostly due to unfamiliarity with the<=
br>
&gt; libcxx build system (I was initially going to implement it on top of<b=
r>
&gt; libstdc++ but got bored waiting for the gcc git tree to download).<br>
<br>
</div>Yeah, that takes a while. You can help by downloading only the master=
 branch.<br>
<div class=3D"m_-8020173274449619708quoted-text"><br>
&gt; &gt; Specifically, how to implement the throw case when the parameters=
 don&#39;t<br>
&gt; &gt; match.<br>
&gt;<br>
&gt; Compare typeids of signatures and throw on mismatch.<br>
<br>
</div>Please write some tests. I don&#39;t think you&#39;ve covered enough.=
<br>
<br>
Specifically, I think this is a deal breaker:<br>
<div class=3D"m_-8020173274449619708quoted-text"><br>
&gt; &gt; And do they need to match exactly, or will promotion/demotion rul=
es apply?<br>
&gt; &gt; How<br>
&gt; &gt; about type conversions, like the string -&gt; string_view case in=
 the other<br>
&gt; &gt; thread?<br>
&gt;<br>
&gt; Yes, an exact match is required. Arguments can be converted at call ti=
me,<br>
&gt; but the supplied signature must match exactly.<br>
<br>
</div>Note that it&#39;s an *exact* exact type match. That is, a const int&=
amp; parameter is<br>
not the same as int. To operate this callable, you must ensure that the _A<=
br>
template type pack matches completely exactly.<br>
<br>
That is, these two produce different signatures:<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 std::string s(&quot;Hello&quot;);<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 std::invoke(myany, s);<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 std::invoke(myany, std::string(&quot;Hello&quot=
;));<br>
<br>
Because of that, every time you try to pass a variable instead of a tempora=
ry,<br>
you&#39;d have to explicitly make it rvalue.<br>
<br>
Therefore, I&#39;d say that requiring exact match is not acceptable and lea=
ds to<br>
unusable API. You need to insert some leeway.<br>
<br>
Let us know what you come up with.<br>
<div class=3D"m_-8020173274449619708quoted-text"></div></blockquote></div><=
/div></div><div dir=3D"auto"><br></div><div dir=3D"auto">No thanks. I appre=
ciate your comments, but I only wrote that code to demonstrate the possibil=
ity of near zero runtime cost implementation; I&#39;m not interested in mak=
ing minor and obscuring improvements for the sake of a slightly safer API. =
If you want to give it a try I&#39;d think that a combination of decay_t an=
d special casing reference_wrapper will cover the cases you&#39;ve mentione=
d so far, but I&#39;m sure there are more conversions you could come up wit=
h.</div><div dir=3D"auto"><br></div><div dir=3D"auto"><div class=3D"gmail_e=
xtra"><div class=3D"gmail_quote"><blockquote class=3D"m_-802017327444961970=
8quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:=
1ex"><div class=3D"m_-8020173274449619708quoted-text"><br>
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" rel=3D"noref=
errer" target=3D"_blank">macieira.info</a> - thiago (AT) <a href=3D"http://=
kde.org" rel=3D"noreferrer" target=3D"_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
<br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"noreferr=
er" target=3D"_blank">https://groups.google.com/a/is<wbr>ocpp.org/d/topic/s=
td-proposals<wbr>/cJD8urBWN7c/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" target=3D"_blank">std-pr=
oposals+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>
</div>To view this discussion on the web visit <a href=3D"https://groups.go=
ogle.com/a/isocpp.org/d/msgid/std-proposals/2663636.SEFX8e3ZWL%40tjmaciei-m=
obl1" rel=3D"noreferrer" target=3D"_blank">https://groups.google.com/a/is<w=
br>ocpp.org/d/msgid/std-proposals<wbr>/2663636.SEFX8e3ZWL%40tjmaciei<wbr>-m=
obl1</a>.<br>
</blockquote></div><br></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/CAJnLdOYMkexPbVi4KN_2_peZgg%3D4%2BPrA=
TScbwdZtQXA3gogdNA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAJnLdOYMkexP=
bVi4KN_2_peZgg%3D4%2BPrATScbwdZtQXA3gogdNA%40mail.gmail.com</a>.<br />

--001a114c88d804c6c2054acb5f3d--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Wed, 15 Mar 2017 19:49:05 -0700
Raw View
Em quarta-feira, 15 de mar=C3=A7o de 2017, =C3=A0s 14:10:15 PDT, 'Edward Ca=
tmur' via ISO=20
C++ Standard - Future Proposals escreveu:
> No thanks. I appreciate your comments, but I only wrote that code to
> demonstrate the possibility of near zero runtime cost implementation; I'm
> not interested in making minor and obscuring improvements for the sake of=
 a
> slightly safer API. If you want to give it a try I'd think that a
> combination of decay_t and special casing reference_wrapper will cover th=
e
> cases you've mentioned so far, but I'm sure there are more conversions yo=
u
> could come up with.

Which means extra cost. That goes to show that this is way too complex for=
=20
std::any.

--=20
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center

--=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/2441761.K51R5FpPJL%40tjmaciei-mobl1.

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Fri, 17 Mar 2017 09:29:14 -0700 (PDT)
Raw View
------=_Part_279_556965849.1489768154174
Content-Type: multipart/alternative;
 boundary="----=_Part_280_1429352269.1489768154174"

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



=E5=9C=A8 2017=E5=B9=B43=E6=9C=8813=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=80 UTC=
+8=E4=B8=8B=E5=8D=889:00:59=EF=BC=8Cjanezz55 .=E5=86=99=E9=81=93=EF=BC=9A
>
> Size increase does not imply performance decrease.
>
True, but often be neglected too easily, even by TR 18015. It can actually=
=20
cost a lot unnecessary penalty in a device with limited resources.=20
Nevertheless, other checks may cost more.
=20

> As far as arithmetic operators are concerned, there's no need to implemen=
t=20
> them. There is no bottomless sink problem as regards them and std::any.=
=20
> Also their types are not as elaborate as those of the Callables. Compare=
=20
> "int" and "void(*)()", not to mention the lambda types. Delegates are a=
=20
> recurring theme in C++ ever since the 90s. Even now we have a standard=20
> signal/slot implementation proposal. An invokable std::any could make=20
> implementing callbacks easier for many people.
> =20
>
These operations are required by various iterator requirements. For=20
something like "any_iterator", they are necessary. But they are not for=20
arbitrary type-erased wrappers; simply requires "any" to be an iterator=20
sounds absurd.
I meant the case here more or less similar. Callable is a concept for many=
=20
objects, but not all. To lift it in "std" to *replace *the current=20
"std::any" is still lack of reasons, besides your consideration on=20
convenience. (Well, many things in `std` just don't care about convenience.=
)
Specific to "Callable", things may change when using different type=20
disciplines, e.g. totally dynamic typing. You can even abandon the notion=
=20
of *parameter list*, by using some extraordinary data structures instead.=
=20
But all these options will not happen in C++ with sufficient reasons.
=20

> 2017-03-13 13:22 GMT+01:00 FrankHB1989 <frank...@gmail.com <javascript:>>=
:
>
>>
>>
>> =E5=9C=A8 2017=E5=B9=B43=E6=9C=8813=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=80 =
UTC+8=E4=B8=8B=E5=8D=888:03:58=EF=BC=8Cjanezz55 .=E5=86=99=E9=81=93=EF=BC=
=9A
>>>
>>> > You can always achieve that by depressing performance of an ordinary=
=20
>>> `any` implementation to match invokable one. It would not have effect o=
n=20
>>> conformance. Only QoI is concerned:)
>>>
>>> I don't see how performance would be depressed. The moving/copying part=
=20
>>> would obviously be the same, you can do:
>>>
>>> void f(){}
>>>
>>> std::any a(f);
>>>
>>> today, and you could do it in 2001. So what remains is to add the=20
>>> invoking part, either as std::invoke or as a member function. This does=
 not=20
>>> affect the performance of the existing std::any implementation in any w=
ay.
>>>
>>> Well, that's mostly joking. But seriously, if runtime type safety is no=
t=20
>> totally thrown away, there would be a few size overhead on binary image,=
=20
>> for most typical implementations of the language.=20
>>
>>>
>>>
>>> 2017-03-13 12:50 GMT+01:00 FrankHB1989 <frank...@gmail.com>:
>>>
>>>>
>>>>
>>>> =E5=9C=A8 2017=E5=B9=B43=E6=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94=
 UTC+8=E4=B8=8A=E5=8D=885:01:50=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=
=9A
>>>>>
>>>>> On Thursday, March 2, 2017 at 3:15:03 PM UTC-5, janezz55 . wrote:
>>>>>>
>>>>>> From my perspective, the user could easily ignore, that std::any is=
=20
>>>>>> invokable.
>>>>>>
>>>>>
>>>>> Can they? Can you provide an implementation of an invokable `any`=20
>>>>> which has the exact same overhead as a non-invokable one, so long as =
you=20
>>>>> don't actually use the invoking interface?
>>>>>
>>>>> I'm not saying you're wrong, but as someone who is not an expert on=
=20
>>>>> `any` implementations, I have my doubts about this statement.
>>>>>
>>>>> You can always achieve that by depressing performance of an ordinary=
=20
>>>> `any` implementation to match invokable one. It would not have effect =
on=20
>>>> conformance. Only QoI is concerned:)
>>>>
>>>> I believe that adding a separate class, which would duplicate a lot of=
=20
>>>>>> what std::any does, would not reflect well on the STL.
>>>>>>
>>>>>
>>>>> It would duplicate some of the the internals of `any`. But being a=20
>>>>> different type woudl demonstrate a different semantic *meaning* to=20
>>>>> code.
>>>>>
>>>>> True. But `std::any` also does not have stable meaning of "any".
>>>> =20
>>>>
>>>>> Let's rename `any` to `any_object`. Now let's talk about `any_object`=
=20
>>>>> in relation to what you want, which is `any_function`.
>>>>>
>>>>> What does `any_object` represent, semantically? It represents an=20
>>>>> implicit agreement between the writer of the function taking the `any=
` and=20
>>>>> the person providing the value. Both sides must agree on what type(s)=
 that=20
>>>>> `any_object` will store, and if there is a disagreement or if one sid=
e does=20
>>>>> the wrong thing, exceptions will fly.
>>>>>
>>>>> It is even not for "any object". As I have argued before, I have=20
>>>> expect the word "any" being short for "any first-class object type" (i=
..e.=20
>>>> cv-unqualified non-array object type), but `std::any` has additional=
=20
>>>> refinement of CopyConstructible on the value type, so it is actually f=
or=20
>>>> "any copyable cv-unqualified non-array object type" instead. This soun=
ds=20
>>>> somewhat arbitrary, similar as "invokable".
>>>> =20
>>>>
>>>>> What does your conceptual `any_function` represent, semantically? It=
=20
>>>>> represents, not the type-erasure of a value, but the type-erausre of =
a=20
>>>>> function call *signature*. And therefore, if you see a function that=
=20
>>>>> takes a parameter of type `any_function`, you *immediately* know that=
=20
>>>>> this function will call the given object.
>>>>>
>>>>> And therefore, the agreement between us is different. The agreement i=
s=20
>>>>> not that I will provide one or more implicitly-defined types that you=
 will=20
>>>>> eventually `any_cast` to. The agreement is that I will provide object=
s that=20
>>>>> can be called with one or more implicitly-defined function call signa=
tures,=20
>>>>> that you will eventually call.
>>>>>
>>>>> If they represent different agreements, then they clearly should be=
=20
>>>>> different types. Even if 99% of the code implementation between them =
is=20
>>>>> identical, they still need to be separate. Because the code that take=
s an=20
>>>>> `any_function` does not *want* to perform `any_cast` on the value it=
=20
>>>>> takes. It will perform `any_call` instead. And vice-versa: code that =
takes=20
>>>>> `any_object` will not perform `any_call` on it.
>>>>>
>>>>> I wouldn't mind having this in the `<any>` header. But I don't like=
=20
>>>>> the idea of grafting such a substantially different use case into an=
=20
>>>>> existing object.
>>>>>
>>>>> Also, a pedantic note. "STL" does not mean "standard library."
>>>>>
>>>>
>>>
>

--=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/b91193eb-3404-48cf-b719-cb3c94c320d8%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=8813=E6=97=A5=E6=98=
=9F=E6=9C=9F=E4=B8=80 UTC+8=E4=B8=8B=E5=8D=889:00:59=EF=BC=8Cjanezz55 .=E5=
=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr">Size increase does not imply performance decrease.</div></blockq=
uote><div>True, but often be neglected too easily, even by TR 18015. It can=
 actually cost a lot unnecessary <span class=3D"op_dict3_font24 op_dict3_ma=
rginRight">penalty in a device with limited resources. Nevertheless, other =
checks may cost more.</span><br>=C2=A0</div><blockquote class=3D"gmail_quot=
e" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;paddin=
g-left: 1ex;"><div dir=3D"ltr">As far as arithmetic operators are concerned=
, there&#39;s no need to implement them. There is no bottomless sink proble=
m as regards them and std::any. Also their types are not as elaborate as th=
ose of the Callables. Compare &quot;int&quot; and &quot;void(*)()&quot;, no=
t to mention the lambda types. Delegates are a recurring theme in C++ ever =
since the 90s. Even now we have a standard signal/slot implementation propo=
sal. An invokable std::any could make implementing callbacks easier for man=
y people.</div><div>=C2=A0<br></div></blockquote><div>These operations are =
required by various iterator requirements. For something like &quot;any_ite=
rator&quot;, they are necessary. But they are not for arbitrary type-erased=
 wrappers; simply requires &quot;any&quot; to be an iterator sounds absurd.=
<br>I meant the case here more or less similar. Callable is a concept for m=
any objects, but not all. To lift it in &quot;std&quot; to <i>replace </i>t=
he current &quot;std::any&quot; is still lack of reasons, besides your cons=
ideration on convenience. (Well, many things in `std` just don&#39;t care a=
bout convenience.)<br>Specific to &quot;Callable&quot;, things may change w=
hen using different type disciplines, e.g. totally dynamic typing. You can =
even abandon the notion of <i>parameter list</i>, by using some extraordina=
ry data structures instead. But all these options will not happen in C++ wi=
th sufficient reasons.<br>=C2=A0<br></div><blockquote class=3D"gmail_quote"=
 style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-=
left: 1ex;"><div><div class=3D"gmail_quote">2017-03-13 13:22 GMT+01:00 Fran=
kHB1989 <span dir=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gdf=
-obfuscated-mailto=3D"duoI-hBaDQAJ" rel=3D"nofollow" onmousedown=3D"this.hr=
ef=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39;javasc=
ript:&#39;;return true;">frank...@gmail.com</a>&gt;</span>:<br><blockquote =
class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid=
;padding-left:1ex"><div dir=3D"ltr"><span><br><br>=E5=9C=A8 2017=E5=B9=B43=
=E6=9C=8813=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=80 UTC+8=E4=B8=8B=E5=8D=888:03=
:58=EF=BC=8Cjanezz55 .=E5=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail=
_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><div dir=3D"ltr"><div>&gt; You can always achieve that by dep=
ressing performance of an ordinary `any` implementation to match invokable =
one. It would not have effect on conformance. Only QoI is concerned:)</div>=
<div><br></div><div>I don&#39;t see how performance would be depressed. The=
 moving/copying part would obviously be the same, you can do:</div><div><br=
></div><div>void f(){}</div><div><br></div><div>std::any a(f);</div><div><b=
r></div><div>today, and you could do it in 2001. So what remains is to add =
the invoking part, either as std::invoke or as a member function. This does=
 not affect the performance of the existing std::any implementation in any =
way.</div><div><br></div></div></blockquote></span><div>Well, that&#39;s mo=
stly joking. But seriously, if runtime type safety is not totally thrown aw=
ay, there would be a few size overhead on binary image, for most typical im=
plementations of the language. <br></div><span><blockquote class=3D"gmail_q=
uote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddin=
g-left:1ex"><div dir=3D"ltr"><div></div><div><br></div></div><div><br><div =
class=3D"gmail_quote">2017-03-13 12:50 GMT+01:00 FrankHB1989 <span dir=3D"l=
tr">&lt;<a rel=3D"nofollow">frank...@gmail.com</a>&gt;</span>:<br><blockquo=
te class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc so=
lid;padding-left:1ex"><div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=
=9C=883=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 UTC+8=E4=B8=8A=E5=8D=885:01:50=
=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_q=
uote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddin=
g-left:1ex"><div dir=3D"ltr">On Thursday, March 2, 2017 at 3:15:03 PM UTC-5=
, janezz55 . wrote:<blockquote class=3D"gmail_quote" style=3D"margin:0;marg=
in-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"=
>From my perspective, the user could easily ignore, that std::any is invoka=
ble.</div></blockquote><div><br>Can they? Can you provide an implementation=
 of an invokable `any` which has the exact same overhead as a non-invokable=
 one, so long as you don&#39;t actually use the invoking interface?<br><br>=
I&#39;m not saying you&#39;re wrong, but as someone who is not an expert on=
 `any` implementations, I have my doubts about this statement.<br><br></div=
></div></blockquote><div>You can always achieve that by depressing performa=
nce of an ordinary `any` implementation to match invokable one. It would no=
t have effect on conformance. Only QoI is concerned:)<br><br></div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1=
px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div></div><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><div dir=3D"ltr">I believe that adding a separate =
class, which would duplicate a lot of what std::any does, would not reflect=
 well on the STL.</div></blockquote><div><br>It would duplicate some of the=
 the internals of `any`. But being a different type woudl demonstrate a dif=
ferent semantic <i>meaning</i> to code.<br><br></div></div></blockquote><di=
v>True. But `std::any` also does not have stable meaning of &quot;any&quot;=
..<br>=C2=A0<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0;ma=
rgin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r"><div>Let&#39;s rename `any` to `any_object`. Now let&#39;s talk about `a=
ny_object` in relation to what you want, which is `any_function`.<br><br>Wh=
at does `any_object` represent, semantically? It represents an implicit agr=
eement between the writer of the function taking the `any` and the person p=
roviding the value. Both sides must agree on what type(s) that `any_object`=
 will store, and if there is a disagreement or if one side does the wrong t=
hing, exceptions will fly.<br><br></div></div></blockquote><div>It is even =
not for &quot;any object&quot;. As I have argued before, I have expect=20
the word &quot;any&quot; being short for &quot;any first-class object type&=
quot; (i.e.=20
cv-unqualified non-array object type), but `std::any` has additional=20
refinement of CopyConstructible on the value type, so it is actually for
 &quot;any copyable cv-unqualified non-array object type&quot; instead. Thi=
s sounds somewhat arbitrary,=20
similar as &quot;invokable&quot;.<br>=C2=A0<br></div><blockquote class=3D"g=
mail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;=
padding-left:1ex"><div dir=3D"ltr"><div>What does your conceptual `any_func=
tion` represent, semantically? It represents, not the type-erasure of a val=
ue, but the type-erausre of a function call <i>signature</i>. And therefore=
, if you see a function that takes a parameter of type `any_function`, you =
<i>immediately</i> know that this function will call the given object.<br><=
br>And therefore, the agreement between us is different. The agreement is n=
ot that I will provide one or more implicitly-defined types that you will e=
ventually `any_cast` to. The agreement is that I will provide objects that =
can be called with one or more implicitly-defined function call signatures,=
 that you will eventually call.<br><br>If they represent different agreemen=
ts, then they clearly should be different types. Even if 99% of the code im=
plementation between them is identical, they still need to be separate. Bec=
ause the code that takes an `any_function` does not <i>want</i> to perform =
`any_cast` on the value it takes. It will perform `any_call` instead. And v=
ice-versa: code that takes `any_object` will not perform `any_call` on it.<=
br><br>I wouldn&#39;t mind having this in the `&lt;any&gt;` header. But I d=
on&#39;t like the idea of grafting such a substantially different use case =
into an existing object.<br><br>Also, a pedantic note. &quot;STL&quot; does=
 not mean &quot;standard library.&quot;<br></div></div></blockquote></div><=
/blockquote></div><br></div>
</blockquote></span></div></blockquote></div><br></div>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/b91193eb-3404-48cf-b719-cb3c94c320d8%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/b91193eb-3404-48cf-b719-cb3c94c320d8=
%40isocpp.org</a>.<br />

------=_Part_280_1429352269.1489768154174--

------=_Part_279_556965849.1489768154174--

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Fri, 17 Mar 2017 09:55:34 -0700 (PDT)
Raw View
------=_Part_276_53116712.1489769734159
Content-Type: multipart/alternative;
 boundary="----=_Part_277_380496458.1489769734160"

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



=E5=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C UTC=
+8=E4=B8=8A=E5=8D=881:50:19=EF=BC=8CRichard Smith=E5=86=99=E9=81=93=EF=BC=
=9A
>
> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com <javascript:>>=
=20
> wrote:
>
>> because the number and type of arguments is fixed that way, while=20
>> std::any can handle any number of arguments of any type, that's why it's=
=20
>> called std::any. Say:
>>
>> slots["selected"] =3D [](int){};
>> slots["selected"](1);
>>
>> would also work.
>>
>
> What about
>
> slots["what_is_my_arity"] =3D [](auto...){};
>
> ? If that's supposed to work, how? (Even if you had a separate=20
> any_function type for this idea, it still seems fundamentally unable to=
=20
> handle function templates or overload sets, and it gives you an object wi=
th=20
> a non-type-safe operator().)
>
> For cases where some parameters in the slot are simply unused, it can be=
=20
resolved without type erasure.

For instance,=20
slots["selected"] =3D [](int){};
slots["selected"](1);

and

slots["selected"] =3D []{};
slots["selected"](1);

should have no differences on observable behavior, when `int` is already in=
=20
the signature. So sometimes it is reasonable to resolve automatically.

(BTW, in theory, this should be essentially an instance of eta-equivalence=
=20
<https://wiki.haskell.org/Eta_conversion> which is rarely realized by=20
ordinary C++ users.)

Actually I have my C++11-compliant magic=20
<https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c10=
63389e/YBase/include/ystdex/functional.hpp?at=3Dmaster&fileviewer=3Dfile-vi=
ew-default#functional.hpp-1175>=20
to handle theses cases and use it for my signal-slot library API=20
<https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c10=
63389e/YFramework/include/YSLib/Core/YEvent.hpp?at=3Dmaster&fileviewer=3Dfi=
le-view-default#YEvent.hpp-141>,=20
which resolve such cases *during translation*.

=20

> Fundamentally I completely agree with other commenters: operator() is=20
> *not* special. This is just a special case of a general desire: to lift a=
=20
> concept into a concrete type that type-erases the implementation of the=
=20
> concept. That sure is a useful idea, but this is not the right way to get=
=20
> there.
>
> 2017-03-13 15:13 GMT+01:00 Ville Voutilainen <ville.vo...@gmail.com=20
>> <javascript:>>:
>>
>>> On 13 March 2017 at 16:03, janezz55 . <jane...@gmail.com <javascript:>>=
=20
>>> wrote:
>>> > consider:
>>> >
>>> > std::map<std::string, std::any> slots;
>>> >
>>> > slots["onClick"] =3D [](){};
>>> >
>>> > slots["onClick"]();
>>> >
>>> > This would work with my proposed augmentation and it is possible with=
=20
>>> my
>>> > example implementation. Most people don't need much beyond that and i=
t=20
>>> is
>>> > very concise.
>>>
>>> And you don't write that as
>>> std::map<std::string, std::function<void()>> slots;
>>> exactly because...?
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the=
=20
>>> Google Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this topic, visit=20
>>> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7=
c/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to=20
>>> std-proposal...@isocpp.org <javascript:>.
>>> To post to this group, send email to std-pr...@isocpp.org <javascript:>=
..
>>> To view this discussion on the web visit=20
>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAFk2RUZGa=
H%2BKRrRtA-sdNqYVyo64%2B6OhCSay5JsLTCyYiHS9gQ%40mail.gmail.com
>>> .
>>>
>>
>> --=20
>> You received this message because you are subscribed to the Google Group=
s=20
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n=20
>> email to std-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit=20
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPOR=
Qr8r31NxBtx85TF7_g%3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com=20
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPO=
RQr8r31NxBtx85TF7_g%3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com?utm_medium=
=3Demail&utm_source=3Dfooter>
>> .
>>
>
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/77481c87-539a-43a4-bb3b-1a6b49e8f497%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=
=9F=E6=9C=9F=E4=BA=8C UTC+8=E4=B8=8A=E5=8D=881:50:19=EF=BC=8CRichard Smith=
=E5=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margi=
n: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><di=
v dir=3D"ltr"><div><div class=3D"gmail_quote">On 13 March 2017 at 04:18, ja=
nezz55 . <span dir=3D"ltr">&lt;<a href=3D"javascript:" target=3D"_blank" gd=
f-obfuscated-mailto=3D"RjSv49ppDQAJ" rel=3D"nofollow" onmousedown=3D"this.h=
ref=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39;javas=
cript:&#39;;return true;">jane...@gmail.com</a>&gt;</span> wrote:<br><block=
quote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc=
 solid;padding-left:1ex"><div dir=3D"ltr">because the number and type of ar=
guments is fixed that way, while std::any can handle any number of argument=
s of any type, that&#39;s why it&#39;s called std::any. Say:<div><br></div>=
<div>slots[&quot;selected&quot;] =3D [](int){};</div><div>slots[&quot;selec=
ted&quot;](1);</div><div><br></div><div>would also work.</div></div></block=
quote><div><br></div><div>What about</div><div><br></div><div>slots[&quot;w=
hat_is_my_arity&quot;] =3D [](auto...){};</div><div><br></div><div>? If tha=
t&#39;s supposed to work, how? (Even if you had a separate any_function typ=
e for this idea, it still seems fundamentally unable to handle function tem=
plates or overload sets, and it gives you an object with a non-type-safe op=
erator().)</div><div><br></div></div></div></div></blockquote><div>For case=
s where some parameters in the slot are simply unused, it can be resolved w=
ithout type erasure.<br><div><br>For instance, <br></div><div style=3D"back=
ground-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-=
style: solid; border-width: 1px; overflow-wrap: break-word;" class=3D"prett=
yprint"><code class=3D"prettyprint"><div class=3D"subprettyprint"><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify">slots</span><span style=3D=
"color: #660;" class=3D"styled-by-prettify">[</span><span style=3D"color: #=
080;" class=3D"styled-by-prettify">&quot;selected&quot;</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">=3D</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: #008;" class=3D"styled-by-pr=
ettify">int</span><span style=3D"color: #660;" class=3D"styled-by-prettify"=
>){};</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>s=
lots</span><span style=3D"color: #660;" class=3D"styled-by-prettify">[</spa=
n><span style=3D"color: #080;" class=3D"styled-by-prettify">&quot;selected&=
quot;</span><span style=3D"color: #660;" class=3D"styled-by-prettify">](</s=
pan><span style=3D"color: #066;" class=3D"styled-by-prettify">1</span><span=
 style=3D"color: #660;" class=3D"styled-by-prettify">);</span></div></code>=
</div><div><br></div>and<br><br><div style=3D"background-color: rgb(250, 25=
0, 250); border-color: rgb(187, 187, 187); border-style: solid; border-widt=
h: 1px; overflow-wrap: break-word;" class=3D"prettyprint"><code class=3D"pr=
ettyprint"><div class=3D"subprettyprint"><span style=3D"color: #000;" class=
=3D"styled-by-prettify">slots</span><span style=3D"color: #660;" class=3D"s=
tyled-by-prettify">[</span><span style=3D"color: #080;" class=3D"styled-by-=
prettify">&quot;selected&quot;</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=
">=3D</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify">[]{};</span><s=
pan style=3D"color: #000;" class=3D"styled-by-prettify"><br>slots</span><sp=
an style=3D"color: #660;" class=3D"styled-by-prettify">[</span><span style=
=3D"color: #080;" class=3D"styled-by-prettify">&quot;selected&quot;</span><=
span style=3D"color: #660;" class=3D"styled-by-prettify">](</span><span sty=
le=3D"color: #066;" class=3D"styled-by-prettify">1</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">);</span></div></code></div><div><b=
r></div>should have no differences on observable behavior, when `int` is al=
ready in the signature. So sometimes it is reasonable to resolve automatica=
lly.<br><br>(BTW, in theory, this should be essentially an instance of <a h=
ref=3D"https://wiki.haskell.org/Eta_conversion">eta-equivalence</a> which i=
s rarely realized by ordinary C++ users.)<br><br>Actually I have <a href=3D=
"https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c10=
63389e/YBase/include/ystdex/functional.hpp?at=3Dmaster&amp;fileviewer=3Dfil=
e-view-default#functional.hpp-1175">my C++11-compliant magic</a> to handle =
theses cases and use it for <a href=3D"https://bitbucket.org/FrankHB/yslib/=
src/d85d1c6a0da6b93f3459aba14002144c1063389e/YFramework/include/YSLib/Core/=
YEvent.hpp?at=3Dmaster&amp;fileviewer=3Dfile-view-default#YEvent.hpp-141">m=
y signal-slot library API</a>, which resolve such cases <i>during translati=
on</i>.<br><br>=C2=A0<br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"=
><div dir=3D"ltr"><div><div class=3D"gmail_quote"><div></div><div>Fundament=
ally I completely agree with other commenters: operator() is *not* special.=
 This is just a special case of a general desire: to lift a concept into a =
concrete type that type-erases the implementation of the concept. That sure=
 is a useful idea, but this is not the right way to get there.</div><div><b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border=
-left:1px #ccc solid;padding-left:1ex"><div><div class=3D"gmail_quote"><spa=
n>2017-03-13 15:13 GMT+01:00 Ville Voutilainen <span dir=3D"ltr">&lt;<a hre=
f=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"RjSv49ppDQAJ" =
rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return tr=
ue;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">ville.vo...=
@gmail.com</a>&gt;</span>:<br></span><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><=
span>On 13 March 2017 at 16:03, janezz55 . &lt;<a href=3D"javascript:" targ=
et=3D"_blank" gdf-obfuscated-mailto=3D"RjSv49ppDQAJ" rel=3D"nofollow" onmou=
sedown=3D"this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.h=
ref=3D&#39;javascript:&#39;;return true;">jane...@gmail.com</a>&gt; wrote:<=
br>
&gt; consider:<br>
&gt;<br>
&gt; std::map&lt;std::string, std::any&gt; slots;<br>
&gt;<br>
&gt; slots[&quot;onClick&quot;] =3D [](){};<br>
&gt;<br>
&gt; slots[&quot;onClick&quot;]();<br>
&gt;<br>
&gt; This would work with my proposed augmentation and it is possible with =
my<br>
&gt; example implementation. Most people don&#39;t need much beyond that an=
d it is<br>
&gt; very concise.<br>
<br>
</span>And you don&#39;t write that as<br>
std::map&lt;std::string, std::function&lt;void()&gt;&gt; slots;<br>
exactly because...?<br>
</span><span><font color=3D"#888888"><br>
--<br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe" rel=3D"nofollow=
" target=3D"_blank" onmousedown=3D"this.href=3D&#39;https://groups.google.c=
om/a/isocpp.org/d/topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return t=
rue;" onclick=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/=
topic/std-proposals/cJD8urBWN7c/unsubscribe&#39;;return true;">https://grou=
ps.google.com/a/<wbr>isocpp.org/d/topic/std-<wbr>proposals/cJD8urBWN7c/<wbr=
>unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"RjSv49ppDQAJ" r=
el=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&#39;;return tru=
e;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true;">std-proposal=
....@<wbr>isocpp.org</a>.<span><br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"RjSv49ppDQAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@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/CAFk2RUZGaH%2BKRrRtA-sdNqYVyo64%2B6Oh=
CSay5JsLTCyYiHS9gQ%40mail.gmail.com" rel=3D"nofollow" target=3D"_blank" onm=
ousedown=3D"this.href=3D&#39;https://groups.google.com/a/isocpp.org/d/msgid=
/std-proposals/CAFk2RUZGaH%2BKRrRtA-sdNqYVyo64%2B6OhCSay5JsLTCyYiHS9gQ%40ma=
il.gmail.com&#39;;return true;" onclick=3D"this.href=3D&#39;https://groups.=
google.com/a/isocpp.org/d/msgid/std-proposals/CAFk2RUZGaH%2BKRrRtA-sdNqYVyo=
64%2B6OhCSay5JsLTCyYiHS9gQ%40mail.gmail.com&#39;;return true;">https://grou=
ps.google.com/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/CAFk2RUZGaH%<wbr=
>2BKRrRtA-sdNqYVyo64%<wbr>2B6OhCSay5JsLTCyYiHS9gQ%<wbr>40mail.gmail.com</a>=
..<br>
</span></font></span></blockquote></div><br></div><span>

<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"javascript:" target=3D"_blank" gdf-obfuscated-mailto=3D"=
RjSv49ppDQAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;javascript:&=
#39;;return true;" onclick=3D"this.href=3D&#39;javascript:&#39;;return true=
;">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" target=3D"_bla=
nk" gdf-obfuscated-mailto=3D"RjSv49ppDQAJ" rel=3D"nofollow" onmousedown=3D"=
this.href=3D&#39;javascript:&#39;;return true;" onclick=3D"this.href=3D&#39=
;javascript:&#39;;return true;">std-pr...@isocpp.org</a>.<br></span>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPORQr8r31NxBtx85TF7_g%3DCLJ%2=
BHv95oxqTVvDdVP6-Q%40mail.gmail.com?utm_medium=3Demail&amp;utm_source=3Dfoo=
ter" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPORQr8r31=
NxBtx85TF7_g%3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com?utm_medium\x3demail=
\x26utm_source\x3dfooter&#39;;return true;" onclick=3D"this.href=3D&#39;htt=
ps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAO9E8GEPORQr8r31=
NxBtx85TF7_g%3DCLJ%2BHv95oxqTVvDdVP6-Q%40mail.gmail.com?utm_medium\x3demail=
\x26utm_source\x3dfooter&#39;;return true;">https://groups.google.com/a/<wb=
r>isocpp.org/d/msgid/std-<wbr>proposals/<wbr>CAO9E8GEPORQr8r31NxBtx85TF7_g%=
<wbr>3DCLJ%2BHv95oxqTVvDdVP6-Q%<wbr>40mail.gmail.com</a>.<br>
</blockquote></div><br></div></div>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/77481c87-539a-43a4-bb3b-1a6b49e8f497%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/77481c87-539a-43a4-bb3b-1a6b49e8f497=
%40isocpp.org</a>.<br />

------=_Part_277_380496458.1489769734160--

------=_Part_276_53116712.1489769734159--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Fri, 17 Mar 2017 10:26:14 -0700 (PDT)
Raw View
------=_Part_321_1159436712.1489771574439
Content-Type: multipart/alternative;
 boundary="----=_Part_322_1150972027.1489771574440"

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

On Friday, March 17, 2017 at 12:55:34 PM UTC-4, FrankHB1989 wrote:
>
> =E5=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C U=
TC+8=E4=B8=8A=E5=8D=881:50:19=EF=BC=8CRichard Smith=E5=86=99=E9=81=93=EF=BC=
=9A
>>
>> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com> wrote:
>>
>>> because the number and type of arguments is fixed that way, while=20
>>> std::any can handle any number of arguments of any type, that's why it'=
s=20
>>> called std::any. Say:
>>>
>>> slots["selected"] =3D [](int){};
>>> slots["selected"](1);
>>>
>>> would also work.
>>>
>>
>> What about
>>
>> slots["what_is_my_arity"] =3D [](auto...){};
>>
>> ? If that's supposed to work, how? (Even if you had a separate=20
>> any_function type for this idea, it still seems fundamentally unable to=
=20
>> handle function templates or overload sets, and it gives you an object w=
ith=20
>> a non-type-safe operator().)
>>
>> For cases where some parameters in the slot are simply unused, it can be=
=20
> resolved without type erasure.
>
> For instance,=20
> slots["selected"] =3D [](int){};
> slots["selected"](1);
>
> and
>
> slots["selected"] =3D []{};
> slots["selected"](1);
>
> should have no differences on observable behavior, when `int` is already=
=20
> in the signature. So sometimes it is reasonable to resolve automatically.
>
> (BTW, in theory, this should be essentially an instance of eta-equivalenc=
e=20
> <https://wiki.haskell.org/Eta_conversion> which is rarely realized by=20
> ordinary C++ users.)
>
> Actually I have my C++11-compliant magic=20
> <https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c=
1063389e/YBase/include/ystdex/functional.hpp?at=3Dmaster&fileviewer=3Dfile-=
view-default#functional.hpp-1175>=20
> to handle theses cases and use it for my signal-slot library API=20
> <https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c=
1063389e/YFramework/include/YSLib/Core/YEvent.hpp?at=3Dmaster&fileviewer=3D=
file-view-default#YEvent.hpp-141>,=20
> which resolve such cases *during translation*.
>

I admit that I haven't looked too deeply at your library, but a quick skim=
=20
over it suggests that it doesn't actually erase the function signature.=20
Your `GEvent` type takes a signature as a template parameter. And signature=
=20
erasure is precisely what is being discussed here. Again, I only quickly=20
skimmed your code, so it could be that you're erasing the signature=20
somewhere else.

--=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/84f281cd-4ec3-407e-824e-b71e7e89c170%40isocpp.or=
g.

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

<div dir=3D"ltr">On Friday, March 17, 2017 at 12:55:34 PM UTC-4, FrankHB198=
9 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">=E5=
=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C UTC+8=
=E4=B8=8A=E5=8D=881:50:19=EF=BC=8CRichard Smith=E5=86=99=E9=81=93=EF=BC=9A<=
blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border=
-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><div class=3D"=
gmail_quote">On 13 March 2017 at 04:18, janezz55 . <span dir=3D"ltr">&lt;<a=
 rel=3D"nofollow">jane...@gmail.com</a>&gt;</span> wrote:<br><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><div dir=3D"ltr">because the number and type of arguments =
is fixed that way, while std::any can handle any number of arguments of any=
 type, that&#39;s why it&#39;s called std::any. Say:<div><br></div><div>slo=
ts[&quot;selected&quot;] =3D [](int){};</div><div>slots[&quot;selected&quot=
;](1);</div><div><br></div><div>would also work.</div></div></blockquote><d=
iv><br></div><div>What about</div><div><br></div><div>slots[&quot;what_is_m=
y_arity&quot;] =3D [](auto...){};</div><div><br></div><div>? If that&#39;s =
supposed to work, how? (Even if you had a separate any_function type for th=
is idea, it still seems fundamentally unable to handle function templates o=
r overload sets, and it gives you an object with a non-type-safe operator()=
..)</div><div><br></div></div></div></div></blockquote><div>For cases where =
some parameters in the slot are simply unused, it can be resolved without t=
ype erasure.<br><div><br>For instance, <br></div><div style=3D"background-c=
olor:rgb(250,250,250);border-color:rgb(187,187,187);border-style:solid;bord=
er-width:1px"><code><div><span style=3D"color:#000">slots</span><span style=
=3D"color:#660">[</span><span style=3D"color:#080">&quot;selected&quot;</sp=
an><span style=3D"color:#660">]</span><span style=3D"color:#000"> </span><s=
pan style=3D"color:#660">=3D</span><span style=3D"color:#000"> </span><span=
 style=3D"color:#660">[](</span><span style=3D"color:#008">int</span><span =
style=3D"color:#660">){};</span><span style=3D"color:#000"><br>slots</span>=
<span style=3D"color:#660">[</span><span style=3D"color:#080">&quot;selecte=
d&quot;</span><span style=3D"color:#660">](</span><span style=3D"color:#066=
">1</span><span style=3D"color:#660">);</span></div></code></div><div><br><=
/div>and<br><br><div style=3D"background-color:rgb(250,250,250);border-colo=
r:rgb(187,187,187);border-style:solid;border-width:1px"><code><div><span st=
yle=3D"color:#000">slots</span><span style=3D"color:#660">[</span><span sty=
le=3D"color:#080">&quot;selected&quot;</span><span style=3D"color:#660">]</=
span><span style=3D"color:#000"> </span><span style=3D"color:#660">=3D</spa=
n><span style=3D"color:#000"> </span><span style=3D"color:#660">[]{};</span=
><span style=3D"color:#000"><br>slots</span><span style=3D"color:#660">[</s=
pan><span style=3D"color:#080">&quot;selected&quot;</span><span style=3D"co=
lor:#660">](</span><span style=3D"color:#066">1</span><span style=3D"color:=
#660">);</span></div></code></div><div><br></div>should have no differences=
 on observable behavior, when `int` is already in the signature. So sometim=
es it is reasonable to resolve automatically.<br><br>(BTW, in theory, this =
should be essentially an instance of <a href=3D"https://wiki.haskell.org/Et=
a_conversion" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.href=
=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fwiki.haskell.org%2FEt=
a_conversion\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNE_EzPlSO5yajk7EcCzn8Zt=
ZXk_kQ&#39;;return true;" onclick=3D"this.href=3D&#39;https://www.google.co=
m/url?q\x3dhttps%3A%2F%2Fwiki.haskell.org%2FEta_conversion\x26sa\x3dD\x26sn=
tz\x3d1\x26usg\x3dAFQjCNE_EzPlSO5yajk7EcCzn8ZtZXk_kQ&#39;;return true;">eta=
-equivalence</a> which is rarely realized by ordinary C++ users.)<br><br>Ac=
tually I have <a href=3D"https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0d=
a6b93f3459aba14002144c1063389e/YBase/include/ystdex/functional.hpp?at=3Dmas=
ter&amp;fileviewer=3Dfile-view-default#functional.hpp-1175" target=3D"_blan=
k" rel=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://www.google.com/=
url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6=
b93f3459aba14002144c1063389e%2FYBase%2Finclude%2Fystdex%2Ffunctional.hpp%3F=
at%3Dmaster%26fileviewer%3Dfile-view-default%23functional.hpp-1175\x26sa\x3=
dD\x26sntz\x3d1\x26usg\x3dAFQjCNELxPr_azagNucSDDMv_6dO6lRgSQ&#39;;return tr=
ue;" onclick=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2=
F%2Fbitbucket.org%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144=
c1063389e%2FYBase%2Finclude%2Fystdex%2Ffunctional.hpp%3Fat%3Dmaster%26filev=
iewer%3Dfile-view-default%23functional.hpp-1175\x26sa\x3dD\x26sntz\x3d1\x26=
usg\x3dAFQjCNELxPr_azagNucSDDMv_6dO6lRgSQ&#39;;return true;">my C++11-compl=
iant magic</a> to handle theses cases and use it for <a href=3D"https://bit=
bucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c1063389e/YFram=
ework/include/YSLib/Core/YEvent.hpp?at=3Dmaster&amp;fileviewer=3Dfile-view-=
default#YEvent.hpp-141" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"t=
his.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fbitbucket.org=
%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144c1063389e%2FYFram=
ework%2Finclude%2FYSLib%2FCore%2FYEvent.hpp%3Fat%3Dmaster%26fileviewer%3Dfi=
le-view-default%23YEvent.hpp-141\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNF9=
9xg8I78ZCRLAyG5IriPmnlzJcA&#39;;return true;" onclick=3D"this.href=3D&#39;h=
ttps://www.google.com/url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FFrankHB%2Fysli=
b%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144c1063389e%2FYFramework%2Finclude%2=
FYSLib%2FCore%2FYEvent.hpp%3Fat%3Dmaster%26fileviewer%3Dfile-view-default%2=
3YEvent.hpp-141\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNF99xg8I78ZCRLAyG5Ir=
iPmnlzJcA&#39;;return true;">my signal-slot library API</a>, which resolve =
such cases <i>during translation</i>.<br></div></div></blockquote><div><br>=
I admit that I haven&#39;t looked too deeply at your library, but a quick s=
kim over it suggests that it doesn&#39;t actually erase the function signat=
ure. Your `GEvent` type takes a signature as a template parameter. And sign=
ature erasure is precisely what is being discussed here. Again, I only quic=
kly skimmed your code, so it could be that you&#39;re erasing the signature=
 somewhere else.<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/84f281cd-4ec3-407e-824e-b71e7e89c170%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/84f281cd-4ec3-407e-824e-b71e7e89c170=
%40isocpp.org</a>.<br />

------=_Part_322_1150972027.1489771574440--

------=_Part_321_1159436712.1489771574439--

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Fri, 17 Mar 2017 19:29:56 -0700 (PDT)
Raw View
------=_Part_346_1570080555.1489804196592
Content-Type: multipart/alternative;
 boundary="----=_Part_347_484491744.1489804196592"

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



=E5=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C UTC=
+8=E4=B8=8B=E5=8D=889:27:49=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A
>
> On Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 . wrote:
>>
>> My thoughts exactly. I'm amazed how complex signal/slot implementations=
=20
>> of many C++ applications are, I think my proposal would simplify these.
>>
>
> How is providing a specific function call signature a significant part of=
=20
> the complexity of signal implementations in C++? Equally importantly,=20
> exactly how does it make sense for two signal receiving functions in the=
=20
> same slot to have different call signatures? Because that's the *only=20
> difference* that your `any` makes: it erases the type of the call=20
> signature. If you don't erase that, then you can use `std::function` or=
=20
> similar tools.
>
> To me, the main complexity of C++ signal/slot implementations comes from=
=20
> the fact that C++ has no effective way to remove registered signal handle=
rs=20
> without using some sort of handle interface. This is due to the fact that=
=20
> most functors are not equality comparable, and indeed equality=20
> comparability doesn't make sense for C++ functors.
>
This can be worked around by providing additional wrapping mechanism to=20
generate actual implementations of operator=3D=3D automatically like this=
=20
<https://github.com/FrankHB/YSLib/blob/master/YFramework/include/YSLib/Core=
/YEvent.hpp#L164>.=20
Be careful to the semantic gaps ("sense"), but it's not too hard if you=20
have learned that there are multiple equivalence relationships involved=20
everyday in general (... and C++ is not good at expressing the differences=
=20
uniformly... like eq?/eqv?/equal?... divergence in Scheme). And the basic=
=20
meaning of "remove" interface can be simple: to remove the slots equivalent=
=20
to the key specified by the given argument.
The real awful thing is in implementation details. Notably, the underlying=
=20
containers are not friendly to the abstraction of "equivalence". Sequence=
=20
containers expect operator=3D=3D. However, if you are using associative=20
containers (like my current implementation and boost.signals2 do by=20
default), the work on operator=3D=3D is suddenly in vain. Anyway, there see=
ms=20
to be missing a lot of things.


> The small size increase is better than introducing a new language feature=
=20
>> (C# delegate comes to mind).
>>
>
> C# delegates are little more than an object that stores an array of=20
> `std::function`s. The call signature is not variable; for any particular=
=20
> delegate, you may only use one particular call signature.
>
> Your `any` changes are overkill for matching C# delegates.
>

--=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/18a5f21d-918e-4a5e-bf17-e45933ea9878%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=
=9F=E6=9C=9F=E4=BA=8C UTC+8=E4=B8=8B=E5=8D=889:27:49=EF=BC=8CNicol Bolas=E5=
=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr">On Tuesday, March 14, 2017 at 4:23:51 AM UTC-4, janezz55 . wrote=
:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">My thoughts exact=
ly. I&#39;m amazed how complex signal/slot implementations of many C++ appl=
ications are, I think my proposal would simplify these.</div></blockquote><=
div><br>How is providing a specific function call signature a significant p=
art of the complexity of signal implementations in C++? Equally importantly=
, exactly how does it make sense for two signal receiving functions in the =
same slot to have different call signatures? Because that&#39;s the <i>only=
 difference</i> that your `any` makes: it erases the type of the call signa=
ture. If you don&#39;t erase that, then you can use `std::function` or simi=
lar tools.<br><br>To me, the main complexity of C++ signal/slot implementat=
ions comes from the fact that C++ has no effective way to remove registered=
 signal handlers without using some sort of handle interface. This is due t=
o the fact that most functors are not equality comparable, and indeed equal=
ity comparability doesn&#39;t make sense for C++ functors.<br></div></div><=
/blockquote><div>This can be worked around by providing additional wrapping=
 mechanism to generate actual implementations of operator=3D=3D automatical=
ly <a href=3D"https://github.com/FrankHB/YSLib/blob/master/YFramework/inclu=
de/YSLib/Core/YEvent.hpp#L164">like this</a>. Be careful to the semantic ga=
ps (&quot;sense&quot;), but it&#39;s not too hard if you have learned that =
there are multiple equivalence relationships involved everyday in general (=
.... and C++ is not good at expressing the differences uniformly... like eq?=
/eqv?/equal?... divergence in Scheme). And the basic meaning of &quot;remov=
e&quot; interface can be simple: to remove the slots equivalent to the key =
specified by the given argument.<br>The real awful thing is in implementati=
on details. Notably, the underlying containers are not friendly to the abst=
raction of &quot;equivalence&quot;. Sequence containers expect operator=3D=
=3D. However, if you are using associative containers (like my current impl=
ementation and boost.signals2 do by default), the work on operator=3D=3D is=
 suddenly in vain. Anyway, there seems to be missing a lot of things.<br><b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0=
..8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div>=
<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0=
..8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">The smal=
l size increase is better than introducing a new language feature (C# deleg=
ate comes to mind).</div></blockquote><div><br>C# delegates are little more=
 than an object that stores an array of `std::function`s. The call signatur=
e is not variable; for any particular delegate, you may only use one partic=
ular call signature.<br><br>Your `any` changes are overkill for matching C#=
 delegates.</div></div></blockquote></div>

<p></p>

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

------=_Part_347_484491744.1489804196592--

------=_Part_346_1570080555.1489804196592--

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Fri, 17 Mar 2017 19:43:48 -0700 (PDT)
Raw View
------=_Part_392_1621640904.1489805028268
Content-Type: multipart/alternative;
 boundary="----=_Part_393_252882198.1489805028269"

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



=E5=9C=A8 2017=E5=B9=B43=E6=9C=8818=E6=97=A5=E6=98=9F=E6=9C=9F=E5=85=AD UTC=
+8=E4=B8=8A=E5=8D=881:26:14=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=9A
>
> On Friday, March 17, 2017 at 12:55:34 PM UTC-4, FrankHB1989 wrote:
>>
>> =E5=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C =
UTC+8=E4=B8=8A=E5=8D=881:50:19=EF=BC=8CRichard Smith=E5=86=99=E9=81=93=EF=
=BC=9A
>>>
>>> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com> wrote:
>>>
>>>> because the number and type of arguments is fixed that way, while=20
>>>> std::any can handle any number of arguments of any type, that's why it=
's=20
>>>> called std::any. Say:
>>>>
>>>> slots["selected"] =3D [](int){};
>>>> slots["selected"](1);
>>>>
>>>> would also work.
>>>>
>>>
>>> What about
>>>
>>> slots["what_is_my_arity"] =3D [](auto...){};
>>>
>>> ? If that's supposed to work, how? (Even if you had a separate=20
>>> any_function type for this idea, it still seems fundamentally unable to=
=20
>>> handle function templates or overload sets, and it gives you an object =
with=20
>>> a non-type-safe operator().)
>>>
>>> For cases where some parameters in the slot are simply unused, it can b=
e=20
>> resolved without type erasure.
>>
>> For instance,=20
>> slots["selected"] =3D [](int){};
>> slots["selected"](1);
>>
>> and
>>
>> slots["selected"] =3D []{};
>> slots["selected"](1);
>>
>> should have no differences on observable behavior, when `int` is already=
=20
>> in the signature. So sometimes it is reasonable to resolve automatically=
..
>>
>> (BTW, in theory, this should be essentially an instance of=20
>> eta-equivalence <https://wiki.haskell.org/Eta_conversion> which is=20
>> rarely realized by ordinary C++ users.)
>>
>> Actually I have my C++11-compliant magic=20
>> <https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144=
c1063389e/YBase/include/ystdex/functional.hpp?at=3Dmaster&fileviewer=3Dfile=
-view-default#functional.hpp-1175>=20
>> to handle theses cases and use it for my signal-slot library API=20
>> <https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144=
c1063389e/YFramework/include/YSLib/Core/YEvent.hpp?at=3Dmaster&fileviewer=
=3Dfile-view-default#YEvent.hpp-141>,=20
>> which resolve such cases *during translation*.
>>
>
> I admit that I haven't looked too deeply at your library, but a quick ski=
m=20
> over it suggests that it doesn't actually erase the function signature.=
=20
> Your `GEvent` type takes a signature as a template parameter. And signatu=
re=20
> erasure is precisely what is being discussed here. Again, I only quickly=
=20
> skimmed your code, so it could be that you're erasing the signature=20
> somewhere else.
>

True, I am against to erase the types of signatures (just for convenience)=
=20
to implement signal-slot library as OP suggested. The magic of type erasure=
=20
is in the callable handler (slot) type `GHEvent=20
<https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c10=
63389e/YFramework/include/YSLib/Core/YEvent.hpp?fileviewer=3Dfile-view-defa=
ult#YEvent.hpp-72>`,=20
which in turns uses the implementation of `std::function` directly=20
<https://github.com/FrankHB/YSLib/blob/master/YFramework/include/YSLib/Core=
/YEvent.hpp#L176>.=20
In fact, it is just a `std::function` armed with custom operator=3D=3D.

Note this trick of reusing existed type-erased wrapper is generally=20
available, but it might be not optimal enough. There also exists room to=20
improve on convenience. The problem of implementation difficulties on type=
=20
erasure (with additional adjustment of requirements on targets) in general=
=20
still remains. So I agree something like Boost.TypeErasure is deserved to=
=20
be discussed.

=20
=20

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/eda59b37-c148-4ca6-bf63-3165282a4fd2%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=8818=E6=97=A5=E6=98=
=9F=E6=9C=9F=E5=85=AD UTC+8=E4=B8=8A=E5=8D=881:26:14=EF=BC=8CNicol Bolas=E5=
=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margin: =
0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div d=
ir=3D"ltr">On Friday, March 17, 2017 at 12:55:34 PM UTC-4, FrankHB1989 wrot=
e:<blockquote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;bor=
der-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">=E5=9C=A8 2017=
=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C UTC+8=E4=B8=8A=E5=
=8D=881:50:19=EF=BC=8CRichard Smith=E5=86=99=E9=81=93=EF=BC=9A<blockquote c=
lass=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #c=
cc solid;padding-left:1ex"><div dir=3D"ltr"><div><div class=3D"gmail_quote"=
>On 13 March 2017 at 04:18, janezz55 . <span dir=3D"ltr">&lt;<a rel=3D"nofo=
llow">jane...@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail=
_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:=
1ex"><div dir=3D"ltr">because the number and type of arguments is fixed tha=
t way, while std::any can handle any number of arguments of any type, that&=
#39;s why it&#39;s called std::any. Say:<div><br></div><div>slots[&quot;sel=
ected&quot;] =3D [](int){};</div><div>slots[&quot;selected&quot;](1);</div>=
<div><br></div><div>would also work.</div></div></blockquote><div><br></div=
><div>What about</div><div><br></div><div>slots[&quot;what_is_my_arity&quot=
;] =3D [](auto...){};</div><div><br></div><div>? If that&#39;s supposed to =
work, how? (Even if you had a separate any_function type for this idea, it =
still seems fundamentally unable to handle function templates or overload s=
ets, and it gives you an object with a non-type-safe operator().)</div><div=
><br></div></div></div></div></blockquote><div>For cases where some paramet=
ers in the slot are simply unused, it can be resolved without type erasure.=
<br><div><br>For instance, <br></div><div style=3D"background-color:rgb(250=
,250,250);border-color:rgb(187,187,187);border-style:solid;border-width:1px=
"><code><div><span style=3D"color:#000">slots</span><span style=3D"color:#6=
60">[</span><span style=3D"color:#080">&quot;selected&quot;</span><span sty=
le=3D"color:#660">]</span><span style=3D"color:#000"> </span><span style=3D=
"color:#660">=3D</span><span style=3D"color:#000"> </span><span style=3D"co=
lor:#660">[](</span><span style=3D"color:#008">int</span><span style=3D"col=
or:#660">){};</span><span style=3D"color:#000"><br>slots</span><span style=
=3D"color:#660">[</span><span style=3D"color:#080">&quot;selected&quot;</sp=
an><span style=3D"color:#660">](</span><span style=3D"color:#066">1</span><=
span style=3D"color:#660">);</span></div></code></div><div><br></div>and<br=
><br><div style=3D"background-color:rgb(250,250,250);border-color:rgb(187,1=
87,187);border-style:solid;border-width:1px"><code><div><span style=3D"colo=
r:#000">slots</span><span style=3D"color:#660">[</span><span style=3D"color=
:#080">&quot;selected&quot;</span><span style=3D"color:#660">]</span><span =
style=3D"color:#000"> </span><span style=3D"color:#660">=3D</span><span sty=
le=3D"color:#000"> </span><span style=3D"color:#660">[]{};</span><span styl=
e=3D"color:#000"><br>slots</span><span style=3D"color:#660">[</span><span s=
tyle=3D"color:#080">&quot;selected&quot;</span><span style=3D"color:#660">]=
(</span><span style=3D"color:#066">1</span><span style=3D"color:#660">);</s=
pan></div></code></div><div><br></div>should have no differences on observa=
ble behavior, when `int` is already in the signature. So sometimes it is re=
asonable to resolve automatically.<br><br>(BTW, in theory, this should be e=
ssentially an instance of <a href=3D"https://wiki.haskell.org/Eta_conversio=
n" rel=3D"nofollow" target=3D"_blank" onmousedown=3D"this.href=3D&#39;https=
://www.google.com/url?q\x3dhttps%3A%2F%2Fwiki.haskell.org%2FEta_conversion\=
x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNE_EzPlSO5yajk7EcCzn8ZtZXk_kQ&#39;;r=
eturn true;" onclick=3D"this.href=3D&#39;https://www.google.com/url?q\x3dht=
tps%3A%2F%2Fwiki.haskell.org%2FEta_conversion\x26sa\x3dD\x26sntz\x3d1\x26us=
g\x3dAFQjCNE_EzPlSO5yajk7EcCzn8ZtZXk_kQ&#39;;return true;">eta-equivalence<=
/a> which is rarely realized by ordinary C++ users.)<br><br>Actually I have=
 <a href=3D"https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba=
14002144c1063389e/YBase/include/ystdex/functional.hpp?at=3Dmaster&amp;filev=
iewer=3Dfile-view-default#functional.hpp-1175" rel=3D"nofollow" target=3D"_=
blank" onmousedown=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttp=
s%3A%2F%2Fbitbucket.org%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14=
002144c1063389e%2FYBase%2Finclude%2Fystdex%2Ffunctional.hpp%3Fat%3Dmaster%2=
6fileviewer%3Dfile-view-default%23functional.hpp-1175\x26sa\x3dD\x26sntz\x3=
d1\x26usg\x3dAFQjCNELxPr_azagNucSDDMv_6dO6lRgSQ&#39;;return true;" onclick=
=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fbitbucke=
t.org%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144c1063389e%2F=
YBase%2Finclude%2Fystdex%2Ffunctional.hpp%3Fat%3Dmaster%26fileviewer%3Dfile=
-view-default%23functional.hpp-1175\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjC=
NELxPr_azagNucSDDMv_6dO6lRgSQ&#39;;return true;">my C++11-compliant magic</=
a> to handle theses cases and use it for <a href=3D"https://bitbucket.org/F=
rankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c1063389e/YFramework/includ=
e/YSLib/Core/YEvent.hpp?at=3Dmaster&amp;fileviewer=3Dfile-view-default#YEve=
nt.hpp-141" rel=3D"nofollow" target=3D"_blank" onmousedown=3D"this.href=3D&=
#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FFrankHB%2=
Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144c1063389e%2FYFramework%2Fincl=
ude%2FYSLib%2FCore%2FYEvent.hpp%3Fat%3Dmaster%26fileviewer%3Dfile-view-defa=
ult%23YEvent.hpp-141\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNF99xg8I78ZCRLA=
yG5IriPmnlzJcA&#39;;return true;" onclick=3D"this.href=3D&#39;https://www.g=
oogle.com/url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FFrankHB%2Fyslib%2Fsrc%2Fd8=
5d1c6a0da6b93f3459aba14002144c1063389e%2FYFramework%2Finclude%2FYSLib%2FCor=
e%2FYEvent.hpp%3Fat%3Dmaster%26fileviewer%3Dfile-view-default%23YEvent.hpp-=
141\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNF99xg8I78ZCRLAyG5IriPmnlzJcA&#3=
9;;return true;">my signal-slot library API</a>, which resolve such cases <=
i>during translation</i>.<br></div></div></blockquote><div><br>I admit that=
 I haven&#39;t looked too deeply at your library, but a quick skim over it =
suggests that it doesn&#39;t actually erase the function signature. Your `G=
Event` type takes a signature as a template parameter. And signature erasur=
e is precisely what is being discussed here. Again, I only quickly skimmed =
your code, so it could be that you&#39;re erasing the signature somewhere e=
lse.<br></div></div></blockquote><div><br>True, I am against to erase the t=
ypes of signatures (just for convenience) to implement signal-slot library =
as OP suggested. The magic of type erasure is in the callable handler (slot=
) type `<a href=3D"https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f=
3459aba14002144c1063389e/YFramework/include/YSLib/Core/YEvent.hpp?fileviewe=
r=3Dfile-view-default#YEvent.hpp-72">GHEvent</a>`, which in turns uses the =
implementation of `std::function` <a href=3D"https://github.com/FrankHB/YSL=
ib/blob/master/YFramework/include/YSLib/Core/YEvent.hpp#L176">directly</a>.=
 In fact, it is just a `std::function` armed with custom operator=3D=3D.<br=
><br>Note this trick of reusing existed type-erased wrapper is generally av=
ailable, but it might be not optimal enough. There also exists room to impr=
ove on convenience. The problem of implementation difficulties on type eras=
ure (with additional adjustment of requirements on targets) in general stil=
l remains. So I agree something like Boost.TypeErasure is deserved to be di=
scussed.<br><br>=C2=A0<br>=C2=A0<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/eda59b37-c148-4ca6-bf63-3165282a4fd2%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/eda59b37-c148-4ca6-bf63-3165282a4fd2=
%40isocpp.org</a>.<br />

------=_Part_393_252882198.1489805028269--

------=_Part_392_1621640904.1489805028268--

.


Author: FrankHB1989 <frankhb1989@gmail.com>
Date: Fri, 17 Mar 2017 19:51:02 -0700 (PDT)
Raw View
------=_Part_2879_1587021099.1489805462681
Content-Type: multipart/alternative;
 boundary="----=_Part_2880_1704754607.1489805462681"

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



=E5=9C=A8 2017=E5=B9=B43=E6=9C=8818=E6=97=A5=E6=98=9F=E6=9C=9F=E5=85=AD UTC=
+8=E4=B8=8A=E5=8D=8810:43:48=EF=BC=8CFrankHB1989=E5=86=99=E9=81=93=EF=BC=9A
>
>
>
> =E5=9C=A8 2017=E5=B9=B43=E6=9C=8818=E6=97=A5=E6=98=9F=E6=9C=9F=E5=85=AD U=
TC+8=E4=B8=8A=E5=8D=881:26:14=EF=BC=8CNicol Bolas=E5=86=99=E9=81=93=EF=BC=
=9A
>>
>> On Friday, March 17, 2017 at 12:55:34 PM UTC-4, FrankHB1989 wrote:
>>>
>>> =E5=9C=A8 2017=E5=B9=B43=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C=
 UTC+8=E4=B8=8A=E5=8D=881:50:19=EF=BC=8CRichard Smith=E5=86=99=E9=81=93=EF=
=BC=9A
>>>>
>>>> On 13 March 2017 at 04:18, janezz55 . <jane...@gmail.com> wrote:
>>>>
>>>>> because the number and type of arguments is fixed that way, while=20
>>>>> std::any can handle any number of arguments of any type, that's why i=
t's=20
>>>>> called std::any. Say:
>>>>>
>>>>> slots["selected"] =3D [](int){};
>>>>> slots["selected"](1);
>>>>>
>>>>> would also work.
>>>>>
>>>>
>>>> What about
>>>>
>>>> slots["what_is_my_arity"] =3D [](auto...){};
>>>>
>>>> ? If that's supposed to work, how? (Even if you had a separate=20
>>>> any_function type for this idea, it still seems fundamentally unable t=
o=20
>>>> handle function templates or overload sets, and it gives you an object=
 with=20
>>>> a non-type-safe operator().)
>>>>
>>>> For cases where some parameters in the slot are simply unused, it can=
=20
>>> be resolved without type erasure.
>>>
>>> For instance,=20
>>> slots["selected"] =3D [](int){};
>>> slots["selected"](1);
>>>
>>> and
>>>
>>> slots["selected"] =3D []{};
>>> slots["selected"](1);
>>>
>>> should have no differences on observable behavior, when `int` is alread=
y=20
>>> in the signature. So sometimes it is reasonable to resolve automaticall=
y.
>>>
>>> (BTW, in theory, this should be essentially an instance of=20
>>> eta-equivalence <https://wiki.haskell.org/Eta_conversion> which is=20
>>> rarely realized by ordinary C++ users.)
>>>
>>> Actually I have my C++11-compliant magic=20
>>> <https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba1400214=
4c1063389e/YBase/include/ystdex/functional.hpp?at=3Dmaster&fileviewer=3Dfil=
e-view-default#functional.hpp-1175>=20
>>> to handle theses cases and use it for my signal-slot library API=20
>>> <https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba1400214=
4c1063389e/YFramework/include/YSLib/Core/YEvent.hpp?at=3Dmaster&fileviewer=
=3Dfile-view-default#YEvent.hpp-141>,=20
>>> which resolve such cases *during translation*.
>>>
>>
>> I admit that I haven't looked too deeply at your library, but a quick=20
>> skim over it suggests that it doesn't actually erase the function=20
>> signature. Your `GEvent` type takes a signature as a template parameter.=
=20
>> And signature erasure is precisely what is being discussed here. Again, =
I=20
>> only quickly skimmed your code, so it could be that you're erasing the=
=20
>> signature somewhere else.
>>
>
> True, I am against to erase the types of signatures (just for convenience=
)=20
> to implement signal-slot library as OP suggested. The magic of type erasu=
re=20
> is in the callable handler (slot) type `GHEvent=20
> <https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144c=
1063389e/YFramework/include/YSLib/Core/YEvent.hpp?fileviewer=3Dfile-view-de=
fault#YEvent.hpp-72>`,=20
> which in turns uses the implementation of `std::function` directly=20
> <https://github.com/FrankHB/YSLib/blob/master/YFramework/include/YSLib/Co=
re/YEvent.hpp#L176>.=20
> In fact, it is just a `std::function` armed with custom operator=3D=3D.
>
.... at first, besides I had added automatic eta-conversion later (around=20
~2014).
(And I'd like to see some wrappers related to `std::function` to overcome=
=20
the verbosity for these cases, but that would be another story.)
=20

>
> Note this trick of reusing existed type-erased wrapper is generally=20
> available, but it might be not optimal enough. There also exists room to=
=20
> improve on convenience. The problem of implementation difficulties on typ=
e=20
> erasure (with additional adjustment of requirements on targets) in genera=
l=20
> still remains. So I agree something like Boost.TypeErasure is deserved to=
=20
> be discussed.
>
> =20
> =20
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/305fab96-cb71-4985-8990-6759b15f2aea%40isocpp.or=
g.

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

<div dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=8818=E6=97=A5=E6=98=
=9F=E6=9C=9F=E5=85=AD UTC+8=E4=B8=8A=E5=8D=8810:43:48=EF=BC=8CFrankHB1989=
=E5=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margi=
n: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><di=
v dir=3D"ltr"><br><br>=E5=9C=A8 2017=E5=B9=B43=E6=9C=8818=E6=97=A5=E6=98=9F=
=E6=9C=9F=E5=85=AD UTC+8=E4=B8=8A=E5=8D=881:26:14=EF=BC=8CNicol Bolas=E5=86=
=99=E9=81=93=EF=BC=9A<blockquote class=3D"gmail_quote" style=3D"margin:0;ma=
rgin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"lt=
r">On Friday, March 17, 2017 at 12:55:34 PM UTC-4, FrankHB1989 wrote:<block=
quote class=3D"gmail_quote" style=3D"margin:0;margin-left:0.8ex;border-left=
:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">=E5=9C=A8 2017=E5=B9=B43=
=E6=9C=8814=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=8C UTC+8=E4=B8=8A=E5=8D=881:50=
:19=EF=BC=8CRichard Smith=E5=86=99=E9=81=93=EF=BC=9A<blockquote class=3D"gm=
ail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><div dir=3D"ltr"><div><div class=3D"gmail_quote">On 13 Mar=
ch 2017 at 04:18, janezz55 . <span dir=3D"ltr">&lt;<a rel=3D"nofollow">jane=
....@gmail.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
dir=3D"ltr">because the number and type of arguments is fixed that way, whi=
le std::any can handle any number of arguments of any type, that&#39;s why =
it&#39;s called std::any. Say:<div><br></div><div>slots[&quot;selected&quot=
;] =3D [](int){};</div><div>slots[&quot;selected&quot;](1);</div><div><br><=
/div><div>would also work.</div></div></blockquote><div><br></div><div>What=
 about</div><div><br></div><div>slots[&quot;what_is_my_arity&quot;] =3D [](=
auto...){};</div><div><br></div><div>? If that&#39;s supposed to work, how?=
 (Even if you had a separate any_function type for this idea, it still seem=
s fundamentally unable to handle function templates or overload sets, and i=
t gives you an object with a non-type-safe operator().)</div><div><br></div=
></div></div></div></blockquote><div>For cases where some parameters in the=
 slot are simply unused, it can be resolved without type erasure.<br><div><=
br>For instance, <br></div><div style=3D"background-color:rgb(250,250,250);=
border-color:rgb(187,187,187);border-style:solid;border-width:1px"><code><d=
iv><span style=3D"color:#000">slots</span><span style=3D"color:#660">[</spa=
n><span style=3D"color:#080">&quot;selected&quot;</span><span style=3D"colo=
r:#660">]</span><span style=3D"color:#000"> </span><span style=3D"color:#66=
0">=3D</span><span style=3D"color:#000"> </span><span style=3D"color:#660">=
[](</span><span style=3D"color:#008">int</span><span style=3D"color:#660">)=
{};</span><span style=3D"color:#000"><br>slots</span><span style=3D"color:#=
660">[</span><span style=3D"color:#080">&quot;selected&quot;</span><span st=
yle=3D"color:#660">](</span><span style=3D"color:#066">1</span><span style=
=3D"color:#660">);</span></div></code></div><div><br></div>and<br><br><div =
style=3D"background-color:rgb(250,250,250);border-color:rgb(187,187,187);bo=
rder-style:solid;border-width:1px"><code><div><span style=3D"color:#000">sl=
ots</span><span style=3D"color:#660">[</span><span style=3D"color:#080">&qu=
ot;selected&quot;</span><span style=3D"color:#660">]</span><span style=3D"c=
olor:#000"> </span><span style=3D"color:#660">=3D</span><span style=3D"colo=
r:#000"> </span><span style=3D"color:#660">[]{};</span><span style=3D"color=
:#000"><br>slots</span><span style=3D"color:#660">[</span><span style=3D"co=
lor:#080">&quot;selected&quot;</span><span style=3D"color:#660">](</span><s=
pan style=3D"color:#066">1</span><span style=3D"color:#660">);</span></div>=
</code></div><div><br></div>should have no differences on observable behavi=
or, when `int` is already in the signature. So sometimes it is reasonable t=
o resolve automatically.<br><br>(BTW, in theory, this should be essentially=
 an instance of <a href=3D"https://wiki.haskell.org/Eta_conversion" rel=3D"=
nofollow" target=3D"_blank" onmousedown=3D"this.href=3D&#39;https://www.goo=
gle.com/url?q\x3dhttps%3A%2F%2Fwiki.haskell.org%2FEta_conversion\x26sa\x3dD=
\x26sntz\x3d1\x26usg\x3dAFQjCNE_EzPlSO5yajk7EcCzn8ZtZXk_kQ&#39;;return true=
;" onclick=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%=
2Fwiki.haskell.org%2FEta_conversion\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjC=
NE_EzPlSO5yajk7EcCzn8ZtZXk_kQ&#39;;return true;">eta-equivalence</a> which =
is rarely realized by ordinary C++ users.)<br><br>Actually I have <a href=
=3D"https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14002144=
c1063389e/YBase/include/ystdex/functional.hpp?at=3Dmaster&amp;fileviewer=3D=
file-view-default#functional.hpp-1175" rel=3D"nofollow" target=3D"_blank" o=
nmousedown=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%=
2Fbitbucket.org%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144c1=
063389e%2FYBase%2Finclude%2Fystdex%2Ffunctional.hpp%3Fat%3Dmaster%26filevie=
wer%3Dfile-view-default%23functional.hpp-1175\x26sa\x3dD\x26sntz\x3d1\x26us=
g\x3dAFQjCNELxPr_azagNucSDDMv_6dO6lRgSQ&#39;;return true;" onclick=3D"this.=
href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FF=
rankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144c1063389e%2FYBase%2Fi=
nclude%2Fystdex%2Ffunctional.hpp%3Fat%3Dmaster%26fileviewer%3Dfile-view-def=
ault%23functional.hpp-1175\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNELxPr_az=
agNucSDDMv_6dO6lRgSQ&#39;;return true;">my C++11-compliant magic</a> to han=
dle theses cases and use it for <a href=3D"https://bitbucket.org/FrankHB/ys=
lib/src/d85d1c6a0da6b93f3459aba14002144c1063389e/YFramework/include/YSLib/C=
ore/YEvent.hpp?at=3Dmaster&amp;fileviewer=3Dfile-view-default#YEvent.hpp-14=
1" rel=3D"nofollow" target=3D"_blank" onmousedown=3D"this.href=3D&#39;https=
://www.google.com/url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FFrankHB%2Fyslib%2F=
src%2Fd85d1c6a0da6b93f3459aba14002144c1063389e%2FYFramework%2Finclude%2FYSL=
ib%2FCore%2FYEvent.hpp%3Fat%3Dmaster%26fileviewer%3Dfile-view-default%23YEv=
ent.hpp-141\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNF99xg8I78ZCRLAyG5IriPmn=
lzJcA&#39;;return true;" onclick=3D"this.href=3D&#39;https://www.google.com=
/url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da=
6b93f3459aba14002144c1063389e%2FYFramework%2Finclude%2FYSLib%2FCore%2FYEven=
t.hpp%3Fat%3Dmaster%26fileviewer%3Dfile-view-default%23YEvent.hpp-141\x26sa=
\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNF99xg8I78ZCRLAyG5IriPmnlzJcA&#39;;return=
 true;">my signal-slot library API</a>, which resolve such cases <i>during =
translation</i>.<br></div></div></blockquote><div><br>I admit that I haven&=
#39;t looked too deeply at your library, but a quick skim over it suggests =
that it doesn&#39;t actually erase the function signature. Your `GEvent` ty=
pe takes a signature as a template parameter. And signature erasure is prec=
isely what is being discussed here. Again, I only quickly skimmed your code=
, so it could be that you&#39;re erasing the signature somewhere else.<br><=
/div></div></blockquote><div><br>True, I am against to erase the types of s=
ignatures (just for convenience) to implement signal-slot library as OP sug=
gested. The magic of type erasure is in the callable handler (slot) type `<=
a href=3D"https://bitbucket.org/FrankHB/yslib/src/d85d1c6a0da6b93f3459aba14=
002144c1063389e/YFramework/include/YSLib/Core/YEvent.hpp?fileviewer=3Dfile-=
view-default#YEvent.hpp-72" target=3D"_blank" rel=3D"nofollow" onmousedown=
=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fbitbucke=
t.org%2FFrankHB%2Fyslib%2Fsrc%2Fd85d1c6a0da6b93f3459aba14002144c1063389e%2F=
YFramework%2Finclude%2FYSLib%2FCore%2FYEvent.hpp%3Ffileviewer%3Dfile-view-d=
efault%23YEvent.hpp-72\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNElTQbQTPqLay=
LD7wNolLDxAeqtgg&#39;;return true;" onclick=3D"this.href=3D&#39;https://www=
..google.com/url?q\x3dhttps%3A%2F%2Fbitbucket.org%2FFrankHB%2Fyslib%2Fsrc%2F=
d85d1c6a0da6b93f3459aba14002144c1063389e%2FYFramework%2Finclude%2FYSLib%2FC=
ore%2FYEvent.hpp%3Ffileviewer%3Dfile-view-default%23YEvent.hpp-72\x26sa\x3d=
D\x26sntz\x3d1\x26usg\x3dAFQjCNElTQbQTPqLayLD7wNolLDxAeqtgg&#39;;return tru=
e;">GHEvent</a>`, which in turns uses the implementation of `std::function`=
 <a href=3D"https://github.com/FrankHB/YSLib/blob/master/YFramework/include=
/YSLib/Core/YEvent.hpp#L176" target=3D"_blank" rel=3D"nofollow" onmousedown=
=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F%2Fgithub.c=
om%2FFrankHB%2FYSLib%2Fblob%2Fmaster%2FYFramework%2Finclude%2FYSLib%2FCore%=
2FYEvent.hpp%23L176\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFagGWax0dTA2o6X=
E08S2_U0w2ZKw&#39;;return true;" onclick=3D"this.href=3D&#39;https://www.go=
ogle.com/url?q\x3dhttps%3A%2F%2Fgithub.com%2FFrankHB%2FYSLib%2Fblob%2Fmaste=
r%2FYFramework%2Finclude%2FYSLib%2FCore%2FYEvent.hpp%23L176\x26sa\x3dD\x26s=
ntz\x3d1\x26usg\x3dAFQjCNFagGWax0dTA2o6XE08S2_U0w2ZKw&#39;;return true;">di=
rectly</a>. In fact, it is just a `std::function` armed with custom operato=
r=3D=3D.<br></div></div></blockquote><div>... at first, besides I had added=
 automatic eta-conversion later (around ~2014).<br>(And I&#39;d like to see=
 some wrappers related to `std::function` to overcome the verbosity for the=
se cases, but that would be another story.)<br>=C2=A0<br></div><blockquote =
class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1p=
x #ccc solid;padding-left: 1ex;"><div dir=3D"ltr"><div><br>Note this trick =
of reusing existed type-erased wrapper is generally available, but it might=
 be not optimal enough. There also exists room to improve on convenience. T=
he problem of implementation difficulties on type erasure (with additional =
adjustment of requirements on targets) in general still remains. So I agree=
 something like Boost.TypeErasure is deserved to be discussed.<br><br>=C2=
=A0<br>=C2=A0<br></div></div></blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&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/305fab96-cb71-4985-8990-6759b15f2aea%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/305fab96-cb71-4985-8990-6759b15f2aea=
%40isocpp.org</a>.<br />

------=_Part_2880_1704754607.1489805462681--

------=_Part_2879_1587021099.1489805462681--

.