[function] Problem copying when constructed with a functor

This simple code: #include <boost/detail/lightweight_test.hpp> #include <boost/function.hpp> struct p_functor_class_int { p_functor_class_int() : data(50) { } int operator()() const { return data; } void operator()(int d) { data = d; } int data; }; int main() { boost::function<int ()> bfun(p_functor_class_int()); boost::function<int ()> bfun2(bfun); return boost::report_errors(); } gives compiler errors. On gcc-4.6 I get: "In file included from C:\Programming\VersionControl\boost/boost/function/detail/maybe_include.hpp:13:0, from C:\Programming\VersionControl\boost/boost/function/detail/function_iterate.hpp:14, from C:\Programming\VersionControl\boost/boost/preprocessor/iteration/detail/iter/forward1.hpp:47, from C:\Programming\VersionControl\boost/boost/function.hpp:64, from test_function_bug.cpp:2: C:\Programming\VersionControl\boost/boost/function/function_template.hpp: In static member function 'static R boost::detail::function::function_invoker0<FunctionPtr, R>::invoke(boost::detail::function::function_buffer&) [with FunctionPtr = boost::function<int()> (*)(p_functor_class_int (*)()), R = int]': C:\Programming\VersionControl\boost/boost/function/function_template.hpp:907:60: instantiated from 'void boost::function0<R>::assign_to(Functor) [with Functor = boost::function<int()> (*)(p_functor_class_int (*)()), R = int]' C:\Programming\VersionControl\boost/boost/function/function_template.hpp:722:7: instantiated from 'boost::function0<R>::function0(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::function<int()> (*)(p_functor_class_int (*)()), R = int, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]' C:\Programming\VersionControl\boost/boost/function/function_template.hpp:1042:16: instantiated from 'boost::function<R()>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::function<int()> (*)(p_functor_class_int (*)()), R = int, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]' test_function_bug.cpp:15:37: instantiated from here C:\Programming\VersionControl\boost/boost/function/function_template.hpp:95:39: error: too few arguments to function C:\Programming\VersionControl\boost/boost/function/function_template.hpp:96:9: warning: control reaches end of non-void function [-Wreturn-type] " I am sure I must be doing something wrong but I can not see it.

AMDG On 05/23/2011 05:31 PM, Edward Diener wrote:
This simple code:
#include <boost/detail/lightweight_test.hpp> #include <boost/function.hpp>
struct p_functor_class_int { p_functor_class_int() : data(50) { } int operator()() const { return data; } void operator()(int d) { data = d; } int data; };
int main() { boost::function<int ()> bfun(p_functor_class_int());
Q: What is bfun? A: A function that takes a p_functor_class_int and returns a boost::function<int()>.
boost::function<int ()> bfun2(bfun); return boost::report_errors(); }
In Christ, Steven Watanabe

AMDG On 05/23/2011 05:50 PM, Steven Watanabe wrote:
On 05/23/2011 05:31 PM, Edward Diener wrote:
boost::function<int ()> bfun(p_functor_class_int());
Q: What is bfun? A: A function that takes a p_functor_class_int and returns a boost::function<int()>.
Err, make that: A: A function that takes a p_functor_class_int(*)()... In Christ, Steven Watanabe

On 5/23/2011 8:52 PM, Steven Watanabe wrote:
AMDG
On 05/23/2011 05:50 PM, Steven Watanabe wrote:
On 05/23/2011 05:31 PM, Edward Diener wrote:
boost::function<int ()> bfun(p_functor_class_int());
Q: What is bfun? A: A function that takes a p_functor_class_int and returns a boost::function<int()>.
Err, make that: A: A function that takes a p_functor_class_int(*)()...
I do not follow. Why is p_functor_class_int() a type rather than an object ?

[Edward Diener]
I do not follow. Why is p_functor_class_int() a type rather than an object ?

On 5/23/2011 9:22 PM, Stephan T. Lavavej wrote:
[Edward Diener]
I do not follow. Why is p_functor_class_int() a type rather than an object ?
Thanks ! I am growing older and stupider by the day.
participants (3)
-
Edward Diener
-
Stephan T. Lavavej
-
Steven Watanabe