diff --git a/doc/tutorial.html b/doc/tutorial.html index fc1203c..17c5f55 100644 --- a/doc/tutorial.html +++ b/doc/tutorial.html @@ -96,7 +96,7 @@ object. This is often referred to as "argument binding", and is beyond the scope f(5); // Call x.foo(5) -
  • Boost.Lambda. This library provides a powerful composition mechanism to construct function objects that uses very natural C++ syntax. Lambda requires a compiler that is reasonably conformant to the C++ standard.
  • +
  • The Boost.Lambda library. This library provides a powerful composition mechanism to construct function objects that uses very natural C++ syntax. Lambda requires a compiler that is reasonably conformant to the C++ standard.
  • References to Functions

    @@ -199,7 +199,7 @@ boost::function2<float, int, int, SynchronizedPolicy, SynchronizedMixin> f
    Douglas Gregor
    -Last modified: Mon May 13 08:36:01 EDT 2002 +Last modified: Wed May 15 22:20:19 EDT 2002 diff --git a/include/boost/function/function_base.hpp b/include/boost/function/function_base.hpp index 8531ea1..70b4eef 100644 --- a/include/boost/function/function_base.hpp +++ b/include/boost/function/function_base.hpp @@ -307,13 +307,13 @@ namespace boost { public: // should be protected, but GCC 2.95.3 will fail to allow access detail::function::any_pointer (*manager)( detail::function::any_pointer, + detail::function::functor_manager_operation_type); + detail::function::any_pointer functor; + #if (defined __SUNPRO_CC) && (__SUNPRO_CC <= 0x530) && !(defined BOOST_NO_COMPILER_CONFIG) // Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it operator bool () const { return !this->empty(); } #else - detail::function::functor_manager_operation_type); - detail::function::any_pointer functor; - private: struct dummy { void nonnull() {}; @@ -324,10 +324,10 @@ namespace boost { public: operator safe_bool () const { return (this->empty())? 0 : &dummy::nonnull; } -#endif safe_bool operator!() const { return (this->empty())? &dummy::nonnull : 0; } +#endif }; /* Poison comparison between Boost.Function objects (because it is @@ -341,20 +341,14 @@ namespace boost { namespace detail { namespace function { - // The result is not a Boost.Function object, so we assume that this - // target is not empty - template - inline bool has_empty_target(const FunctionObj&, truth) + inline bool has_empty_target(const function_base* f) { - return false; + return f->empty(); } - // The result is a Boost.Function object, so query whether it is empty - // or not - template - inline bool has_empty_target(const FunctionObj& f, truth) - { - return f.empty(); + inline bool has_empty_target(...) + { + return false; } } // end namespace function } // end namespace detail diff --git a/include/boost/function/function_template.hpp b/include/boost/function/function_template.hpp index a5980f6..0613cb4 100644 --- a/include/boost/function/function_template.hpp +++ b/include/boost/function/function_template.hpp @@ -425,11 +425,7 @@ namespace boost { template void assign_to(FunctionObj f, detail::function::function_obj_tag) { - typedef detail::function::truth< - boost::is_base_and_derived::value> - is_boost_function; - - if (!detail::function::has_empty_target(f, is_boost_function())) { + if (!detail::function::has_empty_target(addressof(f))) { typedef typename detail::function::BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER< FunctionObj, @@ -463,11 +459,7 @@ namespace boost { void assign_to(const reference_wrapper& f, detail::function::function_obj_ref_tag) { - typedef detail::function::truth< - boost::is_base_and_derived::value> - is_boost_function; - - if (!detail::function::has_empty_target(f.get(), is_boost_function())) { + if (!detail::function::has_empty_target(f.get_pointer())) { typedef typename detail::function::BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER< FunctionObj,