| [/ |
| 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 2005) only MWCW 9 and Visual C++ 8 have the |
| necessary compiler-__intrinsics. |
| |
| __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] |
| |