Hi,
if I do :
std::function< void(message_direction::direction, utility::size64_t)> f = &COCom::progress; //or //progress_handler f = &COCom::progress; requete.set_progress_handler(f);
in one method of COCom, I have the following compilation error :
1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(506): error C2664: 'void std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>::_Set(std::_Func_base<_Ret,web::http::message_direction::direction,utility::size64_t>
*)' : cannot convert argument 1 from '_Myimpl *' to 'std::_Func_base<_Ret,web::http::message_direction::direction,utility::size64_t> *'
1> with
1> [
1> _Ret=void
1> ]
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(442) : see reference to function template instantiation 'void std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>::_Do_alloc<_Myimpl,_Fret(__cdecl
COCom::* const &)(web::http::message_direction::direction,utility::size64_t),_Alloc>(_Fty,_Alloc)' being compiled
1> with
1> [
1> _Ret=void
1> , _Fret=void
1> , _Alloc=std::allocator<std::_Func_class<void,web::http::message_direction::direction,utility::size64_t>>
1> , _Fty=void (__cdecl COCom::* const &)(web::http::message_direction::direction,utility::size64_t)
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(442) : see reference to function template instantiation 'void std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>::_Do_alloc<_Myimpl,_Fret(__cdecl
COCom::* const &)(web::http::message_direction::direction,utility::size64_t),_Alloc>(_Fty,_Alloc)' being compiled
1> with
1> [
1> _Ret=void
1> , _Fret=void
1> , _Alloc=std::allocator<std::_Func_class<void,web::http::message_direction::direction,utility::size64_t>>
1> , _Fty=void (__cdecl COCom::* const &)(web::http::message_direction::direction,utility::size64_t)
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(442) : see reference to function template instantiation 'void std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>::_Reset_alloc<_Fret,COCom,web::http::message_direction::direction,utility::size64_t,std::allocator<std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>>>(_Fret
(__cdecl COCom::* const )(web::http::message_direction::direction,utility::size64_t),_Alloc)' being compiled
1> with
1> [
1> _Ret=void
1> , _Fret=void
1> , _Alloc=std::allocator<std::_Func_class<void,web::http::message_direction::direction,utility::size64_t>>
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(442) : see reference to function template instantiation 'void std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>::_Reset_alloc<_Fret,COCom,web::http::message_direction::direction,utility::size64_t,std::allocator<std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>>>(_Fret
(__cdecl COCom::* const )(web::http::message_direction::direction,utility::size64_t),_Alloc)' being compiled
1> with
1> [
1> _Ret=void
1> , _Fret=void
1> , _Alloc=std::allocator<std::_Func_class<void,web::http::message_direction::direction,utility::size64_t>>
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(671) : see reference to function template instantiation 'void std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>::_Reset<void,COCom,web::http::message_direction::direction,utility::size64_t>(_Fret
(__cdecl COCom::* const )(web::http::message_direction::direction,utility::size64_t))' being compiled
1> with
1> [
1> _Ret=void
1> , _Fret=void
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(671) : see reference to function template instantiation 'void std::_Func_class<_Ret,web::http::message_direction::direction,utility::size64_t>::_Reset<void,COCom,web::http::message_direction::direction,utility::size64_t>(_Fret
(__cdecl COCom::* const )(web::http::message_direction::direction,utility::size64_t))' being compiled
1> with
1> [
1> _Ret=void
1> , _Fret=void
1> ]
1> OCom.cpp(486) : see reference to function template instantiation 'std::function<void (web::http::message_direction::direction,utility::size64_t)>::function<void(__cdecl COCom::* )(web::http::message_direction::direction,utility::size64_t)>(_Fx&&)' being compiled
1> with
1> [
1> _Fx=void (__cdecl COCom::* )(web::http::message_direction::direction,utility::size64_t)
1> ]
1> OCom.cpp(486) : see reference to function template instantiation 'std::function<void (web::http::message_direction::direction,utility::size64_t)>::function<void(__cdecl COCom::* )(web::http::message_direction::direction,utility::size64_t)>(_Fx&&)' being compiled
1> with
1> [
1> _Fx=void (__cdecl COCom::* )(web::http::message_direction::direction,utility::size64_t)
1> ]
with visual studio 2013 update 5.
we have : typedef std::function< void(message_direction::direction, utility::size64_t)> progress_handler;
in the rest sdk, and void set_progress_handler(const progress_handler &handler) is a method of http_request.
the signature of progress is void COCom::progress(direction dir, utility::size64_t s)...
I have read the following :
// store a call to a member function std::function<void(const Foo&, int)> f_add_display =&Foo::print_add; Foo foo(314159); f_add_display(foo, 1);
so I don't understand why I cannot compile...
has someone an idea ?
regards.