::boost::is_compound<T>::value
Evaluates to true only if T is a compound type. That is an array, function, pointer, reference, enumerator, union, class or member function type.

3.9.2


 
 

Based on this, I thought I could implement is_member_function_pointer with is_member_pointer && is_compound, but as it turns out is_compound is implemented thus:

template <typename T> struct is_compound
{
   BOOST_STATIC_CONSTANT(bool, value =
      (::boost::type_traits::ice_or<
         ::boost::is_array<T>::value,
         ::boost::is_pointer<T>::value,
         ::boost::is_reference<T>::value,
         ::boost::is_class<T>::value,
         ::boost::is_union<T>::value,
         ::boost::is_enum<T>::value,
         ::boost::is_member_pointer<T>::value
      >::value));
};

Also, based on this thread: http://groups.yahoo.com/group/boost/message/21331, it seems to me that we ought to clearly distinguish member functions from member function pointers.

===================================================
  David Abrahams, C++ library designer for hire
 resume:
http://users.rcn.com/abrahams/resume.html

 
        C++ Booster (http://www.boost.org)
          email:
david.abrahams@rcn.com
===================================================