curfil  ..
 All Classes Functions Variables Typedefs Friends Groups Pages
meta_programming.hpp
1 #ifndef __CUV_META_PROGRAMMING_HPP__
2 #define __CUV_META_PROGRAMMING_HPP__
3 
4 namespace cuv {
5 
11 
12 struct FalseType {
13  enum {
14  value = false
15  };
16 };
18 struct TrueType {
19  enum {
20  value = true
21  };
22 };
23 
27 template<typename T1, typename T2>
28 struct IsSame
29 {
31  typedef FalseType Result;
32 };
33 
37 template<typename T>
38 struct IsSame<T, T>
39 {
41  typedef TrueType Result;
42 };
43 
47 template<typename T1, typename T2>
49 {
51  typedef TrueType Result;
52 };
53 
57 template<typename T>
58 struct IsDifferent<T, T>
59 {
61  typedef FalseType Result;
62 };
63 
67 template<typename T>
68 struct unconst {
70  typedef T type;
71 };
72 
76 template<typename T>
77 struct unconst<const T> {
79  typedef T type;
80 };
81 
85 template<bool Condition, class Then, class Else>
86 struct If {
88  typedef Then result;
89 };
93 template<class Then, class Else>
94 struct If<false, Then, Else> {
96  typedef Else result;
97 };
98 
102 template<bool B, class T = void>
103 struct EnableIfC {
104  typedef T type;
105 };
106 
108 template<class T>
109 struct EnableIfC<false, T> {
110 };
111 
113 template<class Cond, class T = void>
114 struct EnableIf: public EnableIfC<Cond::value, T> {
115 };
116 
118 template<class Cond, class T = void>
119 struct DisableIf: public EnableIfC<!Cond::value, T> {
120 };
121 
125 }
126 
127 #endif