> Gesendet: Mittwoch, 01. Februar 2017 um 17:04 Uhr
> Von: "Peter Dimov" <
li...@pdimov.com>
> An:
bo...@lists.boost.org
> Betreff: Re: [boost] [factory][bind] C2664 with MSVC 2015 & 1.63
Hi Peter,
yes, I managed to that by now:
#include <boost/function.hpp>
#include <boost/functional/factory.hpp>
#include <boost/bind.hpp>
struct Widget {};
struct Panel: Widget{Panel(Widget* q){}};
using make_interface = boost::function<Widget*(Widget*)>;
void registerType(const make_interface &make)
{
//factory.register_factory(type_id,make);
}
int main(int argc, char *argv[])
{
auto f = boost::factory<Panel*>();
registerType( boost::bind(f,_1));//< this line is the cause, factory it self compiles
}
Error: boost\bind\bind.hpp:249: error: C2664: 'Panel *boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>::operator ()(void) const': cannot convert argument 1 from 'Widget *' to 'Widget *&'
thanks,
Jens Weller
Adding the full error message from compiler output here:
D:\cpp\libraries\boost_1_63_0\boost/bind/bind.hpp(249): error C2664: 'Panel *boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>::operator ()(void) const': cannot convert argument 1 from 'Widget *' to 'Widget *&'
D:\cpp\libraries\boost_1_63_0\boost/bind/bind.hpp(1306): note: see reference to function template instantiation 'R *boost::_bi::list1<boost::arg<1>>::operator ()<Panel*,F,boost::_bi::rrlist1<A1>>(boost::_bi::type<Panel *>,F &,A &,long)' being compiled
with
[
R=Panel *,
F=boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,
A1=Widget *,
A=boost::_bi::rrlist1<Widget *>
]
D:\cpp\libraries\boost_1_63_0\boost/bind/bind.hpp(1306): note: see reference to function template instantiation 'R *boost::_bi::list1<boost::arg<1>>::operator ()<Panel*,F,boost::_bi::rrlist1<A1>>(boost::_bi::type<Panel *>,F &,A &,long)' being compiled
with
[
R=Panel *,
F=boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,
A1=Widget *,
A=boost::_bi::rrlist1<Widget *>
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(138): note: see reference to function template instantiation 'Panel *boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>::operator ()<T>(A1 &&)' being compiled
with
[
T=Widget *,
A1=Widget *
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(138): note: see reference to function template instantiation 'Panel *boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>::operator ()<T>(A1 &&)' being compiled
with
[
T=Widget *,
A1=Widget *
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(132): note: while compiling class template member function 'Widget *boost::detail::function::function_obj_invoker1<FunctionObj,R,T0>::invoke(boost::detail::function::function_buffer &,T0)'
with
[
FunctionObj=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>,
R=Widget *,
T0=Widget *
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(936): note: see reference to function template instantiation 'Widget *boost::detail::function::function_obj_invoker1<FunctionObj,R,T0>::invoke(boost::detail::function::function_buffer &,T0)' being compiled
with
[
FunctionObj=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>,
R=Widget *,
T0=Widget *
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(936): note: see reference to class template instantiation 'boost::detail::function::function_obj_invoker1<FunctionObj,R,T0>' being compiled
with
[
FunctionObj=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>,
R=Widget *,
T0=Widget *
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(727): note: see reference to function template instantiation 'void boost::function1<R,T0>::assign_to<Functor>(Functor)' being compiled
with
[
R=Widget *,
T0=Widget *,
Functor=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(727): note: see reference to function template instantiation 'void boost::function1<R,T0>::assign_to<Functor>(Functor)' being compiled
with
[
R=Widget *,
T0=Widget *,
Functor=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(1073): note: see reference to function template instantiation 'boost::function1<R,T0>::function1<Functor>(Functor,int)' being compiled
with
[
R=Widget *,
T0=Widget *,
Functor=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>
]
D:\cpp\libraries\boost_1_63_0\boost/function/function_template.hpp(1072): note: see reference to function template instantiation 'boost::function1<R,T0>::function1<Functor>(Functor,int)' being compiled
with
[
R=Widget *,
T0=Widget *,
Functor=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>
]
..\msvctestbed\main.cpp(19): note: see reference to function template instantiation 'boost::function<Widget *(Widget *)>::function<boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>>(Functor,int)' being compiled
with
[
Functor=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>
]
..\msvctestbed\main.cpp(19): note: see reference to function template instantiation 'boost::function<Widget *(Widget *)>::function<boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>>(Functor,int)' being compiled
with
[
Functor=boost::_bi::bind_t<boost::_bi::unspecified,boost::factory<Panel *,void,boost::factory_alloc_for_pointee_and_deleter>,boost::_bi::list1<boost::arg<1>>>
]