16 #ifndef STK_UTIL_UTIL_TypeUtil_hpp 17 #define STK_UTIL_UTIL_TypeUtil_hpp 28 template<
typename T>
struct IsFundamentalType ;
30 template<>
struct IsFundamentalType< char> {
enum { value =
true }; };
31 template<>
struct IsFundamentalType<unsigned char> {
enum { value =
true }; };
32 template<>
struct IsFundamentalType<signed char> {
enum { value =
true }; };
34 template<>
struct IsFundamentalType<short> {
enum { value =
true }; };
35 template<>
struct IsFundamentalType<int> {
enum { value =
true }; };
36 template<>
struct IsFundamentalType<long> {
enum { value =
true }; };
38 template<>
struct IsFundamentalType<unsigned short> {
enum { value =
true }; };
39 template<>
struct IsFundamentalType<unsigned int> {
enum { value =
true }; };
40 template<>
struct IsFundamentalType<unsigned long> {
enum { value =
true }; };
42 template<>
struct IsFundamentalType<float> {
enum { value =
true }; };
43 template<>
struct IsFundamentalType<double> {
enum { value =
true }; };
45 template<
typename T>
struct IsFundamentalType {
enum { value =
false }; };
53 template <
class U>
struct Traits
55 enum {is_pointer =
false};
56 enum {is_reference =
false};
60 template <
class U>
struct Traits<U*>
62 enum {is_pointer =
true};
63 enum {is_reference =
false};
67 template <
class U>
struct Traits<U&>
69 enum {is_pointer =
false};
70 enum {is_reference =
true};
74 template <
class U>
struct ConstTraits
76 enum {is_const =
false};
80 template <
class U>
struct ConstTraits<const U>
82 enum {is_const =
true};
87 enum {isPointer = Traits<T>::is_pointer};
88 enum {isReference = Traits<T>::is_reference};
89 enum {isConst = ConstTraits<T>::is_const};
90 typedef typename Traits<T>::Type BaseType;
95 #endif // STK_UTIL_UTIL_TypeUtil_hpp