[/ 
  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_base_of is_base_of]
   template <class Base, class Derived>
   struct is_base_of : public __tof {};
  
__inherit If Base is base class of type Derived or if both types are the same
then inherits from __true_type, 
otherwise inherits from __false_type.

This template will detect non-public base classes, and ambiguous base classes.

Note that `is_base_of<X,X>` will always inherit from __true_type.  [*This is the
case even if `X` is not a class type].  This is a change in behaviour 
from Boost-1.33 in order to track the Technical Report on C++ Library Extensions.

Types `Base` and `Derived` must not be incomplete types.

__std_ref 10.

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

__compat If the compiler does not support partial-specialization of class templates, 
then this template can not be used with function types.  There are some older compilers
which will produce compiler errors if `Base` is a private base class of `Derived`, or if
`Base` is an ambiguous base of `Derived`.  These compilers include Borland C++, older 
versions of Sun Forte C++, Digital Mars C++, and older versions of EDG based compilers.

__examples

[:Given: ` class Base{}; class Derived : public Base{};` ]

[:`is_base_of<Base, Derived>` inherits from `__true_type`.]

[:`is_base_of<Base, Derived>::type` is the type `__true_type`.]

[:`is_base_of<Base, Derived>::value` is an integral constant 
expression that evaluates to /true/.]

[:`is_base_of<Base, Base>::value` is an integral constant 
expression that evaluates to /true/: a class is regarded as it's own base.]

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

[endsect]


