[/ 
  Copyright 2007 John Maddock.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]

[section:is_member_object_pointer is_member_object_pointer]
   template <class T>
   struct is_member_object_pointer : public __tof {};
  
__inherit If T is a (possibly cv-qualified) pointer to a member object (a data member)
then inherits from __true_type, 
otherwise inherits from __false_type.

__std_ref 3.9.2 and 8.3.3.

__header ` #include <boost/type_traits/is_member_object_pointer.hpp>` or ` #include <boost/type_traits.hpp>`

__examples

[:`is_member_object_pointer<int (MyClass::*)>` inherits from `__true_type`.]

[:`is_member_object_pointer<double (MyClass::*)>::type` is the type `__true_type`.]

[:`is_member_object_pointer<const int (MyClass::*)>::value` is an integral constant 
expression that evaluates to /true/.]

[:`is_member_object_pointer<int (MyClass::*)(void)>::value` is an integral constant 
expression that evaluates to /false/: the argument in this case is a pointer to
a member function and not a member object, see __is_member_function_pointer 
and __is_member_pointer]

[:`is_member_object_pointer<T>::value_type` is the type `bool`.]

[endsect]

