CUV  0.9.201304091348
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
meta_programming.hpp
1 #ifndef __META_PROGRAMMING_HPP__
2 #define __META_PROGRAMMING_HPP__
3 namespace cuv{
4 
10 
11 struct FalseType { enum { value = false }; };
13 struct TrueType { enum { value = true }; };
14 
15 
19 template <typename T1, typename T2>
20 struct IsSame
21 {
23  typedef FalseType Result;
24 };
25 
26 
30 template <typename T>
31 struct IsSame<T,T>
32 {
34  typedef TrueType Result;
35 };
36 
40 template <typename T1, typename T2>
42 {
44  typedef TrueType Result;
45 };
46 
47 
51 template <typename T>
52 struct IsDifferent<T,T>
53 {
55  typedef FalseType Result;
56 };
57 
61 template <typename T>
62 struct unconst{
64  typedef T type;
65 };
66 
70 template <typename T>
71 struct unconst<const T>{
73  typedef T type;
74 };
75 
79 template <bool Condition, class Then, class Else>
80 struct If{
82  typedef Then result;
83 };
87 template<class Then, class Else>
88 struct If<false,Then,Else>{
90  typedef Else result;
91 };
92 
96 template <bool B, class T = void>
97 struct EnableIfC {
98  typedef T type;
99 };
100 
102 template <class T>
103 struct EnableIfC<false, T> {};
104 
106 template <class Cond, class T = void>
107 struct EnableIf : public EnableIfC<Cond::value, T> {};
108 
110 template <class Cond, class T = void>
111 struct DisableIf : public EnableIfC<!Cond::value, T> {};
112 
116 };
117 #endif /* __META_PROGRAMMING_HPP__ */