Topic: Convert free function to callable class type


Author: Abyx <fl.lllj@gmail.com>
Date: Sun, 10 May 2015 02:10:28 -0700 (PDT)
Raw View
------=_Part_3719_980679279.1431249028588
Content-Type: multipart/alternative;
 boundary="----=_Part_3720_339651428.1431249028588"

------=_Part_3720_339651428.1431249028588
Content-Type: text/plain; charset=UTF-8

If one want to use a free function with a class which accepts a callable
template parameter - a special constructor have to be called:

bool FooLess(Foo lhs, Foo rhs);
std::set<Foo, decltype(&FooLess)> set(FooLess);

bool ReleaseFoo(FooHandle);
std::unique_ptr<void, decltype(ReleaseFoo)> ptr(CreateFoo(), ReleaseFoo);

Because while function pointers are callable, they are not default
constructible.

It is possible to write a callable class which will accept a function
pointer as a template parameter, and forward arguments to it:

template<typename F, F P>
struct fn_to_type {
    template<class... Args>
    decltype(auto) operator()(Args&&... args) {
        return P(std::forward<Args>(args)...);
    }
};

Which can be used to create default-constructible typedefs:

bool ReleaseFoo(FooHandle);
using UniqueFoo = std::unique_ptr<void, fn_to_type<decltype(&ReleaseFoo), &
ReleaseFoo>>;

bool FooLess(Foo lhs, Foo rhs);
using FooSet = std::set<Foo, fn_to_type<decltype(&FooLess), &FooLess>>;

Is there a reason why the Standard library doesn't (or shouldn't) have such
adapter?

--

---
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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.

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

<div dir=3D"ltr">If one want to use a free function with a class which acce=
pts a callable template parameter - a special constructor have to be called=
:<br><br><div class=3D"prettyprint" style=3D"background-color: rgb(250, 250=
, 250); border-color: rgb(187, 187, 187); border-style: solid; border-width=
: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"su=
bprettyprint"><span style=3D"color: #008;" class=3D"styled-by-prettify">boo=
l</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><=
span style=3D"color: #606;" class=3D"styled-by-prettify">FooLess</span><spa=
n style=3D"color: #660;" class=3D"styled-by-prettify">(</span><span style=
=3D"color: #606;" class=3D"styled-by-prettify">Foo</span><span style=3D"col=
or: #000;" class=3D"styled-by-prettify"> lhs</span><span style=3D"color: #6=
60;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;" clas=
s=3D"styled-by-prettify"> </span><span style=3D"color: #606;" class=3D"styl=
ed-by-prettify">Foo</span><span style=3D"color: #000;" class=3D"styled-by-p=
rettify"> rhs</span><span style=3D"color: #660;" class=3D"styled-by-prettif=
y">);</span><span style=3D"color: #000;" class=3D"styled-by-prettify"><br>s=
td</span><span style=3D"color: #660;" class=3D"styled-by-prettify">::</span=
><span style=3D"color: #008;" class=3D"styled-by-prettify">set</span><span =
style=3D"color: #660;" class=3D"styled-by-prettify">&lt;</span><span style=
=3D"color: #606;" class=3D"styled-by-prettify">Foo</span><span style=3D"col=
or: #660;" class=3D"styled-by-prettify">,</span><span style=3D"color: #000;=
" class=3D"styled-by-prettify"> </span><span style=3D"color: #008;" class=
=3D"styled-by-prettify">decltype</span><span style=3D"color: #660;" class=
=3D"styled-by-prettify">(&amp;</span><span style=3D"color: #606;" class=3D"=
styled-by-prettify">FooLess</span><span style=3D"color: #660;" class=3D"sty=
led-by-prettify">)&gt;</span><span style=3D"color: #000;" class=3D"styled-b=
y-prettify"> </span><span style=3D"color: #008;" class=3D"styled-by-prettif=
y">set</span><span style=3D"color: #660;" class=3D"styled-by-prettify">(</s=
pan><code class=3D"prettyprint"><span style=3D"color: #606;" class=3D"style=
d-by-prettify">FooLess</span><span style=3D"color: #660;" class=3D"styled-b=
y-prettify">);</span></code><span style=3D"color: #000;" class=3D"styled-by=
-prettify"></span><br><br>bool ReleaseFoo(FooHandle);<br>std::unique_ptr&lt=
;void, decltype(<code class=3D"prettyprint">ReleaseFoo)&gt; ptr(CreateFoo()=
, </code><code class=3D"prettyprint">ReleaseFoo);</code></div></code></div>=
<br>Because while function pointers are callable, they are not default cons=
tructible.<br><br>It is possible to write a callable class which will accep=
t a function pointer as a template parameter, and forward arguments to it:<=
br><br><div class=3D"prettyprint" style=3D"background-color: rgb(250, 250, =
250); border-color: rgb(187, 187, 187); border-style: solid; border-width: =
1px; word-wrap: break-word;"><code class=3D"prettyprint"><div class=3D"subp=
rettyprint"><span style=3D"color: #606;" class=3D"styled-by-prettify">templ=
ate&lt;typename F, F P&gt;<br>struct fn_to_type {<br>&nbsp;&nbsp;&nbsp; tem=
plate&lt;class... Args&gt;<br>&nbsp;&nbsp;&nbsp; decltype(auto) operator()(=
Args&amp;&amp;... args) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret=
urn P(std::forward&lt;Args&gt;(args)...);<br>&nbsp;&nbsp;&nbsp; } &nbsp;<br=
>};</span><span style=3D"color: #660;" class=3D"styled-by-prettify"></span>=
</div></code></div><br>Which can be used to create default-constructible ty=
pedefs:<br><br><div class=3D"prettyprint" style=3D"background-color: rgb(25=
0, 250, 250); border-color: rgb(187, 187, 187); border-style: solid; border=
-width: 1px; word-wrap: break-word;"><code class=3D"prettyprint"><div class=
=3D"subprettyprint"><span style=3D"color: #606;" class=3D"styled-by-prettif=
y"><code class=3D"prettyprint">bool ReleaseFoo(FooHandle);<br></code>using =
Unique</span><span style=3D"color: #606;" class=3D"styled-by-prettify"><cod=
e class=3D"prettyprint"><span style=3D"color: #606;" class=3D"styled-by-pre=
ttify"><code class=3D"prettyprint">Foo</code></span></code> =3D std::unique=
_ptr&lt;void, fn_to_type&lt;decltype(&amp;</span><span style=3D"color: #606=
;" class=3D"styled-by-prettify"><code class=3D"prettyprint"><span style=3D"=
color: #606;" class=3D"styled-by-prettify"><code class=3D"prettyprint">Rele=
aseFoo</code></span></code>), &amp;</span><span style=3D"color: #606;" clas=
s=3D"styled-by-prettify"><code class=3D"prettyprint"><span style=3D"color: =
#606;" class=3D"styled-by-prettify"><code class=3D"prettyprint">ReleaseFoo<=
/code></span></code>&gt;&gt;;<br><br></span><span style=3D"color: #606;" cl=
ass=3D"styled-by-prettify"><code class=3D"prettyprint"><span style=3D"color=
: #008;" class=3D"styled-by-prettify">bool</span><span style=3D"color: #000=
;" class=3D"styled-by-prettify"> </span><span style=3D"color: #606;" class=
=3D"styled-by-prettify">FooLess</span><span style=3D"color: #660;" class=3D=
"styled-by-prettify">(</span><span style=3D"color: #606;" class=3D"styled-b=
y-prettify">Foo</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify"> lhs</span><span style=3D"color: #660;" class=3D"styled-by-prettify">,=
</span><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><s=
pan style=3D"color: #606;" class=3D"styled-by-prettify">Foo</span><span sty=
le=3D"color: #000;" class=3D"styled-by-prettify"> rhs</span><span style=3D"=
color: #660;" class=3D"styled-by-prettify">);</span><span style=3D"color: #=
000;" class=3D"styled-by-prettify"><br></span></code>using FooSet =3D std::=
set&lt;Foo, fn_to_type&lt;decltype(&amp;FooLess), &amp;FooLess&gt;&gt;;</sp=
an><span style=3D"color: #660;" class=3D"styled-by-prettify"></span></div><=
/code></div><br>Is there a reason why the Standard library doesn't (or shou=
ldn't) have such adapter?<br></div>

<p></p>

-- <br />
<br />
--- <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 />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

------=_Part_3720_339651428.1431249028588--
------=_Part_3719_980679279.1431249028588--

.


Author: Thiago Macieira <thiago@macieira.org>
Date: Mon, 11 May 2015 07:22:42 +0900
Raw View
On Sunday 10 May 2015 02:10:28 Abyx wrote:
> bool FooLess(Foo lhs, Foo rhs);
> std::set<Foo, decltype(&FooLess)> set(FooLess);
>
> bool ReleaseFoo(FooHandle);
> std::unique_ptr<void, decltype(ReleaseFoo)> ptr(CreateFoo(), ReleaseFoo);
>
> Because while function pointers are callable, they are not default
> constructible.

What do you mean that they are not default constructible?

typedef decltype(&FooLess) FooLessPtr;
FooLessPtr ptr = FooLessPtr{};

You forgot the & in the decltype for std::unique_ptr.

--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center
      PGP/GPG: 0x6EF45358; fingerprint:
      E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358

--

---
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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.

.


Author: Brian Bi <bbi5291@gmail.com>
Date: Sun, 10 May 2015 15:25:27 -0700
Raw View
--001a11c37bccff1a390515c1bc66
Content-Type: text/plain; charset=UTF-8

I assume what was meant is that a value-initialized function pointer
doesn't point to the desired function (or any function at all).

On Sun, May 10, 2015 at 3:22 PM, Thiago Macieira <thiago@macieira.org>
wrote:

> On Sunday 10 May 2015 02:10:28 Abyx wrote:
> > bool FooLess(Foo lhs, Foo rhs);
> > std::set<Foo, decltype(&FooLess)> set(FooLess);
> >
> > bool ReleaseFoo(FooHandle);
> > std::unique_ptr<void, decltype(ReleaseFoo)> ptr(CreateFoo(), ReleaseFoo);
> >
> > Because while function pointers are callable, they are not default
> > constructible.
>
> What do you mean that they are not default constructible?
>
> typedef decltype(&FooLess) FooLessPtr;
> FooLessPtr ptr = FooLessPtr{};
>
> You forgot the & in the decltype for std::unique_ptr.
>
> --
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
>    Software Architect - Intel Open Source Technology Center
>       PGP/GPG: 0x6EF45358; fingerprint:
>       E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358
>
> --
>
> ---
> 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.
> Visit this group at
> http://groups.google.com/a/isocpp.org/group/std-proposals/.
>



--
*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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.

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

<div dir=3D"ltr">I assume what was meant is that a value-initialized functi=
on pointer doesn&#39;t point to the desired function (or any function at al=
l).<br></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On S=
un, May 10, 2015 at 3:22 PM, Thiago Macieira <span dir=3D"ltr">&lt;<a href=
=3D"mailto:thiago@macieira.org" target=3D"_blank">thiago@macieira.org</a>&g=
t;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0=
 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=3D"">On Sund=
ay 10 May 2015 02:10:28 Abyx wrote:<br>
&gt; bool FooLess(Foo lhs, Foo rhs);<br>
&gt; std::set&lt;Foo, decltype(&amp;FooLess)&gt; set(FooLess);<br>
&gt;<br>
&gt; bool ReleaseFoo(FooHandle);<br>
&gt; std::unique_ptr&lt;void, decltype(ReleaseFoo)&gt; ptr(CreateFoo(), Rel=
easeFoo);<br>
&gt;<br>
&gt; Because while function pointers are callable, they are not default<br>
&gt; constructible.<br>
<br>
</span>What do you mean that they are not default constructible?<br>
<br>
typedef decltype(&amp;FooLess) FooLessPtr;<br>
FooLessPtr ptr =3D FooLessPtr{};<br>
<br>
You forgot the &amp; in the decltype for std::unique_ptr.<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Thiago Macieira - thiago (AT) <a href=3D"http://macieira.info" target=3D"_b=
lank">macieira.info</a> - thiago (AT) <a href=3D"http://kde.org" target=3D"=
_blank">kde.org</a><br>
=C2=A0 =C2=A0Software Architect - Intel Open Source Technology Center<br>
=C2=A0 =C2=A0 =C2=A0 PGP/GPG: 0x6EF45358; fingerprint:<br>
=C2=A0 =C2=A0 =C2=A0 E067 918B B660 DBD1 105C=C2=A0 966C 33F5 F005 6EF4 535=
8<br>
</font></span><div class=3D"HOEnZb"><div class=3D"h5"><br>
--<br>
<br>
---<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%2Bunsubscribe@isocpp.org">std-propo=
sals+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>
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/" target=3D"_blank">http://groups.google.com/a/isocpp.org/gro=
up/std-proposals/</a>.<br>
</div></div></blockquote></div><br><br clear=3D"all"><br>-- <br><div class=
=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>

<p></p>

-- <br />
<br />
--- <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 />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

--001a11c37bccff1a390515c1bc66--

.


Author: David Krauss <potswa@mac.com>
Date: Mon, 11 May 2015 10:43:03 +0800
Raw View
--Apple-Mail=_AFA4149A-5CD0-49DE-BBC6-77C9A90EA314
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=UTF-8


> On 2015=E2=80=9305=E2=80=9310, at 5:10 PM, Abyx <fl.lllj@gmail.com> wrote=
:
>=20
> template<typename F, F P>
> struct fn_to_type {
>     template<class... Args>
>     decltype(auto) operator()(Args&&... args) {
>         return P(std::forward<Args>(args)...);
>     } =20
> };

You can more easily get a Callable type by providing an implicit conversion=
 to function pointer type. This also avoids the imperfection of perfect for=
warding wrt list-initialization.

std::integral_constant is already a sufficient solution.

#include <type_traits>
#include <set>
#include <iostream>
#include <iterator>
#include <algorithm>

bool comp( int lhs, int rhs ) {
    return lhs + ( lhs & 1 ) * 10 < rhs + ( rhs & 1 ) * 10;
}

std::set< int, std::integral_constant< bool (*)( int, int ), & comp > >
    s { 1, 2, 4, 5, 8, 12 };

int main() {
    std::copy( s.begin(), s.end(), std::ostream_iterator< int >( std::cout,=
 ", " ) );
    std::cout << "\n";
}


> Is there a reason why the Standard library doesn't (or shouldn't) have su=
ch adapter?

Probably because the <typename F, F P> bit is ugly. Thankfully it should be=
 fixed soon, and then it can be used to create a replacement for integral_c=
onstant without the confusing integral nomenclature.

--=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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.

--Apple-Mail=_AFA4149A-5CD0-49DE-BBC6-77C9A90EA314
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html charset=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space;" class=3D""><br class=3D""><di=
v><blockquote type=3D"cite" class=3D""><div class=3D"">On 2015=E2=80=9305=
=E2=80=9310, at 5:10 PM, Abyx &lt;<a href=3D"mailto:fl.lllj@gmail.com" clas=
s=3D"">fl.lllj@gmail.com</a>&gt; wrote:</div><div class=3D""><div dir=3D"lt=
r" class=3D""><br class=3D""><div class=3D"prettyprint" style=3D"background=
-color: rgb(250, 250, 250); border-color: rgb(187, 187, 187); border-style:=
 solid; border-width: 1px; word-wrap: break-word;"><code class=3D"prettypri=
nt"><div class=3D"subprettyprint"><span style=3D"color: #606;" class=3D"sty=
led-by-prettify">template&lt;typename F, F P&gt;<br class=3D"">struct fn_to=
_type {<br class=3D"">&nbsp;&nbsp;&nbsp; template&lt;class... Args&gt;<br c=
lass=3D"">&nbsp;&nbsp;&nbsp; decltype(auto) operator()(Args&amp;&amp;... ar=
gs) {<br class=3D"">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return P(std=
::forward&lt;Args&gt;(args)...);<br class=3D"">&nbsp;&nbsp;&nbsp; } &nbsp;<=
br class=3D"">};</span></div></code></div></div></div></blockquote><div><br=
 class=3D""></div><div>You can more easily get a Callable type by providing=
 an implicit conversion to function pointer type. This also avoids the impe=
rfection of perfect forwarding wrt list-initialization.</div><div><br class=
=3D""></div><div><font face=3D"Courier" class=3D"">std::integral_constant</=
font> is already a sufficient solution.</div><div><br class=3D""></div><div=
><font face=3D"Courier" class=3D"">#include &lt;type_traits&gt;<br class=3D=
"">#include &lt;set&gt;<br class=3D"">#include &lt;iostream&gt;<br class=3D=
"">#include &lt;iterator&gt;<br class=3D"">#include &lt;algorithm&gt;<br cl=
ass=3D""><br class=3D"">bool comp( int lhs, int rhs ) {<br class=3D"">&nbsp=
; &nbsp;&nbsp;return lhs + ( lhs &amp; 1 ) * 10 &lt; rhs + ( rhs &amp; 1 ) =
* 10;<br class=3D"">}<br class=3D""><br class=3D"">std::set&lt; int, std::i=
ntegral_constant&lt; bool (*)( int, int ), &amp; comp &gt; &gt;<br class=3D=
"">&nbsp; &nbsp;&nbsp;s { 1, 2, 4, 5, 8, 12 };<br class=3D""><br class=3D""=
>int main() {<br class=3D"">&nbsp; &nbsp;&nbsp;std::copy( s.begin(), s.end(=
), std::ostream_iterator&lt; int &gt;( std::cout, ", " ) );<br class=3D"">&=
nbsp; &nbsp;&nbsp;std::cout &lt;&lt; "\n";<br class=3D"">}<br class=3D""></=
font><br class=3D""></div><br class=3D""><blockquote type=3D"cite" class=3D=
""><div class=3D""><div dir=3D"ltr" class=3D"">Is there a reason why the St=
andard library doesn't (or shouldn't) have such adapter?<br class=3D""></di=
v></div></blockquote><br class=3D""></div><div>Probably because the <font f=
ace=3D"Courier" class=3D"">&lt;typename F, F P&gt;</font> bit is ugly. Than=
kfully it should be fixed soon, and then it can be used to create a replace=
ment for <font face=3D"Courier" class=3D"">integral_constant</font> without=
 the confusing <font face=3D"Courier" class=3D"">integral</font> nomenclatu=
re.</div><br class=3D""></body></html>

<p></p>

-- <br />
<br />
--- <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 />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

--Apple-Mail=_AFA4149A-5CD0-49DE-BBC6-77C9A90EA314--

.


Author: Nicol Bolas <jmckesson@gmail.com>
Date: Sun, 10 May 2015 22:25:39 -0700 (PDT)
Raw View
------=_Part_4499_48701541.1431321939426
Content-Type: multipart/alternative;
 boundary="----=_Part_4500_335530080.1431321939426"

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



On Sunday, May 10, 2015 at 10:43:12 PM UTC-4, David Krauss wrote:
>
>
> On 2015=E2=80=9305=E2=80=9310, at 5:10 PM, Abyx <fl....@gmail.com <javasc=
ript:>> wrote:
>
> Is there a reason why the Standard library doesn't (or shouldn't) have=20
> such adapter?
>
>
> Probably because the <typename F, F P> bit is ugly. Thankfully it should=
=20
> be fixed soon, and then it can be used to create a replacement for=20
> integral_constant without the confusing integral nomenclature.
>
>
Has there been a proposal that will fix this? With the sheer volume of=20
proposals going through the committee, I haven't been able to find the time=
=20
to read them all in any detail.=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.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposa=
ls/.

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

<div dir=3D"ltr"><br><br>On Sunday, May 10, 2015 at 10:43:12 PM UTC-4, Davi=
d Krauss wrote:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div style=3D"w=
ord-wrap:break-word"><br><div><blockquote type=3D"cite"><div>On 2015=E2=80=
=9305=E2=80=9310, at 5:10 PM, Abyx &lt;<a href=3D"javascript:" target=3D"_b=
lank" gdf-obfuscated-mailto=3D"pYL0ty_r6H8J" rel=3D"nofollow" onmousedown=
=3D"this.href=3D'javascript:';return true;" onclick=3D"this.href=3D'javascr=
ipt:';return true;">fl....@gmail.com</a>&gt; wrote:</div></blockquote><bloc=
kquote type=3D"cite"><div><div dir=3D"ltr">Is there a reason why the Standa=
rd library doesn't (or shouldn't) have such adapter?<br></div></div></block=
quote><br></div><div>Probably because the <font face=3D"Courier">&lt;typena=
me F, F P&gt;</font> bit is ugly. Thankfully it should be fixed soon, and t=
hen it can be used to create a replacement for <font face=3D"Courier">integ=
ral_constant</font> without the confusing <font face=3D"Courier">integral</=
font> nomenclature.</div><br></div></blockquote><div><br>Has there been a p=
roposal that will fix this? With the sheer volume of proposals going throug=
h the committee, I haven't been able to find the time to read them all in a=
ny detail. <br></div></div>

<p></p>

-- <br />
<br />
--- <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 />
Visit this group at <a href=3D"http://groups.google.com/a/isocpp.org/group/=
std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/<=
/a>.<br />

------=_Part_4500_335530080.1431321939426--
------=_Part_4499_48701541.1431321939426--

.