[/ 
  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_enum is_enum]
   template <class T>
   struct is_enum : public __tof {};
  
__inherit If T is a (possibly cv-qualified) enum type then inherits from __true_type, 
otherwise inherits from __false_type.

__std_ref 3.9.2 and 7.2.

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

__compat Requires a correctly functioning __is_convertible template;
 this means that is_enum is currently broken under Borland C++ Builder 5, 
 and for the Metrowerks compiler prior to version 8, other compilers 
 should handle this template just fine.

__examples

[:Given: `enum my_enum { one, two };` ]

[:`is_enum<my_enum>` inherits from `__true_type`.]

[:`is_enum<my_enum const>::type` is the type `__true_type`.]

[:`is_enum<my_enum>::value` is an integral constant 
expression that evaluates to /true/.]

[:`is_enum<my_enum&>::value` is an integral constant 
expression that evaluates to /false/.]

[:`is_enum<my_enum*>::value` is an integral constant 
expression that evaluates to /false/.]

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

[endsect]

