vigra - vigra/promote_traits.hxx Source File

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

promote_traits.hxx |

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)