Program Listing for File fundamental_types.hpp
↰ Return to documentation for file (include/ecl/type_traits/fundamental_types.hpp
)
/*****************************************************************************
** Ifdefs
*****************************************************************************/
#ifndef ECL_TYPE_TRAITS_FUNDAMENTAL_TYPES_HPP_
#define ECL_TYPE_TRAITS_FUNDAMENTAL_TYPES_HPP_
/*****************************************************************************
** Includes
*****************************************************************************/
#include <limits>
#include <ecl/mpl/bool.hpp>
#include <ecl/config/ecl.hpp>
/*****************************************************************************
** Namespace
*****************************************************************************/
namespace ecl {
/*****************************************************************************
** Integers
*****************************************************************************/
template <typename T>
class is_integral : public False {};
template <>
class is_integral<char> : public True {};
template <>
class is_integral<unsigned char> : public True {};
template <>
class is_integral<short> : public True {};
template <>
class is_integral<unsigned short> : public True {};
template <>
class is_integral<int> : public True {};
template <>
class is_integral<unsigned int> : public True {};
template <>
class is_integral<long> : public True {};
template <>
class is_integral<unsigned long> : public True {};
template <>
class is_integral<long long> : public True {};
template <>
class is_integral<unsigned long long> : public True {};
/*****************************************************************************
** Unsigned Integers
*****************************************************************************/
template <typename T>
class is_unsigned : public False {};
template <>
class is_unsigned<unsigned char> : public True {};
template <>
class is_unsigned<unsigned short> : public True {};
template <>
class is_unsigned<unsigned int> : public True {};
template <>
class is_unsigned<unsigned long> : public True {};
template <>
class is_unsigned<unsigned long long> : public True {};
/*****************************************************************************
** Signed Integers
*****************************************************************************/
template <typename T>
class is_signed : public False {};
template <>
class is_signed<char> : public True {};
template <>
class is_signed<short> : public True {};
template <>
class is_signed<int> : public True {};
template <>
class is_signed<long> : public True {};
template <>
class is_signed<long long> : public True {};
/*****************************************************************************
** Floats
*****************************************************************************/
template <typename T>
class is_float : public False {};
template <>
class is_float<float> : public True {};
template <>
class is_float<double> : public True {};
template <>
class is_float<long double> : public True {};
/*****************************************************************************
** Bytes
*****************************************************************************/
template <typename T>
class is_signed_byte : public False {};
template <>
class is_signed_byte<signed char> : public True {};
template <>
class is_signed_byte<char> : public Bool<std::numeric_limits<char>::is_signed> {};
template <typename T>
class is_unsigned_byte : public False {};
template <>
class is_unsigned_byte<unsigned char> : public True {};
template <>
class is_unsigned_byte<char> : public Bool<!std::numeric_limits<char>::is_signed> {};
template <typename T>
class is_byte : public False {};
template <>
class is_byte<signed char> : public True {};
template <>
class is_byte<char> : public True {};
template <>
class is_byte<unsigned char> : public True {};
} // namespace ecl
#endif /* ECL_TYPE_TRAITS_FUNDAMENTAL_TYPES_HPP_ */