13 template <
typename U>
struct UnConst<const U>
19 enum { IsReference = 0};
20 typedef U ReferencedType;
24 enum { IsReference = 1};
25 typedef U ReferencedType;
29 enum { IsPointer = 0};
30 typedef U PointeeType;
34 enum { IsPointer = 1};
35 typedef U PointeeType;
39 enum { IsFunctionPointer = 0};
44 enum { IsFunctionPointer = 1};
48 template <
typename U,
typename V1>
51 enum { IsFunctionPointer = 1};
56 template <
typename U,
typename V1,
typename V2>
59 enum { IsFunctionPointer = 1};
65 template <
typename U,
typename V1,
typename V2,
69 enum { IsFunctionPointer = 1};
76 template <
typename U,
typename V1,
typename V2,
77 typename V3,
typename V4>
80 enum { IsFunctionPointer = 1};
88 template <
typename U,
typename V1,
typename V2,
89 typename V3,
typename V4,
93 enum { IsFunctionPointer = 1};
102 template <
typename U,
typename V1,
typename V2,
103 typename V3,
typename V4,
104 typename V5,
typename V6>
107 enum { IsFunctionPointer = 1};
109 typedef U ReturnType;
119 enum { IsPointerToMember = 0};
121 template <
typename U,
typename V>
124 enum { IsPointerToMember = 1};
126 typedef U ReturnType;
128 template <
typename U,
typename V>
131 enum { IsPointerToMember = 1};
133 typedef U ReturnType;
135 template <
typename U,
typename V,
typename W1>
138 enum { IsPointerToMember = 1};
140 typedef U ReturnType;
143 template <
typename U,
typename V,
typename W1>
146 enum { IsPointerToMember = 1};
148 typedef U ReturnType;
151 template <
typename U,
typename V,
typename W1,
typename W2>
154 enum { IsPointerToMember = 1};
156 typedef U ReturnType;
160 template <
typename U,
typename V,
typename W1,
typename W2>
163 enum { IsPointerToMember = 1};
165 typedef U ReturnType;
169 template <
typename U,
typename V,
170 typename W1,
typename W2,
174 enum { IsPointerToMember = 1};
176 typedef U ReturnType;
181 template <
typename U,
typename V,
182 typename W1,
typename W2,
186 enum { IsPointerToMember = 1};
188 typedef U ReturnType;
193 template <
typename U,
typename V,
194 typename W1,
typename W2,
195 typename W3,
typename W4>
198 enum { IsPointerToMember = 1};
200 typedef U ReturnType;
206 template <
typename U,
typename V,
207 typename W1,
typename W2,
208 typename W3,
typename W4>
211 enum { IsPointerToMember = 1};
213 typedef U ReturnType;
219 template <
typename U,
typename V,
220 typename W1,
typename W2,
221 typename W3,
typename W4,
225 enum { IsPointerToMember = 1};
227 typedef U ReturnType;
234 template <
typename U,
typename V,
235 typename W1,
typename W2,
236 typename W3,
typename W4,
240 enum { IsPointerToMember = 1};
242 typedef U ReturnType;
249 template <
typename U,
typename V,
250 typename W1,
typename W2,
251 typename W3,
typename W4,
252 typename W5,
typename W6>
255 enum { IsPointerToMember = 1};
257 typedef U ReturnType;
265 template <
typename U,
typename V,
266 typename W1,
typename W2,
267 typename W3,
typename W4,
268 typename W5,
typename W6>
271 enum { IsPointerToMember = 1};
273 typedef U ReturnType;
283 typedef typename UnConst<T>::Result NonConstType;
284 typedef typename ReferenceTraits<T>::ReferencedType ReferencedType;
285 typedef typename PointerTraits<T>::PointeeType PointeeType;
287 enum { IsPointer = PointerTraits<T>::IsPointer};
288 enum { IsReference = ReferenceTraits<T>::IsReference};
289 enum { IsFunctionPointer = FunctionPtrTraits<T>::IsFunctionPointer};
290 typedef PtrToMemberTraits<T> PointerToMemberTraits;
291 typedef FunctionPtrTraits<T> FunctionPointerTraits;