00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef INSTIGATE_GENERIC_UTILITIES
00011 #define INSTIGATE_GENERIC_UTILITIES
00012
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 namespace instigate {
00036
00037 namespace generic {
00038 template <typename T>
00039 class remove_reference;
00040
00041 template <typename T>
00042 class remove_reference<T&>;
00043
00044 template <typename T>
00045 class remove_const;
00046
00047 template <typename T>
00048 class remove_const<const T>;
00049
00050 template <typename T>
00051 class add_const_reference;
00052
00053 }
00054
00055 }
00056
00061 template <typename T>
00062 class instigate::generic::remove_reference
00063 {
00064 public:
00065 typedef T type;
00066
00067 };
00068
00070
00071 template <typename T>
00072 class instigate::generic::remove_reference<T&>
00073 {
00074 public:
00075 typedef T type;
00076 };
00077
00088 template <typename T>
00089 class instigate::generic::remove_const
00090 {
00091 public:
00092 typedef T type;
00093 };
00094
00096
00097 template <typename T>
00098 class instigate::generic::remove_const<const T>
00099 {
00100 public:
00101 typedef T type;
00102 };
00103
00108 template <typename T>
00109 class instigate::generic::add_const_reference
00110 {
00111 public:
00112 typedef const T& type;
00113
00114 };
00115
00116
00117
00118 #endif // INSTIGATE_FRAMEWORK_GENERIC_UTILITIES
00119