function_base.hpp:

function_template.hpp:
  - Revert to older implementation of has_empty_function (Metrowerks doesn't
    handle is_base_and_derived correctly)


[SVN r13854]
This commit is contained in:
Douglas Gregor
2002-05-14 14:18:36 +00:00
parent d1f21800ac
commit 4d635501ab
2 changed files with 7 additions and 21 deletions

View File

@ -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<typename FunctionObj>
inline bool has_empty_target(const FunctionObj&, truth<false>)
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<typename FunctionObj>
inline bool has_empty_target(const FunctionObj& f, truth<true>)
inline bool has_empty_target(...)
{
return f.empty();
return false;
}
} // end namespace function
} // end namespace detail

View File

@ -425,11 +425,7 @@ namespace boost {
template<typename FunctionObj>
void assign_to(FunctionObj f, detail::function::function_obj_tag)
{
typedef detail::function::truth<
boost::is_base_and_derived<function_base, FunctionObj>::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<FunctionObj>& f,
detail::function::function_obj_ref_tag)
{
typedef detail::function::truth<
boost::is_base_and_derived<function_base, FunctionObj>::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,