source: NonGTP/Boost/boost/type_traits/is_unsigned.hpp @ 857

Revision 857, 4.2 KB checked in by igarcia, 18 years ago (diff)
Line 
1
2//  (C) Copyright John Maddock 2005. 
3//  Use, modification and distribution are subject to the Boost Software License,
4//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5//  http://www.boost.org/LICENSE_1_0.txt).
6//
7//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
8
9
10#ifndef BOOST_TT_IS_UNSIGNED_HPP_INCLUDED
11#define BOOST_TT_IS_UNSIGNED_HPP_INCLUDED
12
13#include "boost/type_traits/is_integral.hpp"
14#include "boost/type_traits/is_enum.hpp"
15#include "boost/type_traits/detail/ice_or.hpp"
16
17// should be the last #include
18#include "boost/type_traits/detail/bool_trait_def.hpp"
19
20namespace boost {
21
22namespace detail{
23
24#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238)
25
26template <class T>
27struct is_ununsigned_helper
28{
29   BOOST_STATIC_CONSTANT(bool, value = (static_cast<T>(-1) > 0));
30};
31
32template <bool integral_type>
33struct is_ununsigned_select_helper
34{
35   template <class T>
36   struct rebind
37   {
38      typedef is_ununsigned_helper<T> type;
39   };
40};
41
42template <>
43struct is_ununsigned_select_helper<false>
44{
45   template <class T>
46   struct rebind
47   {
48      typedef false_type type;
49   };
50};
51
52template <class T>
53struct is_unsigned_imp
54{
55   typedef is_ununsigned_select_helper<
56      ::boost::type_traits::ice_or<
57         ::boost::is_integral<T>::value,
58         ::boost::is_enum<T>::value>::value
59   > selector;
60   typedef typename selector::template rebind<T> binder;
61   typedef typename binder::type type;
62   BOOST_STATIC_CONSTANT(bool, value = type::value);
63};
64
65#else
66
67template <class T> struct is_unsigned_imp : public false_type{};
68template <> struct is_unsigned_imp<unsigned char> : public true_type{};
69template <> struct is_unsigned_imp<const unsigned char> : public true_type{};
70template <> struct is_unsigned_imp<volatile unsigned char> : public true_type{};
71template <> struct is_unsigned_imp<const volatile unsigned char> : public true_type{};
72template <> struct is_unsigned_imp<unsigned short> : public true_type{};
73template <> struct is_unsigned_imp<const unsigned short> : public true_type{};
74template <> struct is_unsigned_imp<volatile unsigned short> : public true_type{};
75template <> struct is_unsigned_imp<const volatile unsigned short> : public true_type{};
76template <> struct is_unsigned_imp<unsigned int> : public true_type{};
77template <> struct is_unsigned_imp<const unsigned int> : public true_type{};
78template <> struct is_unsigned_imp<volatile unsigned int> : public true_type{};
79template <> struct is_unsigned_imp<const volatile unsigned int> : public true_type{};
80template <> struct is_unsigned_imp<unsigned long> : public true_type{};
81template <> struct is_unsigned_imp<const unsigned long> : public true_type{};
82template <> struct is_unsigned_imp<volatile unsigned long> : public true_type{};
83template <> struct is_unsigned_imp<const volatile unsigned long> : public true_type{};
84#ifdef BOOST_HAS_LONG_LONG
85template <> struct is_unsigned_imp<unsigned long long> : public true_type{};
86template <> struct is_unsigned_imp<const unsigned long long> : public true_type{};
87template <> struct is_unsigned_imp<volatile unsigned long long> : public true_type{};
88template <> struct is_unsigned_imp<const volatile unsigned long long> : public true_type{};
89#endif
90#if defined(CHAR_MIN) && (CHAR_MIN == 0)
91template <> struct is_unsigned_imp<char> : public true_type{};
92template <> struct is_unsigned_imp<const char> : public true_type{};
93template <> struct is_unsigned_imp<volatile char> : public true_type{};
94template <> struct is_unsigned_imp<const volatile char> : public true_type{};
95#endif
96#if defined(WCHAR_MIN) && (WCHAR_MIN == 0)
97template <> struct is_unsigned_imp<wchar_t> : public true_type{};
98template <> struct is_unsigned_imp<const wchar_t> : public true_type{};
99template <> struct is_unsigned_imp<volatile wchar_t> : public true_type{};
100template <> struct is_unsigned_imp<const volatile wchar_t> : public true_type{};
101#endif
102
103#endif
104
105
106}
107
108BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,::boost::detail::is_unsigned_imp<T>::value)
109
110} // namespace boost
111
112#include "boost/type_traits/detail/bool_trait_undef.hpp"
113
114#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
Note: See TracBrowser for help on using the repository browser.