[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]

promote_traits.hxx VIGRA

1 /************************************************************************/
2 /* */
3 /* Copyright 1998-2008 by Ullrich Koethe */
4 /* */
5 /* This file is part of the VIGRA computer vision library. */
6 /* The VIGRA Website is */
7 /* http://hci.iwr.uni-heidelberg.de/vigra/ */
8 /* Please direct questions, bug reports, and contributions to */
9 /* ullrich.koethe@iwr.uni-heidelberg.de or */
10 /* vigra@informatik.uni-hamburg.de */
11 /* */
12 /* Permission is hereby granted, free of charge, to any person */
13 /* obtaining a copy of this software and associated documentation */
14 /* files (the "Software"), to deal in the Software without */
15 /* restriction, including without limitation the rights to use, */
16 /* copy, modify, merge, publish, distribute, sublicense, and/or */
17 /* sell copies of the Software, and to permit persons to whom the */
18 /* Software is furnished to do so, subject to the following */
19 /* conditions: */
20 /* */
21 /* The above copyright notice and this permission notice shall be */
22 /* included in all copies or substantial portions of the */
23 /* Software. */
24 /* */
25 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND */
26 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES */
27 /* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND */
28 /* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT */
29 /* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, */
30 /* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING */
31 /* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR */
32 /* OTHER DEALINGS IN THE SOFTWARE. */
33 /* */
34 /************************************************************************/
35 
36 
37 #ifndef VIGRA_PROMOTETRAITS_HXX
38 #define VIGRA_PROMOTETRAITS_HXX
39 
40 // this file was autogenerated from promote_traits.hxx.py - DO NOT EDIT
41 
42 template <>
43 struct PromoteTraits<bool, bool> : public detail::PromoteType<bool, bool>
44 {
45  typedef detail::PromoteType<bool, bool>::Promote Promote;
46  using detail::PromoteType<bool, bool>::toPromote;
47 };
48 
49 template <>
50 struct PromoteTraits<bool, signed char> : public detail::PromoteType<bool, signed char>
51 {
52  typedef detail::PromoteType<bool, signed char>::Promote Promote;
53  using detail::PromoteType<bool, signed char>::toPromote;
54 };
55 
56 template <>
57 struct PromoteTraits<bool, unsigned char> : public detail::PromoteType<bool, unsigned char>
58 {
59  typedef detail::PromoteType<bool, unsigned char>::Promote Promote;
60  using detail::PromoteType<bool, unsigned char>::toPromote;
61 };
62 
63 template <>
64 struct PromoteTraits<bool, short> : public detail::PromoteType<bool, short>
65 {
66  typedef detail::PromoteType<bool, short>::Promote Promote;
67  using detail::PromoteType<bool, short>::toPromote;
68 };
69 
70 template <>
71 struct PromoteTraits<bool, unsigned short> : public detail::PromoteType<bool, unsigned short>
72 {
73  typedef detail::PromoteType<bool, unsigned short>::Promote Promote;
74  using detail::PromoteType<bool, unsigned short>::toPromote;
75 };
76 
77 template <>
78 struct PromoteTraits<bool, int> : public detail::PromoteType<bool, int>
79 {
80  typedef detail::PromoteType<bool, int>::Promote Promote;
81  using detail::PromoteType<bool, int>::toPromote;
82 };
83 
84 template <>
85 struct PromoteTraits<bool, unsigned int> : public detail::PromoteType<bool, unsigned int>
86 {
87  typedef detail::PromoteType<bool, unsigned int>::Promote Promote;
88  using detail::PromoteType<bool, unsigned int>::toPromote;
89 };
90 
91 template <>
92 struct PromoteTraits<bool, long> : public detail::PromoteType<bool, long>
93 {
94  typedef detail::PromoteType<bool, long>::Promote Promote;
95  using detail::PromoteType<bool, long>::toPromote;
96 };
97 
98 template <>
99 struct PromoteTraits<bool, unsigned long> : public detail::PromoteType<bool, unsigned long>
100 {
101  typedef detail::PromoteType<bool, unsigned long>::Promote Promote;
102  using detail::PromoteType<bool, unsigned long>::toPromote;
103 };
104 
105 template <>
106 struct PromoteTraits<bool, float> : public detail::PromoteType<bool, float>
107 {
108  typedef detail::PromoteType<bool, float>::Promote Promote;
109  using detail::PromoteType<bool, float>::toPromote;
110 };
111 
112 template <>
113 struct PromoteTraits<bool, double> : public detail::PromoteType<bool, double>
114 {
115  typedef detail::PromoteType<bool, double>::Promote Promote;
116  using detail::PromoteType<bool, double>::toPromote;
117 };
118 
119 template <>
120 struct PromoteTraits<bool, long double> : public detail::PromoteType<bool, long double>
121 {
122  typedef detail::PromoteType<bool, long double>::Promote Promote;
123  using detail::PromoteType<bool, long double>::toPromote;
124 };
125 
126 #ifdef LLONG_MAX
127 template <>
128 struct PromoteTraits<bool, long long> : public detail::PromoteType<bool, long long>
129 {
130  typedef detail::PromoteType<bool, long long>::Promote Promote;
131  using detail::PromoteType<bool, long long>::toPromote;
132 };
133 #endif // LLONG_MAX
134 
135 #ifdef LLONG_MAX
136 template <>
137 struct PromoteTraits<bool, unsigned long long> : public detail::PromoteType<bool, unsigned long long>
138 {
139  typedef detail::PromoteType<bool, unsigned long long>::Promote Promote;
140  using detail::PromoteType<bool, unsigned long long>::toPromote;
141 };
142 #endif // LLONG_MAX
143 
144 template <>
145 struct PromoteTraits<signed char, signed char> : public detail::PromoteType<signed char, signed char>
146 {
147  typedef detail::PromoteType<signed char, signed char>::Promote Promote;
148  using detail::PromoteType<signed char, signed char>::toPromote;
149 };
150 
151 template <>
152 struct PromoteTraits<signed char, bool> : public detail::PromoteType<signed char, bool>
153 {
154  typedef detail::PromoteType<signed char, bool>::Promote Promote;
155  using detail::PromoteType<signed char, bool>::toPromote;
156 };
157 
158 template <>
159 struct PromoteTraits<signed char, unsigned char> : public detail::PromoteType<signed char, unsigned char>
160 {
161  typedef detail::PromoteType<signed char, unsigned char>::Promote Promote;
162  using detail::PromoteType<signed char, unsigned char>::toPromote;
163 };
164 
165 template <>
166 struct PromoteTraits<signed char, short> : public detail::PromoteType<signed char, short>
167 {
168  typedef detail::PromoteType<signed char, short>::Promote Promote;
169  using detail::PromoteType<signed char, short>::toPromote;
170 };
171 
172 template <>
173 struct PromoteTraits<signed char, unsigned short> : public detail::PromoteType<signed char, unsigned short>
174 {
175  typedef detail::PromoteType<signed char, unsigned short>::Promote Promote;
176  using detail::PromoteType<signed char, unsigned short>::toPromote;
177 };
178 
179 template <>
180 struct PromoteTraits<signed char, int> : public detail::PromoteType<signed char, int>
181 {
182  typedef detail::PromoteType<signed char, int>::Promote Promote;
183  using detail::PromoteType<signed char, int>::toPromote;
184 };
185 
186 template <>
187 struct PromoteTraits<signed char, unsigned int> : public detail::PromoteType<signed char, unsigned int>
188 {
189  typedef detail::PromoteType<signed char, unsigned int>::Promote Promote;
190  using detail::PromoteType<signed char, unsigned int>::toPromote;
191 };
192 
193 template <>
194 struct PromoteTraits<signed char, long> : public detail::PromoteType<signed char, long>
195 {
196  typedef detail::PromoteType<signed char, long>::Promote Promote;
197  using detail::PromoteType<signed char, long>::toPromote;
198 };
199 
200 template <>
201 struct PromoteTraits<signed char, unsigned long> : public detail::PromoteType<signed char, unsigned long>
202 {
203  typedef detail::PromoteType<signed char, unsigned long>::Promote Promote;
204  using detail::PromoteType<signed char, unsigned long>::toPromote;
205 };
206 
207 template <>
208 struct PromoteTraits<signed char, float> : public detail::PromoteType<signed char, float>
209 {
210  typedef detail::PromoteType<signed char, float>::Promote Promote;
211  using detail::PromoteType<signed char, float>::toPromote;
212 };
213 
214 template <>
215 struct PromoteTraits<signed char, double> : public detail::PromoteType<signed char, double>
216 {
217  typedef detail::PromoteType<signed char, double>::Promote Promote;
218  using detail::PromoteType<signed char, double>::toPromote;
219 };
220 
221 template <>
222 struct PromoteTraits<signed char, long double> : public detail::PromoteType<signed char, long double>
223 {
224  typedef detail::PromoteType<signed char, long double>::Promote Promote;
225  using detail::PromoteType<signed char, long double>::toPromote;
226 };
227 
228 #ifdef LLONG_MAX
229 template <>
230 struct PromoteTraits<signed char, long long> : public detail::PromoteType<signed char, long long>
231 {
232  typedef detail::PromoteType<signed char, long long>::Promote Promote;
233  using detail::PromoteType<signed char, long long>::toPromote;
234 };
235 #endif // LLONG_MAX
236 
237 #ifdef LLONG_MAX
238 template <>
239 struct PromoteTraits<signed char, unsigned long long> : public detail::PromoteType<signed char, unsigned long long>
240 {
241  typedef detail::PromoteType<signed char, unsigned long long>::Promote Promote;
242  using detail::PromoteType<signed char, unsigned long long>::toPromote;
243 };
244 #endif // LLONG_MAX
245 
246 template <>
247 struct PromoteTraits<unsigned char, unsigned char> : public detail::PromoteType<unsigned char, unsigned char>
248 {
249  typedef detail::PromoteType<unsigned char, unsigned char>::Promote Promote;
250  using detail::PromoteType<unsigned char, unsigned char>::toPromote;
251 };
252 
253 template <>
254 struct PromoteTraits<unsigned char, bool> : public detail::PromoteType<unsigned char, bool>
255 {
256  typedef detail::PromoteType<unsigned char, bool>::Promote Promote;
257  using detail::PromoteType<unsigned char, bool>::toPromote;
258 };
259 
260 template <>
261 struct PromoteTraits<unsigned char, signed char> : public detail::PromoteType<unsigned char, signed char>
262 {
263  typedef detail::PromoteType<unsigned char, signed char>::Promote Promote;
264  using detail::PromoteType<unsigned char, signed char>::toPromote;
265 };
266 
267 template <>
268 struct PromoteTraits<unsigned char, short> : public detail::PromoteType<unsigned char, short>
269 {
270  typedef detail::PromoteType<unsigned char, short>::Promote Promote;
271  using detail::PromoteType<unsigned char, short>::toPromote;
272 };
273 
274 template <>
275 struct PromoteTraits<unsigned char, unsigned short> : public detail::PromoteType<unsigned char, unsigned short>
276 {
277  typedef detail::PromoteType<unsigned char, unsigned short>::Promote Promote;
278  using detail::PromoteType<unsigned char, unsigned short>::toPromote;
279 };
280 
281 template <>
282 struct PromoteTraits<unsigned char, int> : public detail::PromoteType<unsigned char, int>
283 {
284  typedef detail::PromoteType<unsigned char, int>::Promote Promote;
285  using detail::PromoteType<unsigned char, int>::toPromote;
286 };
287 
288 template <>
289 struct PromoteTraits<unsigned char, unsigned int> : public detail::PromoteType<unsigned char, unsigned int>
290 {
291  typedef detail::PromoteType<unsigned char, unsigned int>::Promote Promote;
292  using detail::PromoteType<unsigned char, unsigned int>::toPromote;
293 };
294 
295 template <>
296 struct PromoteTraits<unsigned char, long> : public detail::PromoteType<unsigned char, long>
297 {
298  typedef detail::PromoteType<unsigned char, long>::Promote Promote;
299  using detail::PromoteType<unsigned char, long>::toPromote;
300 };
301 
302 template <>
303 struct PromoteTraits<unsigned char, unsigned long> : public detail::PromoteType<unsigned char, unsigned long>
304 {
305  typedef detail::PromoteType<unsigned char, unsigned long>::Promote Promote;
306  using detail::PromoteType<unsigned char, unsigned long>::toPromote;
307 };
308 
309 template <>
310 struct PromoteTraits<unsigned char, float> : public detail::PromoteType<unsigned char, float>
311 {
312  typedef detail::PromoteType<unsigned char, float>::Promote Promote;
313  using detail::PromoteType<unsigned char, float>::toPromote;
314 };
315 
316 template <>
317 struct PromoteTraits<unsigned char, double> : public detail::PromoteType<unsigned char, double>
318 {
319  typedef detail::PromoteType<unsigned char, double>::Promote Promote;
320  using detail::PromoteType<unsigned char, double>::toPromote;
321 };
322 
323 template <>
324 struct PromoteTraits<unsigned char, long double> : public detail::PromoteType<unsigned char, long double>
325 {
326  typedef detail::PromoteType<unsigned char, long double>::Promote Promote;
327  using detail::PromoteType<unsigned char, long double>::toPromote;
328 };
329 
330 #ifdef LLONG_MAX
331 template <>
332 struct PromoteTraits<unsigned char, long long> : public detail::PromoteType<unsigned char, long long>
333 {
334  typedef detail::PromoteType<unsigned char, long long>::Promote Promote;
335  using detail::PromoteType<unsigned char, long long>::toPromote;
336 };
337 #endif // LLONG_MAX
338 
339 #ifdef LLONG_MAX
340 template <>
341 struct PromoteTraits<unsigned char, unsigned long long> : public detail::PromoteType<unsigned char, unsigned long long>
342 {
343  typedef detail::PromoteType<unsigned char, unsigned long long>::Promote Promote;
344  using detail::PromoteType<unsigned char, unsigned long long>::toPromote;
345 };
346 #endif // LLONG_MAX
347 
348 template <>
349 struct PromoteTraits<short, short> : public detail::PromoteType<short, short>
350 {
351  typedef detail::PromoteType<short, short>::Promote Promote;
352  using detail::PromoteType<short, short>::toPromote;
353 };
354 
355 template <>
356 struct PromoteTraits<short, bool> : public detail::PromoteType<short, bool>
357 {
358  typedef detail::PromoteType<short, bool>::Promote Promote;
359  using detail::PromoteType<short, bool>::toPromote;
360 };
361 
362 template <>
363 struct PromoteTraits<short, signed char> : public detail::PromoteType<short, signed char>
364 {
365  typedef detail::PromoteType<short, signed char>::Promote Promote;
366  using detail::PromoteType<short, signed char>::toPromote;
367 };
368 
369 template <>
370 struct PromoteTraits<short, unsigned char> : public detail::PromoteType<short, unsigned char>
371 {
372  typedef detail::PromoteType<short, unsigned char>::Promote Promote;
373  using detail::PromoteType<short, unsigned char>::toPromote;
374 };
375 
376 template <>
377 struct PromoteTraits<short, unsigned short> : public detail::PromoteType<short, unsigned short>
378 {
379  typedef detail::PromoteType<short, unsigned short>::Promote Promote;
380  using detail::PromoteType<short, unsigned short>::toPromote;
381 };
382 
383 template <>
384 struct PromoteTraits<short, int> : public detail::PromoteType<short, int>
385 {
386  typedef detail::PromoteType<short, int>::Promote Promote;
387  using detail::PromoteType<short, int>::toPromote;
388 };
389 
390 template <>
391 struct PromoteTraits<short, unsigned int> : public detail::PromoteType<short, unsigned int>
392 {
393  typedef detail::PromoteType<short, unsigned int>::Promote Promote;
394  using detail::PromoteType<short, unsigned int>::toPromote;
395 };
396 
397 template <>
398 struct PromoteTraits<short, long> : public detail::PromoteType<short, long>
399 {
400  typedef detail::PromoteType<short, long>::Promote Promote;
401  using detail::PromoteType<short, long>::toPromote;
402 };
403 
404 template <>
405 struct PromoteTraits<short, unsigned long> : public detail::PromoteType<short, unsigned long>
406 {
407  typedef detail::PromoteType<short, unsigned long>::Promote Promote;
408  using detail::PromoteType<short, unsigned long>::toPromote;
409 };
410 
411 template <>
412 struct PromoteTraits<short, float> : public detail::PromoteType<short, float>
413 {
414  typedef detail::PromoteType<short, float>::Promote Promote;
415  using detail::PromoteType<short, float>::toPromote;
416 };
417 
418 template <>
419 struct PromoteTraits<short, double> : public detail::PromoteType<short, double>
420 {
421  typedef detail::PromoteType<short, double>::Promote Promote;
422  using detail::PromoteType<short, double>::toPromote;
423 };
424 
425 template <>
426 struct PromoteTraits<short, long double> : public detail::PromoteType<short, long double>
427 {
428  typedef detail::PromoteType<short, long double>::Promote Promote;
429  using detail::PromoteType<short, long double>::toPromote;
430 };
431 
432 #ifdef LLONG_MAX
433 template <>
434 struct PromoteTraits<short, long long> : public detail::PromoteType<short, long long>
435 {
436  typedef detail::PromoteType<short, long long>::Promote Promote;
437  using detail::PromoteType<short, long long>::toPromote;
438 };
439 #endif // LLONG_MAX
440 
441 #ifdef LLONG_MAX
442 template <>
443 struct PromoteTraits<short, unsigned long long> : public detail::PromoteType<short, unsigned long long>
444 {
445  typedef detail::PromoteType<short, unsigned long long>::Promote Promote;
446  using detail::PromoteType<short, unsigned long long>::toPromote;
447 };
448 #endif // LLONG_MAX
449 
450 template <>
451 struct PromoteTraits<unsigned short, unsigned short> : public detail::PromoteType<unsigned short, unsigned short>
452 {
453  typedef detail::PromoteType<unsigned short, unsigned short>::Promote Promote;
454  using detail::PromoteType<unsigned short, unsigned short>::toPromote;
455 };
456 
457 template <>
458 struct PromoteTraits<unsigned short, bool> : public detail::PromoteType<unsigned short, bool>
459 {
460  typedef detail::PromoteType<unsigned short, bool>::Promote Promote;
461  using detail::PromoteType<unsigned short, bool>::toPromote;
462 };
463 
464 template <>
465 struct PromoteTraits<unsigned short, signed char> : public detail::PromoteType<unsigned short, signed char>
466 {
467  typedef detail::PromoteType<unsigned short, signed char>::Promote Promote;
468  using detail::PromoteType<unsigned short, signed char>::toPromote;
469 };
470 
471 template <>
472 struct PromoteTraits<unsigned short, unsigned char> : public detail::PromoteType<unsigned short, unsigned char>
473 {
474  typedef detail::PromoteType<unsigned short, unsigned char>::Promote Promote;
475  using detail::PromoteType<unsigned short, unsigned char>::toPromote;
476 };
477 
478 template <>
479 struct PromoteTraits<unsigned short, short> : public detail::PromoteType<unsigned short, short>
480 {
481  typedef detail::PromoteType<unsigned short, short>::Promote Promote;
482  using detail::PromoteType<unsigned short, short>::toPromote;
483 };
484 
485 template <>
486 struct PromoteTraits<unsigned short, int> : public detail::PromoteType<unsigned short, int>
487 {
488  typedef detail::PromoteType<unsigned short, int>::Promote Promote;
489  using detail::PromoteType<unsigned short, int>::toPromote;
490 };
491 
492 template <>
493 struct PromoteTraits<unsigned short, unsigned int> : public detail::PromoteType<unsigned short, unsigned int>
494 {
495  typedef detail::PromoteType<unsigned short, unsigned int>::Promote Promote;
496  using detail::PromoteType<unsigned short, unsigned int>::toPromote;
497 };
498 
499 template <>
500 struct PromoteTraits<unsigned short, long> : public detail::PromoteType<unsigned short, long>
501 {
502  typedef detail::PromoteType<unsigned short, long>::Promote Promote;
503  using detail::PromoteType<unsigned short, long>::toPromote;
504 };
505 
506 template <>
507 struct PromoteTraits<unsigned short, unsigned long> : public detail::PromoteType<unsigned short, unsigned long>
508 {
509  typedef detail::PromoteType<unsigned short, unsigned long>::Promote Promote;
510  using detail::PromoteType<unsigned short, unsigned long>::toPromote;
511 };
512 
513 template <>
514 struct PromoteTraits<unsigned short, float> : public detail::PromoteType<unsigned short, float>
515 {
516  typedef detail::PromoteType<unsigned short, float>::Promote Promote;
517  using detail::PromoteType<unsigned short, float>::toPromote;
518 };
519 
520 template <>
521 struct PromoteTraits<unsigned short, double> : public detail::PromoteType<unsigned short, double>
522 {
523  typedef detail::PromoteType<unsigned short, double>::Promote Promote;
524  using detail::PromoteType<unsigned short, double>::toPromote;
525 };
526 
527 template <>
528 struct PromoteTraits<unsigned short, long double> : public detail::PromoteType<unsigned short, long double>
529 {
530  typedef detail::PromoteType<unsigned short, long double>::Promote Promote;
531  using detail::PromoteType<unsigned short, long double>::toPromote;
532 };
533 
534 #ifdef LLONG_MAX
535 template <>
536 struct PromoteTraits<unsigned short, long long> : public detail::PromoteType<unsigned short, long long>
537 {
538  typedef detail::PromoteType<unsigned short, long long>::Promote Promote;
539  using detail::PromoteType<unsigned short, long long>::toPromote;
540 };
541 #endif // LLONG_MAX
542 
543 #ifdef LLONG_MAX
544 template <>
545 struct PromoteTraits<unsigned short, unsigned long long> : public detail::PromoteType<unsigned short, unsigned long long>
546 {
547  typedef detail::PromoteType<unsigned short, unsigned long long>::Promote Promote;
548  using detail::PromoteType<unsigned short, unsigned long long>::toPromote;
549 };
550 #endif // LLONG_MAX
551 
552 template <>
553 struct PromoteTraits<int, int> : public detail::PromoteType<int, int>
554 {
555  typedef detail::PromoteType<int, int>::Promote Promote;
556  using detail::PromoteType<int, int>::toPromote;
557 };
558 
559 template <>
560 struct PromoteTraits<int, bool> : public detail::PromoteType<int, bool>
561 {
562  typedef detail::PromoteType<int, bool>::Promote Promote;
563  using detail::PromoteType<int, bool>::toPromote;
564 };
565 
566 template <>
567 struct PromoteTraits<int, signed char> : public detail::PromoteType<int, signed char>
568 {
569  typedef detail::PromoteType<int, signed char>::Promote Promote;
570  using detail::PromoteType<int, signed char>::toPromote;
571 };
572 
573 template <>
574 struct PromoteTraits<int, unsigned char> : public detail::PromoteType<int, unsigned char>
575 {
576  typedef detail::PromoteType<int, unsigned char>::Promote Promote;
577  using detail::PromoteType<int, unsigned char>::toPromote;
578 };
579 
580 template <>
581 struct PromoteTraits<int, short> : public detail::PromoteType<int, short>
582 {
583  typedef detail::PromoteType<int, short>::Promote Promote;
584  using detail::PromoteType<int, short>::toPromote;
585 };
586 
587 template <>
588 struct PromoteTraits<int, unsigned short> : public detail::PromoteType<int, unsigned short>
589 {
590  typedef detail::PromoteType<int, unsigned short>::Promote Promote;
591  using detail::PromoteType<int, unsigned short>::toPromote;
592 };
593 
594 template <>
595 struct PromoteTraits<int, unsigned int> : public detail::PromoteType<int, unsigned int>
596 {
597  typedef detail::PromoteType<int, unsigned int>::Promote Promote;
598  using detail::PromoteType<int, unsigned int>::toPromote;
599 };
600 
601 template <>
602 struct PromoteTraits<int, long> : public detail::PromoteType<int, long>
603 {
604  typedef detail::PromoteType<int, long>::Promote Promote;
605  using detail::PromoteType<int, long>::toPromote;
606 };
607 
608 template <>
609 struct PromoteTraits<int, unsigned long> : public detail::PromoteType<int, unsigned long>
610 {
611  typedef detail::PromoteType<int, unsigned long>::Promote Promote;
612  using detail::PromoteType<int, unsigned long>::toPromote;
613 };
614 
615 template <>
616 struct PromoteTraits<int, float> : public detail::PromoteType<int, float>
617 {
618  typedef detail::PromoteType<int, float>::Promote Promote;
619  using detail::PromoteType<int, float>::toPromote;
620 };
621 
622 template <>
623 struct PromoteTraits<int, double> : public detail::PromoteType<int, double>
624 {
625  typedef detail::PromoteType<int, double>::Promote Promote;
626  using detail::PromoteType<int, double>::toPromote;
627 };
628 
629 template <>
630 struct PromoteTraits<int, long double> : public detail::PromoteType<int, long double>
631 {
632  typedef detail::PromoteType<int, long double>::Promote Promote;
633  using detail::PromoteType<int, long double>::toPromote;
634 };
635 
636 #ifdef LLONG_MAX
637 template <>
638 struct PromoteTraits<int, long long> : public detail::PromoteType<int, long long>
639 {
640  typedef detail::PromoteType<int, long long>::Promote Promote;
641  using detail::PromoteType<int, long long>::toPromote;
642 };
643 #endif // LLONG_MAX
644 
645 #ifdef LLONG_MAX
646 template <>
647 struct PromoteTraits<int, unsigned long long> : public detail::PromoteType<int, unsigned long long>
648 {
649  typedef detail::PromoteType<int, unsigned long long>::Promote Promote;
650  using detail::PromoteType<int, unsigned long long>::toPromote;
651 };
652 #endif // LLONG_MAX
653 
654 template <>
655 struct PromoteTraits<unsigned int, unsigned int> : public detail::PromoteType<unsigned int, unsigned int>
656 {
657  typedef detail::PromoteType<unsigned int, unsigned int>::Promote Promote;
658  using detail::PromoteType<unsigned int, unsigned int>::toPromote;
659 };
660 
661 template <>
662 struct PromoteTraits<unsigned int, bool> : public detail::PromoteType<unsigned int, bool>
663 {
664  typedef detail::PromoteType<unsigned int, bool>::Promote Promote;
665  using detail::PromoteType<unsigned int, bool>::toPromote;
666 };
667 
668 template <>
669 struct PromoteTraits<unsigned int, signed char> : public detail::PromoteType<unsigned int, signed char>
670 {
671  typedef detail::PromoteType<unsigned int, signed char>::Promote Promote;
672  using detail::PromoteType<unsigned int, signed char>::toPromote;
673 };
674 
675 template <>
676 struct PromoteTraits<unsigned int, unsigned char> : public detail::PromoteType<unsigned int, unsigned char>
677 {
678  typedef detail::PromoteType<unsigned int, unsigned char>::Promote Promote;
679  using detail::PromoteType<unsigned int, unsigned char>::toPromote;
680 };
681 
682 template <>
683 struct PromoteTraits<unsigned int, short> : public detail::PromoteType<unsigned int, short>
684 {
685  typedef detail::PromoteType<unsigned int, short>::Promote Promote;
686  using detail::PromoteType<unsigned int, short>::toPromote;
687 };
688 
689 template <>
690 struct PromoteTraits<unsigned int, unsigned short> : public detail::PromoteType<unsigned int, unsigned short>
691 {
692  typedef detail::PromoteType<unsigned int, unsigned short>::Promote Promote;
693  using detail::PromoteType<unsigned int, unsigned short>::toPromote;
694 };
695 
696 template <>
697 struct PromoteTraits<unsigned int, int> : public detail::PromoteType<unsigned int, int>
698 {
699  typedef detail::PromoteType<unsigned int, int>::Promote Promote;
700  using detail::PromoteType<unsigned int, int>::toPromote;
701 };
702 
703 template <>
704 struct PromoteTraits<unsigned int, long> : public detail::PromoteType<unsigned int, long>
705 {
706  typedef detail::PromoteType<unsigned int, long>::Promote Promote;
707  using detail::PromoteType<unsigned int, long>::toPromote;
708 };
709 
710 template <>
711 struct PromoteTraits<unsigned int, unsigned long> : public detail::PromoteType<unsigned int, unsigned long>
712 {
713  typedef detail::PromoteType<unsigned int, unsigned long>::Promote Promote;
714  using detail::PromoteType<unsigned int, unsigned long>::toPromote;
715 };
716 
717 template <>
718 struct PromoteTraits<unsigned int, float> : public detail::PromoteType<unsigned int, float>
719 {
720  typedef detail::PromoteType<unsigned int, float>::Promote Promote;
721  using detail::PromoteType<unsigned int, float>::toPromote;
722 };
723 
724 template <>
725 struct PromoteTraits<unsigned int, double> : public detail::PromoteType<unsigned int, double>
726 {
727  typedef detail::PromoteType<unsigned int, double>::Promote Promote;
728  using detail::PromoteType<unsigned int, double>::toPromote;
729 };
730 
731 template <>
732 struct PromoteTraits<unsigned int, long double> : public detail::PromoteType<unsigned int, long double>
733 {
734  typedef detail::PromoteType<unsigned int, long double>::Promote Promote;
735  using detail::PromoteType<unsigned int, long double>::toPromote;
736 };
737 
738 #ifdef LLONG_MAX
739 template <>
740 struct PromoteTraits<unsigned int, long long> : public detail::PromoteType<unsigned int, long long>
741 {
742  typedef detail::PromoteType<unsigned int, long long>::Promote Promote;
743  using detail::PromoteType<unsigned int, long long>::toPromote;
744 };
745 #endif // LLONG_MAX
746 
747 #ifdef LLONG_MAX
748 template <>
749 struct PromoteTraits<unsigned int, unsigned long long> : public detail::PromoteType<unsigned int, unsigned long long>
750 {
751  typedef detail::PromoteType<unsigned int, unsigned long long>::Promote Promote;
752  using detail::PromoteType<unsigned int, unsigned long long>::toPromote;
753 };
754 #endif // LLONG_MAX
755 
756 template <>
757 struct PromoteTraits<long, long> : public detail::PromoteType<long, long>
758 {
759  typedef detail::PromoteType<long, long>::Promote Promote;
760  using detail::PromoteType<long, long>::toPromote;
761 };
762 
763 template <>
764 struct PromoteTraits<long, bool> : public detail::PromoteType<long, bool>
765 {
766  typedef detail::PromoteType<long, bool>::Promote Promote;
767  using detail::PromoteType<long, bool>::toPromote;
768 };
769 
770 template <>
771 struct PromoteTraits<long, signed char> : public detail::PromoteType<long, signed char>
772 {
773  typedef detail::PromoteType<long, signed char>::Promote Promote;
774  using detail::PromoteType<long, signed char>::toPromote;
775 };
776 
777 template <>
778 struct PromoteTraits<long, unsigned char> : public detail::PromoteType<long, unsigned char>
779 {
780  typedef detail::PromoteType<long, unsigned char>::Promote Promote;
781  using detail::PromoteType<long, unsigned char>::toPromote;
782 };
783 
784 template <>
785 struct PromoteTraits<long, short> : public detail::PromoteType<long, short>
786 {
787  typedef detail::PromoteType<long, short>::Promote Promote;
788  using detail::PromoteType<long, short>::toPromote;
789 };
790 
791 template <>
792 struct PromoteTraits<long, unsigned short> : public detail::PromoteType<long, unsigned short>
793 {
794  typedef detail::PromoteType<long, unsigned short>::Promote Promote;
795  using detail::PromoteType<long, unsigned short>::toPromote;
796 };
797 
798 template <>
799 struct PromoteTraits<long, int> : public detail::PromoteType<long, int>
800 {
801  typedef detail::PromoteType<long, int>::Promote Promote;
802  using detail::PromoteType<long, int>::toPromote;
803 };
804 
805 template <>
806 struct PromoteTraits<long, unsigned int> : public detail::PromoteType<long, unsigned int>
807 {
808  typedef detail::PromoteType<long, unsigned int>::Promote Promote;
809  using detail::PromoteType<long, unsigned int>::toPromote;
810 };
811 
812 template <>
813 struct PromoteTraits<long, unsigned long> : public detail::PromoteType<long, unsigned long>
814 {
815  typedef detail::PromoteType<long, unsigned long>::Promote Promote;
816  using detail::PromoteType<long, unsigned long>::toPromote;
817 };
818 
819 template <>
820 struct PromoteTraits<long, float> : public detail::PromoteType<long, float>
821 {
822  typedef detail::PromoteType<long, float>::Promote Promote;
823  using detail::PromoteType<long, float>::toPromote;
824 };
825 
826 template <>
827 struct PromoteTraits<long, double> : public detail::PromoteType<long, double>
828 {
829  typedef detail::PromoteType<long, double>::Promote Promote;
830  using detail::PromoteType<long, double>::toPromote;
831 };
832 
833 template <>
834 struct PromoteTraits<long, long double> : public detail::PromoteType<long, long double>
835 {
836  typedef detail::PromoteType<long, long double>::Promote Promote;
837  using detail::PromoteType<long, long double>::toPromote;
838 };
839 
840 #ifdef LLONG_MAX
841 template <>
842 struct PromoteTraits<long, long long> : public detail::PromoteType<long, long long>
843 {
844  typedef detail::PromoteType<long, long long>::Promote Promote;
845  using detail::PromoteType<long, long long>::toPromote;
846 };
847 #endif // LLONG_MAX
848 
849 #ifdef LLONG_MAX
850 template <>
851 struct PromoteTraits<long, unsigned long long> : public detail::PromoteType<long, unsigned long long>
852 {
853  typedef detail::PromoteType<long, unsigned long long>::Promote Promote;
854  using detail::PromoteType<long, unsigned long long>::toPromote;
855 };
856 #endif // LLONG_MAX
857 
858 template <>
859 struct PromoteTraits<unsigned long, unsigned long> : public detail::PromoteType<unsigned long, unsigned long>
860 {
861  typedef detail::PromoteType<unsigned long, unsigned long>::Promote Promote;
862  using detail::PromoteType<unsigned long, unsigned long>::toPromote;
863 };
864 
865 template <>
866 struct PromoteTraits<unsigned long, bool> : public detail::PromoteType<unsigned long, bool>
867 {
868  typedef detail::PromoteType<unsigned long, bool>::Promote Promote;
869  using detail::PromoteType<unsigned long, bool>::toPromote;
870 };
871 
872 template <>
873 struct PromoteTraits<unsigned long, signed char> : public detail::PromoteType<unsigned long, signed char>
874 {
875  typedef detail::PromoteType<unsigned long, signed char>::Promote Promote;
876  using detail::PromoteType<unsigned long, signed char>::toPromote;
877 };
878 
879 template <>
880 struct PromoteTraits<unsigned long, unsigned char> : public detail::PromoteType<unsigned long, unsigned char>
881 {
882  typedef detail::PromoteType<unsigned long, unsigned char>::Promote Promote;
883  using detail::PromoteType<unsigned long, unsigned char>::toPromote;
884 };
885 
886 template <>
887 struct PromoteTraits<unsigned long, short> : public detail::PromoteType<unsigned long, short>
888 {
889  typedef detail::PromoteType<unsigned long, short>::Promote Promote;
890  using detail::PromoteType<unsigned long, short>::toPromote;
891 };
892 
893 template <>
894 struct PromoteTraits<unsigned long, unsigned short> : public detail::PromoteType<unsigned long, unsigned short>
895 {
896  typedef detail::PromoteType<unsigned long, unsigned short>::Promote Promote;
897  using detail::PromoteType<unsigned long, unsigned short>::toPromote;
898 };
899 
900 template <>
901 struct PromoteTraits<unsigned long, int> : public detail::PromoteType<unsigned long, int>
902 {
903  typedef detail::PromoteType<unsigned long, int>::Promote Promote;
904  using detail::PromoteType<unsigned long, int>::toPromote;
905 };
906 
907 template <>
908 struct PromoteTraits<unsigned long, unsigned int> : public detail::PromoteType<unsigned long, unsigned int>
909 {
910  typedef detail::PromoteType<unsigned long, unsigned int>::Promote Promote;
911  using detail::PromoteType<unsigned long, unsigned int>::toPromote;
912 };
913 
914 template <>
915 struct PromoteTraits<unsigned long, long> : public detail::PromoteType<unsigned long, long>
916 {
917  typedef detail::PromoteType<unsigned long, long>::Promote Promote;
918  using detail::PromoteType<unsigned long, long>::toPromote;
919 };
920 
921 template <>
922 struct PromoteTraits<unsigned long, float> : public detail::PromoteType<unsigned long, float>
923 {
924  typedef detail::PromoteType<unsigned long, float>::Promote Promote;
925  using detail::PromoteType<unsigned long, float>::toPromote;
926 };
927 
928 template <>
929 struct PromoteTraits<unsigned long, double> : public detail::PromoteType<unsigned long, double>
930 {
931  typedef detail::PromoteType<unsigned long, double>::Promote Promote;
932  using detail::PromoteType<unsigned long, double>::toPromote;
933 };
934 
935 template <>
936 struct PromoteTraits<unsigned long, long double> : public detail::PromoteType<unsigned long, long double>
937 {
938  typedef detail::PromoteType<unsigned long, long double>::Promote Promote;
939  using detail::PromoteType<unsigned long, long double>::toPromote;
940 };
941 
942 #ifdef LLONG_MAX
943 template <>
944 struct PromoteTraits<unsigned long, long long> : public detail::PromoteType<unsigned long, long long>
945 {
946  typedef detail::PromoteType<unsigned long, long long>::Promote Promote;
947  using detail::PromoteType<unsigned long, long long>::toPromote;
948 };
949 #endif // LLONG_MAX
950 
951 #ifdef LLONG_MAX
952 template <>
953 struct PromoteTraits<unsigned long, unsigned long long> : public detail::PromoteType<unsigned long, unsigned long long>
954 {
955  typedef detail::PromoteType<unsigned long, unsigned long long>::Promote Promote;
956  using detail::PromoteType<unsigned long, unsigned long long>::toPromote;
957 };
958 #endif // LLONG_MAX
959 
960 template <>
961 struct PromoteTraits<float, float> : public detail::PromoteType<float, float>
962 {
963  typedef detail::PromoteType<float, float>::Promote Promote;
964  using detail::PromoteType<float, float>::toPromote;
965 };
966 
967 template <>
968 struct PromoteTraits<float, bool> : public detail::PromoteType<float, bool>
969 {
970  typedef detail::PromoteType<float, bool>::Promote Promote;
971  using detail::PromoteType<float, bool>::toPromote;
972 };
973 
974 template <>
975 struct PromoteTraits<float, signed char> : public detail::PromoteType<float, signed char>
976 {
977  typedef detail::PromoteType<float, signed char>::Promote Promote;
978  using detail::PromoteType<float, signed char>::toPromote;
979 };
980 
981 template <>
982 struct PromoteTraits<float, unsigned char> : public detail::PromoteType<float, unsigned char>
983 {
984  typedef detail::PromoteType<float, unsigned char>::Promote Promote;
985  using detail::PromoteType<float, unsigned char>::toPromote;
986 };
987 
988 template <>
989 struct PromoteTraits<float, short> : public detail::PromoteType<float, short>
990 {
991  typedef detail::PromoteType<float, short>::Promote Promote;
992  using detail::PromoteType<float, short>::toPromote;
993 };
994 
995 template <>
996 struct PromoteTraits<float, unsigned short> : public detail::PromoteType<float, unsigned short>
997 {
998  typedef detail::PromoteType<float, unsigned short>::Promote Promote;
999  using detail::PromoteType<float, unsigned short>::toPromote;
1000 };
1001 
1002 template <>
1003 struct PromoteTraits<float, int> : public detail::PromoteType<float, int>
1004 {
1005  typedef detail::PromoteType<float, int>::Promote Promote;
1006  using detail::PromoteType<float, int>::toPromote;
1007 };
1008 
1009 template <>
1010 struct PromoteTraits<float, unsigned int> : public detail::PromoteType<float, unsigned int>
1011 {
1012  typedef detail::PromoteType<float, unsigned int>::Promote Promote;
1013  using detail::PromoteType<float, unsigned int>::toPromote;
1014 };
1015 
1016 template <>
1017 struct PromoteTraits<float, long> : public detail::PromoteType<float, long>
1018 {
1019  typedef detail::PromoteType<float, long>::Promote Promote;
1020  using detail::PromoteType<float, long>::toPromote;
1021 };
1022 
1023 template <>
1024 struct PromoteTraits<float, unsigned long> : public detail::PromoteType<float, unsigned long>
1025 {
1026  typedef detail::PromoteType<float, unsigned long>::Promote Promote;
1027  using detail::PromoteType<float, unsigned long>::toPromote;
1028 };
1029 
1030 template <>
1031 struct PromoteTraits<float, double> : public detail::PromoteType<float, double>
1032 {
1033  typedef detail::PromoteType<float, double>::Promote Promote;
1034  using detail::PromoteType<float, double>::toPromote;
1035 };
1036 
1037 template <>
1038 struct PromoteTraits<float, long double> : public detail::PromoteType<float, long double>
1039 {
1040  typedef detail::PromoteType<float, long double>::Promote Promote;
1041  using detail::PromoteType<float, long double>::toPromote;
1042 };
1043 
1044 #ifdef LLONG_MAX
1045 template <>
1046 struct PromoteTraits<float, long long> : public detail::PromoteType<float, long long>
1047 {
1048  typedef detail::PromoteType<float, long long>::Promote Promote;
1049  using detail::PromoteType<float, long long>::toPromote;
1050 };
1051 #endif // LLONG_MAX
1052 
1053 #ifdef LLONG_MAX
1054 template <>
1055 struct PromoteTraits<float, unsigned long long> : public detail::PromoteType<float, unsigned long long>
1056 {
1057  typedef detail::PromoteType<float, unsigned long long>::Promote Promote;
1058  using detail::PromoteType<float, unsigned long long>::toPromote;
1059 };
1060 #endif // LLONG_MAX
1061 
1062 template <>
1063 struct PromoteTraits<double, double> : public detail::PromoteType<double, double>
1064 {
1065  typedef detail::PromoteType<double, double>::Promote Promote;
1066  using detail::PromoteType<double, double>::toPromote;
1067 };
1068 
1069 template <>
1070 struct PromoteTraits<double, bool> : public detail::PromoteType<double, bool>
1071 {
1072  typedef detail::PromoteType<double, bool>::Promote Promote;
1073  using detail::PromoteType<double, bool>::toPromote;
1074 };
1075 
1076 template <>
1077 struct PromoteTraits<double, signed char> : public detail::PromoteType<double, signed char>
1078 {
1079  typedef detail::PromoteType<double, signed char>::Promote Promote;
1080  using detail::PromoteType<double, signed char>::toPromote;
1081 };
1082 
1083 template <>
1084 struct PromoteTraits<double, unsigned char> : public detail::PromoteType<double, unsigned char>
1085 {
1086  typedef detail::PromoteType<double, unsigned char>::Promote Promote;
1087  using detail::PromoteType<double, unsigned char>::toPromote;
1088 };
1089 
1090 template <>
1091 struct PromoteTraits<double, short> : public detail::PromoteType<double, short>
1092 {
1093  typedef detail::PromoteType<double, short>::Promote Promote;
1094  using detail::PromoteType<double, short>::toPromote;
1095 };
1096 
1097 template <>
1098 struct PromoteTraits<double, unsigned short> : public detail::PromoteType<double, unsigned short>
1099 {
1100  typedef detail::PromoteType<double, unsigned short>::Promote Promote;
1101  using detail::PromoteType<double, unsigned short>::toPromote;
1102 };
1103 
1104 template <>
1105 struct PromoteTraits<double, int> : public detail::PromoteType<double, int>
1106 {
1107  typedef detail::PromoteType<double, int>::Promote Promote;
1108  using detail::PromoteType<double, int>::toPromote;
1109 };
1110 
1111 template <>
1112 struct PromoteTraits<double, unsigned int> : public detail::PromoteType<double, unsigned int>
1113 {
1114  typedef detail::PromoteType<double, unsigned int>::Promote Promote;
1115  using detail::PromoteType<double, unsigned int>::toPromote;
1116 };
1117 
1118 template <>
1119 struct PromoteTraits<double, long> : public detail::PromoteType<double, long>
1120 {
1121  typedef detail::PromoteType<double, long>::Promote Promote;
1122  using detail::PromoteType<double, long>::toPromote;
1123 };
1124 
1125 template <>
1126 struct PromoteTraits<double, unsigned long> : public detail::PromoteType<double, unsigned long>
1127 {
1128  typedef detail::PromoteType<double, unsigned long>::Promote Promote;
1129  using detail::PromoteType<double, unsigned long>::toPromote;
1130 };
1131 
1132 template <>
1133 struct PromoteTraits<double, float> : public detail::PromoteType<double, float>
1134 {
1135  typedef detail::PromoteType<double, float>::Promote Promote;
1136  using detail::PromoteType<double, float>::toPromote;
1137 };
1138 
1139 template <>
1140 struct PromoteTraits<double, long double> : public detail::PromoteType<double, long double>
1141 {
1142  typedef detail::PromoteType<double, long double>::Promote Promote;
1143  using detail::PromoteType<double, long double>::toPromote;
1144 };
1145 
1146 #ifdef LLONG_MAX
1147 template <>
1148 struct PromoteTraits<double, long long> : public detail::PromoteType<double, long long>
1149 {
1150  typedef detail::PromoteType<double, long long>::Promote Promote;
1151  using detail::PromoteType<double, long long>::toPromote;
1152 };
1153 #endif // LLONG_MAX
1154 
1155 #ifdef LLONG_MAX
1156 template <>
1157 struct PromoteTraits<double, unsigned long long> : public detail::PromoteType<double, unsigned long long>
1158 {
1159  typedef detail::PromoteType<double, unsigned long long>::Promote Promote;
1160  using detail::PromoteType<double, unsigned long long>::toPromote;
1161 };
1162 #endif // LLONG_MAX
1163 
1164 template <>
1165 struct PromoteTraits<long double, long double> : public detail::PromoteType<long double, long double>
1166 {
1167  typedef detail::PromoteType<long double, long double>::Promote Promote;
1168  using detail::PromoteType<long double, long double>::toPromote;
1169 };
1170 
1171 template <>
1172 struct PromoteTraits<long double, bool> : public detail::PromoteType<long double, bool>
1173 {
1174  typedef detail::PromoteType<long double, bool>::Promote Promote;
1175  using detail::PromoteType<long double, bool>::toPromote;
1176 };
1177 
1178 template <>
1179 struct PromoteTraits<long double, signed char> : public detail::PromoteType<long double, signed char>
1180 {
1181  typedef detail::PromoteType<long double, signed char>::Promote Promote;
1182  using detail::PromoteType<long double, signed char>::toPromote;
1183 };
1184 
1185 template <>
1186 struct PromoteTraits<long double, unsigned char> : public detail::PromoteType<long double, unsigned char>
1187 {
1188  typedef detail::PromoteType<long double, unsigned char>::Promote Promote;
1189  using detail::PromoteType<long double, unsigned char>::toPromote;
1190 };
1191 
1192 template <>
1193 struct PromoteTraits<long double, short> : public detail::PromoteType<long double, short>
1194 {
1195  typedef detail::PromoteType<long double, short>::Promote Promote;
1196  using detail::PromoteType<long double, short>::toPromote;
1197 };
1198 
1199 template <>
1200 struct PromoteTraits<long double, unsigned short> : public detail::PromoteType<long double, unsigned short>
1201 {
1202  typedef detail::PromoteType<long double, unsigned short>::Promote Promote;
1203  using detail::PromoteType<long double, unsigned short>::toPromote;
1204 };
1205 
1206 template <>
1207 struct PromoteTraits<long double, int> : public detail::PromoteType<long double, int>
1208 {
1209  typedef detail::PromoteType<long double, int>::Promote Promote;
1210  using detail::PromoteType<long double, int>::toPromote;
1211 };
1212 
1213 template <>
1214 struct PromoteTraits<long double, unsigned int> : public detail::PromoteType<long double, unsigned int>
1215 {
1216  typedef detail::PromoteType<long double, unsigned int>::Promote Promote;
1217  using detail::PromoteType<long double, unsigned int>::toPromote;
1218 };
1219 
1220 template <>
1221 struct PromoteTraits<long double, long> : public detail::PromoteType<long double, long>
1222 {
1223  typedef detail::PromoteType<long double, long>::Promote Promote;
1224  using detail::PromoteType<long double, long>::toPromote;
1225 };
1226 
1227 template <>
1228 struct PromoteTraits<long double, unsigned long> : public detail::PromoteType<long double, unsigned long>
1229 {
1230  typedef detail::PromoteType<long double, unsigned long>::Promote Promote;
1231  using detail::PromoteType<long double, unsigned long>::toPromote;
1232 };
1233 
1234 template <>
1235 struct PromoteTraits<long double, float> : public detail::PromoteType<long double, float>
1236 {
1237  typedef detail::PromoteType<long double, float>::Promote Promote;
1238  using detail::PromoteType<long double, float>::toPromote;
1239 };
1240 
1241 template <>
1242 struct PromoteTraits<long double, double> : public detail::PromoteType<long double, double>
1243 {
1244  typedef detail::PromoteType<long double, double>::Promote Promote;
1245  using detail::PromoteType<long double, double>::toPromote;
1246 };
1247 
1248 #ifdef LLONG_MAX
1249 template <>
1250 struct PromoteTraits<long double, long long> : public detail::PromoteType<long double, long long>
1251 {
1252  typedef detail::PromoteType<long double, long long>::Promote Promote;
1253  using detail::PromoteType<long double, long long>::toPromote;
1254 };
1255 #endif // LLONG_MAX
1256 
1257 #ifdef LLONG_MAX
1258 template <>
1259 struct PromoteTraits<long double, unsigned long long> : public detail::PromoteType<long double, unsigned long long>
1260 {
1261  typedef detail::PromoteType<long double, unsigned long long>::Promote Promote;
1262  using detail::PromoteType<long double, unsigned long long>::toPromote;
1263 };
1264 #endif // LLONG_MAX
1265 
1266 #ifdef LLONG_MAX
1267 template <>
1268 struct PromoteTraits<long long, long long> : public detail::PromoteType<long long, long long>
1269 {
1270  typedef detail::PromoteType<long long, long long>::Promote Promote;
1271  using detail::PromoteType<long long, long long>::toPromote;
1272 };
1273 #endif // LLONG_MAX
1274 
1275 #ifdef LLONG_MAX
1276 template <>
1277 struct PromoteTraits<long long, bool> : public detail::PromoteType<long long, bool>
1278 {
1279  typedef detail::PromoteType<long long, bool>::Promote Promote;
1280  using detail::PromoteType<long long, bool>::toPromote;
1281 };
1282 #endif // LLONG_MAX
1283 
1284 #ifdef LLONG_MAX
1285 template <>
1286 struct PromoteTraits<long long, signed char> : public detail::PromoteType<long long, signed char>
1287 {
1288  typedef detail::PromoteType<long long, signed char>::Promote Promote;
1289  using detail::PromoteType<long long, signed char>::toPromote;
1290 };
1291 #endif // LLONG_MAX
1292 
1293 #ifdef LLONG_MAX
1294 template <>
1295 struct PromoteTraits<long long, unsigned char> : public detail::PromoteType<long long, unsigned char>
1296 {
1297  typedef detail::PromoteType<long long, unsigned char>::Promote Promote;
1298  using detail::PromoteType<long long, unsigned char>::toPromote;
1299 };
1300 #endif // LLONG_MAX
1301 
1302 #ifdef LLONG_MAX
1303 template <>
1304 struct PromoteTraits<long long, short> : public detail::PromoteType<long long, short>
1305 {
1306  typedef detail::PromoteType<long long, short>::Promote Promote;
1307  using detail::PromoteType<long long, short>::toPromote;
1308 };
1309 #endif // LLONG_MAX
1310 
1311 #ifdef LLONG_MAX
1312 template <>
1313 struct PromoteTraits<long long, unsigned short> : public detail::PromoteType<long long, unsigned short>
1314 {
1315  typedef detail::PromoteType<long long, unsigned short>::Promote Promote;
1316  using detail::PromoteType<long long, unsigned short>::toPromote;
1317 };
1318 #endif // LLONG_MAX
1319 
1320 #ifdef LLONG_MAX
1321 template <>
1322 struct PromoteTraits<long long, int> : public detail::PromoteType<long long, int>
1323 {
1324  typedef detail::PromoteType<long long, int>::Promote Promote;
1325  using detail::PromoteType<long long, int>::toPromote;
1326 };
1327 #endif // LLONG_MAX
1328 
1329 #ifdef LLONG_MAX
1330 template <>
1331 struct PromoteTraits<long long, unsigned int> : public detail::PromoteType<long long, unsigned int>
1332 {
1333  typedef detail::PromoteType<long long, unsigned int>::Promote Promote;
1334  using detail::PromoteType<long long, unsigned int>::toPromote;
1335 };
1336 #endif // LLONG_MAX
1337 
1338 #ifdef LLONG_MAX
1339 template <>
1340 struct PromoteTraits<long long, long> : public detail::PromoteType<long long, long>
1341 {
1342  typedef detail::PromoteType<long long, long>::Promote Promote;
1343  using detail::PromoteType<long long, long>::toPromote;
1344 };
1345 #endif // LLONG_MAX
1346 
1347 #ifdef LLONG_MAX
1348 template <>
1349 struct PromoteTraits<long long, unsigned long> : public detail::PromoteType<long long, unsigned long>
1350 {
1351  typedef detail::PromoteType<long long, unsigned long>::Promote Promote;
1352  using detail::PromoteType<long long, unsigned long>::toPromote;
1353 };
1354 #endif // LLONG_MAX
1355 
1356 #ifdef LLONG_MAX
1357 template <>
1358 struct PromoteTraits<long long, float> : public detail::PromoteType<long long, float>
1359 {
1360  typedef detail::PromoteType<long long, float>::Promote Promote;
1361  using detail::PromoteType<long long, float>::toPromote;
1362 };
1363 #endif // LLONG_MAX
1364 
1365 #ifdef LLONG_MAX
1366 template <>
1367 struct PromoteTraits<long long, double> : public detail::PromoteType<long long, double>
1368 {
1369  typedef detail::PromoteType<long long, double>::Promote Promote;
1370  using detail::PromoteType<long long, double>::toPromote;
1371 };
1372 #endif // LLONG_MAX
1373 
1374 #ifdef LLONG_MAX
1375 template <>
1376 struct PromoteTraits<long long, long double> : public detail::PromoteType<long long, long double>
1377 {
1378  typedef detail::PromoteType<long long, long double>::Promote Promote;
1379  using detail::PromoteType<long long, long double>::toPromote;
1380 };
1381 #endif // LLONG_MAX
1382 
1383 #ifdef LLONG_MAX
1384 template <>
1385 struct PromoteTraits<long long, unsigned long long> : public detail::PromoteType<long long, unsigned long long>
1386 {
1387  typedef detail::PromoteType<long long, unsigned long long>::Promote Promote;
1388  using detail::PromoteType<long long, unsigned long long>::toPromote;
1389 };
1390 #endif // LLONG_MAX
1391 
1392 #ifdef LLONG_MAX
1393 template <>
1394 struct PromoteTraits<unsigned long long, unsigned long long> : public detail::PromoteType<unsigned long long, unsigned long long>
1395 {
1396  typedef detail::PromoteType<unsigned long long, unsigned long long>::Promote Promote;
1397  using detail::PromoteType<unsigned long long, unsigned long long>::toPromote;
1398 };
1399 #endif // LLONG_MAX
1400 
1401 #ifdef LLONG_MAX
1402 template <>
1403 struct PromoteTraits<unsigned long long, bool> : public detail::PromoteType<unsigned long long, bool>
1404 {
1405  typedef detail::PromoteType<unsigned long long, bool>::Promote Promote;
1406  using detail::PromoteType<unsigned long long, bool>::toPromote;
1407 };
1408 #endif // LLONG_MAX
1409 
1410 #ifdef LLONG_MAX
1411 template <>
1412 struct PromoteTraits<unsigned long long, signed char> : public detail::PromoteType<unsigned long long, signed char>
1413 {
1414  typedef detail::PromoteType<unsigned long long, signed char>::Promote Promote;
1415  using detail::PromoteType<unsigned long long, signed char>::toPromote;
1416 };
1417 #endif // LLONG_MAX
1418 
1419 #ifdef LLONG_MAX
1420 template <>
1421 struct PromoteTraits<unsigned long long, unsigned char> : public detail::PromoteType<unsigned long long, unsigned char>
1422 {
1423  typedef detail::PromoteType<unsigned long long, unsigned char>::Promote Promote;
1424  using detail::PromoteType<unsigned long long, unsigned char>::toPromote;
1425 };
1426 #endif // LLONG_MAX
1427 
1428 #ifdef LLONG_MAX
1429 template <>
1430 struct PromoteTraits<unsigned long long, short> : public detail::PromoteType<unsigned long long, short>
1431 {
1432  typedef detail::PromoteType<unsigned long long, short>::Promote Promote;
1433  using detail::PromoteType<unsigned long long, short>::toPromote;
1434 };
1435 #endif // LLONG_MAX
1436 
1437 #ifdef LLONG_MAX
1438 template <>
1439 struct PromoteTraits<unsigned long long, unsigned short> : public detail::PromoteType<unsigned long long, unsigned short>
1440 {
1441  typedef detail::PromoteType<unsigned long long, unsigned short>::Promote Promote;
1442  using detail::PromoteType<unsigned long long, unsigned short>::toPromote;
1443 };
1444 #endif // LLONG_MAX
1445 
1446 #ifdef LLONG_MAX
1447 template <>
1448 struct PromoteTraits<unsigned long long, int> : public detail::PromoteType<unsigned long long, int>
1449 {
1450  typedef detail::PromoteType<unsigned long long, int>::Promote Promote;
1451  using detail::PromoteType<unsigned long long, int>::toPromote;
1452 };
1453 #endif // LLONG_MAX
1454 
1455 #ifdef LLONG_MAX
1456 template <>
1457 struct PromoteTraits<unsigned long long, unsigned int> : public detail::PromoteType<unsigned long long, unsigned int>
1458 {
1459  typedef detail::PromoteType<unsigned long long, unsigned int>::Promote Promote;
1460  using detail::PromoteType<unsigned long long, unsigned int>::toPromote;
1461 };
1462 #endif // LLONG_MAX
1463 
1464 #ifdef LLONG_MAX
1465 template <>
1466 struct PromoteTraits<unsigned long long, long> : public detail::PromoteType<unsigned long long, long>
1467 {
1468  typedef detail::PromoteType<unsigned long long, long>::Promote Promote;
1469  using detail::PromoteType<unsigned long long, long>::toPromote;
1470 };
1471 #endif // LLONG_MAX
1472 
1473 #ifdef LLONG_MAX
1474 template <>
1475 struct PromoteTraits<unsigned long long, unsigned long> : public detail::PromoteType<unsigned long long, unsigned long>
1476 {
1477  typedef detail::PromoteType<unsigned long long, unsigned long>::Promote Promote;
1478  using detail::PromoteType<unsigned long long, unsigned long>::toPromote;
1479 };
1480 #endif // LLONG_MAX
1481 
1482 #ifdef LLONG_MAX
1483 template <>
1484 struct PromoteTraits<unsigned long long, float> : public detail::PromoteType<unsigned long long, float>
1485 {
1486  typedef detail::PromoteType<unsigned long long, float>::Promote Promote;
1487  using detail::PromoteType<unsigned long long, float>::toPromote;
1488 };
1489 #endif // LLONG_MAX
1490 
1491 #ifdef LLONG_MAX
1492 template <>
1493 struct PromoteTraits<unsigned long long, double> : public detail::PromoteType<unsigned long long, double>
1494 {
1495  typedef detail::PromoteType<unsigned long long, double>::Promote Promote;
1496  using detail::PromoteType<unsigned long long, double>::toPromote;
1497 };
1498 #endif // LLONG_MAX
1499 
1500 #ifdef LLONG_MAX
1501 template <>
1502 struct PromoteTraits<unsigned long long, long double> : public detail::PromoteType<unsigned long long, long double>
1503 {
1504  typedef detail::PromoteType<unsigned long long, long double>::Promote Promote;
1505  using detail::PromoteType<unsigned long long, long double>::toPromote;
1506 };
1507 #endif // LLONG_MAX
1508 
1509 #ifdef LLONG_MAX
1510 template <>
1511 struct PromoteTraits<unsigned long long, long long> : public detail::PromoteType<unsigned long long, long long>
1512 {
1513  typedef detail::PromoteType<unsigned long long, long long>::Promote Promote;
1514  using detail::PromoteType<unsigned long long, long long>::toPromote;
1515 };
1516 #endif // LLONG_MAX
1517 
1518 
1519 
1520 #endif // VIGRA_PROMOTETRAITS_HXX

© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de)
Heidelberg Collaboratory for Image Processing, University of Heidelberg, Germany

html generated using doxygen and Python
vigra 1.11.1 (Fri May 19 2017)