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

POD stands for "Plain old data".  
Arithmetic types, and enumeration types, 
a pointers and pointer to members are all PODs.  Classes and unions can also
be POD's if they have no non-static data members that are of reference or
non-POD type, no user defined constructors, no user defined assignment
operators, no private or protected non-static data members, 
no virtual functions and no base classes.  Finally, a cv-qualified POD is 
still a POD, as is an array of PODs.

__std_ref 3.9p10 and 9p4 (Note that POD's are also aggregates, see 8.5.1).

__compat If the compiler does not support partial-specialization 
of class templates, then this template can not be used with function types.

Without some (as yet unspecified) help from the compiler, is_pod will 
never report that a class or struct is a POD; this is always safe, 
if possibly sub-optimal.  
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, 
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this 
trait "just works".  You may also test to see if the necessary __intrinsics are available 
by checking to see if the macro `BOOST_IS_POD` is defined.


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

__examples

[:`is_pod<int>` inherits from `__true_type`.]

[:`is_pod<char*>::type` is the type `__true_type`.]

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

[:`is_pod<MyClass>::value` is an integral constant 
expression that evaluates to /false/.]

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

[endsect]

