/* boost integer_traits.hpp header file * * Copyright Jens Maurer 2000 * Permission to use, copy, modify, sell, and distribute this software * is hereby granted without free provided that the above copyright notice * appears in all copies and that both that copyright notice and this * permission notice appear in supporting documentation, * * Jens Maurer makes no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * $Id$ * * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers */ #ifndef BOOST_INTEGER_TRAITS_HPP #define BOOST_INTEGER_TRAITS_HPP #include #include // This is an implementation detail and not part of the interface #include namespace boost { template class integer_traits : public std::numeric_limits { public: #ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION static const bool is_integral = false; #else enum { is_integral = false }; #endif }; namespace detail { template class integer_traits_base { public: #ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION static const bool is_integral = true; static const T const_min = min_val; static const T const_max = max_val; #else enum { is_integral = true, const_min = min_val, const_max = max_val }; #endif }; } // namespace detail template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; // What about wchar_t ? template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; #ifdef ULLONG_MAX template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; #elif defined(ULONG_LONG_MAX) template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; #endif } // namespace boost #endif /* BOOST_INTEGER_TRAITS_HPP */