#ifndef _PODTYPES_H_
#define _PODTYPES_H_

template<class T> struct isPOD {enum {is=false};};
template<> struct isPOD<bool> {enum {is=true};};

template<> struct isPOD<char> {enum {is=true};};

template<> struct isPOD<signed char> {enum {is=true};};
template<> struct isPOD<short int> {enum {is=true};};
template<> struct isPOD<int> {enum {is=true};};
template<> struct isPOD<long int> {enum {is=true};};
template<> struct isPOD<__int64> {enum {is=true};};

template<> struct isPOD<unsigned char> {enum {is=true};};
template<> struct isPOD<unsigned short int> {enum {is=true};};
template<> struct isPOD<unsigned int> {enum {is=true};};
template<> struct isPOD<unsigned long int> {enum {is=true};};
template<> struct isPOD<unsigned __int64> {enum {is=true};};

template<> struct isPOD<float> {enum {is=true};};
template<> struct isPOD<double> {enum {is=true};};
template<> struct isPOD<long double> {enum {is=true};};

#if defined(__INTEL_COMPILER) || defined(__GNUC__) || (_MSC_VER>=1300)
template<> struct isPOD<wchar_t> {enum {is=true};};
template<class Tp> struct isPOD<Tp*> {enum {is=true};};
#endif

template<class A> struct allocator_traits {enum {is_static=false};};

#endif
