This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libstdc++/42593] New: [c++0x] std::bind not assignable to std::function


The following code compiles fine with GCC 4.3.3 and 4.4.2, but fails to compile
with 4.5 (snapshot from 2009-12-31):

#include <functional>
void f( int ) {}
int main() { std::function< void( int ) > pf = std::bind( &f,
std::placeholders::_1 ); }

with the following error:

In file included from t.cc:1:0:
/home/frey/work/install/gcc-4.5-snapshot/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:
In static member function &#130;Äòstatic void
std::_Function_handler<void(_ArgTypes ...), _Functor>::_M_invoke(const
std::_Any_data&, _ArgTypes ...) [with _Functor = std::_Bind<void
(*(std::_Placeholder<1>))(int)>, _ArgTypes = {int}]&#130;Äô:
/home/frey/work/install/gcc-4.5-snapshot/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:2127:6:
  instantiated from &#130;Äòstd::function<_Res(_ArgTypes
...)>::function(_Functor, typename __gnu_cxx::__enable_if<(!
std::is_integral<_Functor>::value), std::function<_Res(_ArgTypes
...)>::_Useless>::__type) [with _Functor = std::_Bind<void
(*(std::_Placeholder<1>))(int)>, _Res = void, _ArgTypes = {int}, typename
__gnu_cxx::__enable_if<(! std::is_integral<_Functor>::value),
std::function<_Res(_ArgTypes ...)>::_Useless>::__type =
std::function<void(int)>::_Useless]&#130;Äô
t.cc:3:85:   instantiated from here
/home/frey/work/install/gcc-4.5-snapshot/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:1748:9:
error: no match for call to &#130;Äò(std::_Bind<void
(*(std::_Placeholder<1>))(int)>) (int)&#130;Äô
/home/frey/work/install/gcc-4.5-snapshot/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:1219:9:
note: candidates are: typename std::result_of<_Functor(typename
std::result_of<std::_Mu<_Bound_args>(_Bound_args, std::tuple<_UElements
...>)>::type ...)>::type std::_Bind<_Functor(_Bound_args
...)>::operator()(_Args& ...) [with _Args = {int}, _Functor = void (*)(int),
_Bound_args = {std::_Placeholder<1>}, typename std::result_of<_Functor(typename
std::result_of<std::_Mu<_Bound_args>(_Bound_args, std::tuple<_UElements
...>)>::type ...)>::type = void]
/home/frey/work/install/gcc-4.5-snapshot/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:1230:9:
note:                typename std::result_of<const _Functor(typename
std::result_of<std::_Mu<_Bound_args>(_Bound_args, std::tuple<_UElements
...>)>::type ...)>::type std::_Bind<_Functor(_Bound_args
...)>::operator()(_Args& ...) const [with _Args = {int}, _Functor = void
(*)(int), _Bound_args = {std::_Placeholder<1>}, typename std::result_of<const
_Functor(typename std::result_of<std::_Mu<_Bound_args>(_Bound_args,
std::tuple<_UElements ...>)>::type ...)>::type = void]
/home/frey/work/install/gcc-4.5-snapshot/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:1242:9:
note:                typename std::result_of<volatile _Functor(typename
std::result_of<std::_Mu<_Bound_args>(_Bound_args, std::tuple<_UElements
...>)>::type ...)>::type std::_Bind<_Functor(_Bound_args
...)>::operator()(_Args& ...) volatile [with _Args = {int}, _Functor = void
(*)(int), _Bound_args = {std::_Placeholder<1>}, typename
std::result_of<volatile _Functor(typename
std::result_of<std::_Mu<_Bound_args>(_Bound_args, std::tuple<_UElements
...>)>::type ...)>::type = void]
/home/frey/work/install/gcc-4.5-snapshot/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:1255:9:
note:                typename std::result_of<const volatile _Functor(typename
std::result_of<std::_Mu<_Bound_args>(_Bound_args, std::tuple<_UElements
...>)>::type ...)>::type std::_Bind<_Functor(_Bound_args
...)>::operator()(_Args& ...) const volatile [with _Args = {int}, _Functor =
void (*)(int), _Bound_args = {std::_Placeholder<1>}, typename
std::result_of<const volatile _Functor(typename
std::result_of<std::_Mu<_Bound_args>(_Bound_args, std::tuple<_UElements
...>)>::type ...)>::type = void]


-- 
           Summary: [c++0x] std::bind not assignable to std::function
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: d dot frey at gmx dot de


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42593


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]