37 #ifndef VIGRA_PROMOTETRAITS_HXX
38 #define VIGRA_PROMOTETRAITS_HXX
43 struct PromoteTraits<bool, bool> :
public detail::PromoteType<bool, bool>
45 typedef detail::PromoteType<bool, bool>::Promote Promote;
46 using detail::PromoteType<bool, bool>::toPromote;
50 struct PromoteTraits<bool, signed char> :
public detail::PromoteType<bool, signed char>
52 typedef detail::PromoteType<bool, signed char>::Promote Promote;
53 using detail::PromoteType<bool, signed char>::toPromote;
57 struct PromoteTraits<bool, unsigned char> :
public detail::PromoteType<bool, unsigned char>
59 typedef detail::PromoteType<bool, unsigned char>::Promote Promote;
60 using detail::PromoteType<bool, unsigned char>::toPromote;
64 struct PromoteTraits<bool, short> :
public detail::PromoteType<bool, short>
66 typedef detail::PromoteType<bool, short>::Promote Promote;
67 using detail::PromoteType<bool, short>::toPromote;
71 struct PromoteTraits<bool, unsigned short> :
public detail::PromoteType<bool, unsigned short>
73 typedef detail::PromoteType<bool, unsigned short>::Promote Promote;
74 using detail::PromoteType<bool, unsigned short>::toPromote;
78 struct PromoteTraits<bool, int> :
public detail::PromoteType<bool, int>
80 typedef detail::PromoteType<bool, int>::Promote Promote;
81 using detail::PromoteType<bool, int>::toPromote;
85 struct PromoteTraits<bool, unsigned int> :
public detail::PromoteType<bool, unsigned int>
87 typedef detail::PromoteType<bool, unsigned int>::Promote Promote;
88 using detail::PromoteType<bool, unsigned int>::toPromote;
92 struct PromoteTraits<bool, long> :
public detail::PromoteType<bool, long>
94 typedef detail::PromoteType<bool, long>::Promote Promote;
95 using detail::PromoteType<bool, long>::toPromote;
99 struct PromoteTraits<bool, unsigned long> :
public detail::PromoteType<bool, unsigned long>
101 typedef detail::PromoteType<bool, unsigned long>::Promote Promote;
102 using detail::PromoteType<bool, unsigned long>::toPromote;
106 struct PromoteTraits<bool, float> :
public detail::PromoteType<bool, float>
108 typedef detail::PromoteType<bool, float>::Promote Promote;
109 using detail::PromoteType<bool, float>::toPromote;
113 struct PromoteTraits<bool, double> :
public detail::PromoteType<bool, double>
115 typedef detail::PromoteType<bool, double>::Promote Promote;
116 using detail::PromoteType<bool, double>::toPromote;
120 struct PromoteTraits<bool, long double> :
public detail::PromoteType<bool, long double>
122 typedef detail::PromoteType<bool, long double>::Promote Promote;
123 using detail::PromoteType<bool, long double>::toPromote;
128 struct PromoteTraits<bool, long long> :
public detail::PromoteType<bool, long long>
130 typedef detail::PromoteType<bool, long long>::Promote Promote;
131 using detail::PromoteType<bool, long long>::toPromote;
137 struct PromoteTraits<bool, unsigned long long> :
public detail::PromoteType<bool, unsigned long long>
139 typedef detail::PromoteType<bool, unsigned long long>::Promote Promote;
140 using detail::PromoteType<bool, unsigned long long>::toPromote;
145 struct PromoteTraits<signed char, signed char> :
public detail::PromoteType<signed char, signed char>
147 typedef detail::PromoteType<signed char, signed char>::Promote Promote;
148 using detail::PromoteType<signed char, signed char>::toPromote;
152 struct PromoteTraits<signed char, bool> :
public detail::PromoteType<signed char, bool>
154 typedef detail::PromoteType<signed char, bool>::Promote Promote;
155 using detail::PromoteType<signed char, bool>::toPromote;
159 struct PromoteTraits<signed char, unsigned char> :
public detail::PromoteType<signed char, unsigned char>
161 typedef detail::PromoteType<signed char, unsigned char>::Promote Promote;
162 using detail::PromoteType<signed char, unsigned char>::toPromote;
166 struct PromoteTraits<signed char, short> :
public detail::PromoteType<signed char, short>
168 typedef detail::PromoteType<signed char, short>::Promote Promote;
169 using detail::PromoteType<signed char, short>::toPromote;
173 struct PromoteTraits<signed char, unsigned short> :
public detail::PromoteType<signed char, unsigned short>
175 typedef detail::PromoteType<signed char, unsigned short>::Promote Promote;
176 using detail::PromoteType<signed char, unsigned short>::toPromote;
180 struct PromoteTraits<signed char, int> :
public detail::PromoteType<signed char, int>
182 typedef detail::PromoteType<signed char, int>::Promote Promote;
183 using detail::PromoteType<signed char, int>::toPromote;
187 struct PromoteTraits<signed char, unsigned int> :
public detail::PromoteType<signed char, unsigned int>
189 typedef detail::PromoteType<signed char, unsigned int>::Promote Promote;
190 using detail::PromoteType<signed char, unsigned int>::toPromote;
194 struct PromoteTraits<signed char, long> :
public detail::PromoteType<signed char, long>
196 typedef detail::PromoteType<signed char, long>::Promote Promote;
197 using detail::PromoteType<signed char, long>::toPromote;
201 struct PromoteTraits<signed char, unsigned long> :
public detail::PromoteType<signed char, unsigned long>
203 typedef detail::PromoteType<signed char, unsigned long>::Promote Promote;
204 using detail::PromoteType<signed char, unsigned long>::toPromote;
208 struct PromoteTraits<signed char, float> :
public detail::PromoteType<signed char, float>
210 typedef detail::PromoteType<signed char, float>::Promote Promote;
211 using detail::PromoteType<signed char, float>::toPromote;
215 struct PromoteTraits<signed char, double> :
public detail::PromoteType<signed char, double>
217 typedef detail::PromoteType<signed char, double>::Promote Promote;
218 using detail::PromoteType<signed char, double>::toPromote;
222 struct PromoteTraits<signed char, long double> :
public detail::PromoteType<signed char, long double>
224 typedef detail::PromoteType<signed char, long double>::Promote Promote;
225 using detail::PromoteType<signed char, long double>::toPromote;
230 struct PromoteTraits<signed char, long long> :
public detail::PromoteType<signed char, long long>
232 typedef detail::PromoteType<signed char, long long>::Promote Promote;
233 using detail::PromoteType<signed char, long long>::toPromote;
239 struct PromoteTraits<signed char, unsigned long long> :
public detail::PromoteType<signed char, unsigned long long>
241 typedef detail::PromoteType<signed char, unsigned long long>::Promote Promote;
242 using detail::PromoteType<signed char, unsigned long long>::toPromote;
247 struct PromoteTraits<unsigned char, unsigned char> :
public detail::PromoteType<unsigned char, unsigned char>
249 typedef detail::PromoteType<unsigned char, unsigned char>::Promote Promote;
250 using detail::PromoteType<unsigned char, unsigned char>::toPromote;
254 struct PromoteTraits<unsigned char, bool> :
public detail::PromoteType<unsigned char, bool>
256 typedef detail::PromoteType<unsigned char, bool>::Promote Promote;
257 using detail::PromoteType<unsigned char, bool>::toPromote;
261 struct PromoteTraits<unsigned char, signed char> :
public detail::PromoteType<unsigned char, signed char>
263 typedef detail::PromoteType<unsigned char, signed char>::Promote Promote;
264 using detail::PromoteType<unsigned char, signed char>::toPromote;
268 struct PromoteTraits<unsigned char, short> :
public detail::PromoteType<unsigned char, short>
270 typedef detail::PromoteType<unsigned char, short>::Promote Promote;
271 using detail::PromoteType<unsigned char, short>::toPromote;
275 struct PromoteTraits<unsigned char, unsigned short> :
public detail::PromoteType<unsigned char, unsigned short>
277 typedef detail::PromoteType<unsigned char, unsigned short>::Promote Promote;
278 using detail::PromoteType<unsigned char, unsigned short>::toPromote;
282 struct PromoteTraits<unsigned char, int> :
public detail::PromoteType<unsigned char, int>
284 typedef detail::PromoteType<unsigned char, int>::Promote Promote;
285 using detail::PromoteType<unsigned char, int>::toPromote;
289 struct PromoteTraits<unsigned char, unsigned int> :
public detail::PromoteType<unsigned char, unsigned int>
291 typedef detail::PromoteType<unsigned char, unsigned int>::Promote Promote;
292 using detail::PromoteType<unsigned char, unsigned int>::toPromote;
296 struct PromoteTraits<unsigned char, long> :
public detail::PromoteType<unsigned char, long>
298 typedef detail::PromoteType<unsigned char, long>::Promote Promote;
299 using detail::PromoteType<unsigned char, long>::toPromote;
303 struct PromoteTraits<unsigned char, unsigned long> :
public detail::PromoteType<unsigned char, unsigned long>
305 typedef detail::PromoteType<unsigned char, unsigned long>::Promote Promote;
306 using detail::PromoteType<unsigned char, unsigned long>::toPromote;
310 struct PromoteTraits<unsigned char, float> :
public detail::PromoteType<unsigned char, float>
312 typedef detail::PromoteType<unsigned char, float>::Promote Promote;
313 using detail::PromoteType<unsigned char, float>::toPromote;
317 struct PromoteTraits<unsigned char, double> :
public detail::PromoteType<unsigned char, double>
319 typedef detail::PromoteType<unsigned char, double>::Promote Promote;
320 using detail::PromoteType<unsigned char, double>::toPromote;
324 struct PromoteTraits<unsigned char, long double> :
public detail::PromoteType<unsigned char, long double>
326 typedef detail::PromoteType<unsigned char, long double>::Promote Promote;
327 using detail::PromoteType<unsigned char, long double>::toPromote;
332 struct PromoteTraits<unsigned char, long long> :
public detail::PromoteType<unsigned char, long long>
334 typedef detail::PromoteType<unsigned char, long long>::Promote Promote;
335 using detail::PromoteType<unsigned char, long long>::toPromote;
341 struct PromoteTraits<unsigned char, unsigned long long> :
public detail::PromoteType<unsigned char, unsigned long long>
343 typedef detail::PromoteType<unsigned char, unsigned long long>::Promote Promote;
344 using detail::PromoteType<unsigned char, unsigned long long>::toPromote;
349 struct PromoteTraits<short, short> :
public detail::PromoteType<short, short>
351 typedef detail::PromoteType<short, short>::Promote Promote;
352 using detail::PromoteType<short, short>::toPromote;
356 struct PromoteTraits<short, bool> :
public detail::PromoteType<short, bool>
358 typedef detail::PromoteType<short, bool>::Promote Promote;
359 using detail::PromoteType<short, bool>::toPromote;
363 struct PromoteTraits<short, signed char> :
public detail::PromoteType<short, signed char>
365 typedef detail::PromoteType<short, signed char>::Promote Promote;
366 using detail::PromoteType<short, signed char>::toPromote;
370 struct PromoteTraits<short, unsigned char> :
public detail::PromoteType<short, unsigned char>
372 typedef detail::PromoteType<short, unsigned char>::Promote Promote;
373 using detail::PromoteType<short, unsigned char>::toPromote;
377 struct PromoteTraits<short, unsigned short> :
public detail::PromoteType<short, unsigned short>
379 typedef detail::PromoteType<short, unsigned short>::Promote Promote;
380 using detail::PromoteType<short, unsigned short>::toPromote;
384 struct PromoteTraits<short, int> :
public detail::PromoteType<short, int>
386 typedef detail::PromoteType<short, int>::Promote Promote;
387 using detail::PromoteType<short, int>::toPromote;
391 struct PromoteTraits<short, unsigned int> :
public detail::PromoteType<short, unsigned int>
393 typedef detail::PromoteType<short, unsigned int>::Promote Promote;
394 using detail::PromoteType<short, unsigned int>::toPromote;
398 struct PromoteTraits<short, long> :
public detail::PromoteType<short, long>
400 typedef detail::PromoteType<short, long>::Promote Promote;
401 using detail::PromoteType<short, long>::toPromote;
405 struct PromoteTraits<short, unsigned long> :
public detail::PromoteType<short, unsigned long>
407 typedef detail::PromoteType<short, unsigned long>::Promote Promote;
408 using detail::PromoteType<short, unsigned long>::toPromote;
412 struct PromoteTraits<short, float> :
public detail::PromoteType<short, float>
414 typedef detail::PromoteType<short, float>::Promote Promote;
415 using detail::PromoteType<short, float>::toPromote;
419 struct PromoteTraits<short, double> :
public detail::PromoteType<short, double>
421 typedef detail::PromoteType<short, double>::Promote Promote;
422 using detail::PromoteType<short, double>::toPromote;
426 struct PromoteTraits<short, long double> :
public detail::PromoteType<short, long double>
428 typedef detail::PromoteType<short, long double>::Promote Promote;
429 using detail::PromoteType<short, long double>::toPromote;
434 struct PromoteTraits<short, long long> :
public detail::PromoteType<short, long long>
436 typedef detail::PromoteType<short, long long>::Promote Promote;
437 using detail::PromoteType<short, long long>::toPromote;
443 struct PromoteTraits<short, unsigned long long> :
public detail::PromoteType<short, unsigned long long>
445 typedef detail::PromoteType<short, unsigned long long>::Promote Promote;
446 using detail::PromoteType<short, unsigned long long>::toPromote;
451 struct PromoteTraits<unsigned short, unsigned short> :
public detail::PromoteType<unsigned short, unsigned short>
453 typedef detail::PromoteType<unsigned short, unsigned short>::Promote Promote;
454 using detail::PromoteType<unsigned short, unsigned short>::toPromote;
458 struct PromoteTraits<unsigned short, bool> :
public detail::PromoteType<unsigned short, bool>
460 typedef detail::PromoteType<unsigned short, bool>::Promote Promote;
461 using detail::PromoteType<unsigned short, bool>::toPromote;
465 struct PromoteTraits<unsigned short, signed char> :
public detail::PromoteType<unsigned short, signed char>
467 typedef detail::PromoteType<unsigned short, signed char>::Promote Promote;
468 using detail::PromoteType<unsigned short, signed char>::toPromote;
472 struct PromoteTraits<unsigned short, unsigned char> :
public detail::PromoteType<unsigned short, unsigned char>
474 typedef detail::PromoteType<unsigned short, unsigned char>::Promote Promote;
475 using detail::PromoteType<unsigned short, unsigned char>::toPromote;
479 struct PromoteTraits<unsigned short, short> :
public detail::PromoteType<unsigned short, short>
481 typedef detail::PromoteType<unsigned short, short>::Promote Promote;
482 using detail::PromoteType<unsigned short, short>::toPromote;
486 struct PromoteTraits<unsigned short, int> :
public detail::PromoteType<unsigned short, int>
488 typedef detail::PromoteType<unsigned short, int>::Promote Promote;
489 using detail::PromoteType<unsigned short, int>::toPromote;
493 struct PromoteTraits<unsigned short, unsigned int> :
public detail::PromoteType<unsigned short, unsigned int>
495 typedef detail::PromoteType<unsigned short, unsigned int>::Promote Promote;
496 using detail::PromoteType<unsigned short, unsigned int>::toPromote;
500 struct PromoteTraits<unsigned short, long> :
public detail::PromoteType<unsigned short, long>
502 typedef detail::PromoteType<unsigned short, long>::Promote Promote;
503 using detail::PromoteType<unsigned short, long>::toPromote;
507 struct PromoteTraits<unsigned short, unsigned long> :
public detail::PromoteType<unsigned short, unsigned long>
509 typedef detail::PromoteType<unsigned short, unsigned long>::Promote Promote;
510 using detail::PromoteType<unsigned short, unsigned long>::toPromote;
514 struct PromoteTraits<unsigned short, float> :
public detail::PromoteType<unsigned short, float>
516 typedef detail::PromoteType<unsigned short, float>::Promote Promote;
517 using detail::PromoteType<unsigned short, float>::toPromote;
521 struct PromoteTraits<unsigned short, double> :
public detail::PromoteType<unsigned short, double>
523 typedef detail::PromoteType<unsigned short, double>::Promote Promote;
524 using detail::PromoteType<unsigned short, double>::toPromote;
528 struct PromoteTraits<unsigned short, long double> :
public detail::PromoteType<unsigned short, long double>
530 typedef detail::PromoteType<unsigned short, long double>::Promote Promote;
531 using detail::PromoteType<unsigned short, long double>::toPromote;
536 struct PromoteTraits<unsigned short, long long> :
public detail::PromoteType<unsigned short, long long>
538 typedef detail::PromoteType<unsigned short, long long>::Promote Promote;
539 using detail::PromoteType<unsigned short, long long>::toPromote;
545 struct PromoteTraits<unsigned short, unsigned long long> :
public detail::PromoteType<unsigned short, unsigned long long>
547 typedef detail::PromoteType<unsigned short, unsigned long long>::Promote Promote;
548 using detail::PromoteType<unsigned short, unsigned long long>::toPromote;
553 struct PromoteTraits<int, int> :
public detail::PromoteType<int, int>
555 typedef detail::PromoteType<int, int>::Promote Promote;
556 using detail::PromoteType<int, int>::toPromote;
560 struct PromoteTraits<int, bool> :
public detail::PromoteType<int, bool>
562 typedef detail::PromoteType<int, bool>::Promote Promote;
563 using detail::PromoteType<int, bool>::toPromote;
567 struct PromoteTraits<int, signed char> :
public detail::PromoteType<int, signed char>
569 typedef detail::PromoteType<int, signed char>::Promote Promote;
570 using detail::PromoteType<int, signed char>::toPromote;
574 struct PromoteTraits<int, unsigned char> :
public detail::PromoteType<int, unsigned char>
576 typedef detail::PromoteType<int, unsigned char>::Promote Promote;
577 using detail::PromoteType<int, unsigned char>::toPromote;
581 struct PromoteTraits<int, short> :
public detail::PromoteType<int, short>
583 typedef detail::PromoteType<int, short>::Promote Promote;
584 using detail::PromoteType<int, short>::toPromote;
588 struct PromoteTraits<int, unsigned short> :
public detail::PromoteType<int, unsigned short>
590 typedef detail::PromoteType<int, unsigned short>::Promote Promote;
591 using detail::PromoteType<int, unsigned short>::toPromote;
595 struct PromoteTraits<int, unsigned int> :
public detail::PromoteType<int, unsigned int>
597 typedef detail::PromoteType<int, unsigned int>::Promote Promote;
598 using detail::PromoteType<int, unsigned int>::toPromote;
602 struct PromoteTraits<int, long> :
public detail::PromoteType<int, long>
604 typedef detail::PromoteType<int, long>::Promote Promote;
605 using detail::PromoteType<int, long>::toPromote;
609 struct PromoteTraits<int, unsigned long> :
public detail::PromoteType<int, unsigned long>
611 typedef detail::PromoteType<int, unsigned long>::Promote Promote;
612 using detail::PromoteType<int, unsigned long>::toPromote;
616 struct PromoteTraits<int, float> :
public detail::PromoteType<int, float>
618 typedef detail::PromoteType<int, float>::Promote Promote;
619 using detail::PromoteType<int, float>::toPromote;
623 struct PromoteTraits<int, double> :
public detail::PromoteType<int, double>
625 typedef detail::PromoteType<int, double>::Promote Promote;
626 using detail::PromoteType<int, double>::toPromote;
630 struct PromoteTraits<int, long double> :
public detail::PromoteType<int, long double>
632 typedef detail::PromoteType<int, long double>::Promote Promote;
633 using detail::PromoteType<int, long double>::toPromote;
638 struct PromoteTraits<int, long long> :
public detail::PromoteType<int, long long>
640 typedef detail::PromoteType<int, long long>::Promote Promote;
641 using detail::PromoteType<int, long long>::toPromote;
647 struct PromoteTraits<int, unsigned long long> :
public detail::PromoteType<int, unsigned long long>
649 typedef detail::PromoteType<int, unsigned long long>::Promote Promote;
650 using detail::PromoteType<int, unsigned long long>::toPromote;
655 struct PromoteTraits<unsigned int, unsigned int> :
public detail::PromoteType<unsigned int, unsigned int>
657 typedef detail::PromoteType<unsigned int, unsigned int>::Promote Promote;
658 using detail::PromoteType<unsigned int, unsigned int>::toPromote;
662 struct PromoteTraits<unsigned int, bool> :
public detail::PromoteType<unsigned int, bool>
664 typedef detail::PromoteType<unsigned int, bool>::Promote Promote;
665 using detail::PromoteType<unsigned int, bool>::toPromote;
669 struct PromoteTraits<unsigned int, signed char> :
public detail::PromoteType<unsigned int, signed char>
671 typedef detail::PromoteType<unsigned int, signed char>::Promote Promote;
672 using detail::PromoteType<unsigned int, signed char>::toPromote;
676 struct PromoteTraits<unsigned int, unsigned char> :
public detail::PromoteType<unsigned int, unsigned char>
678 typedef detail::PromoteType<unsigned int, unsigned char>::Promote Promote;
679 using detail::PromoteType<unsigned int, unsigned char>::toPromote;
683 struct PromoteTraits<unsigned int, short> :
public detail::PromoteType<unsigned int, short>
685 typedef detail::PromoteType<unsigned int, short>::Promote Promote;
686 using detail::PromoteType<unsigned int, short>::toPromote;
690 struct PromoteTraits<unsigned int, unsigned short> :
public detail::PromoteType<unsigned int, unsigned short>
692 typedef detail::PromoteType<unsigned int, unsigned short>::Promote Promote;
693 using detail::PromoteType<unsigned int, unsigned short>::toPromote;
697 struct PromoteTraits<unsigned int, int> :
public detail::PromoteType<unsigned int, int>
699 typedef detail::PromoteType<unsigned int, int>::Promote Promote;
700 using detail::PromoteType<unsigned int, int>::toPromote;
704 struct PromoteTraits<unsigned int, long> :
public detail::PromoteType<unsigned int, long>
706 typedef detail::PromoteType<unsigned int, long>::Promote Promote;
707 using detail::PromoteType<unsigned int, long>::toPromote;
711 struct PromoteTraits<unsigned int, unsigned long> :
public detail::PromoteType<unsigned int, unsigned long>
713 typedef detail::PromoteType<unsigned int, unsigned long>::Promote Promote;
714 using detail::PromoteType<unsigned int, unsigned long>::toPromote;
718 struct PromoteTraits<unsigned int, float> :
public detail::PromoteType<unsigned int, float>
720 typedef detail::PromoteType<unsigned int, float>::Promote Promote;
721 using detail::PromoteType<unsigned int, float>::toPromote;
725 struct PromoteTraits<unsigned int, double> :
public detail::PromoteType<unsigned int, double>
727 typedef detail::PromoteType<unsigned int, double>::Promote Promote;
728 using detail::PromoteType<unsigned int, double>::toPromote;
732 struct PromoteTraits<unsigned int, long double> :
public detail::PromoteType<unsigned int, long double>
734 typedef detail::PromoteType<unsigned int, long double>::Promote Promote;
735 using detail::PromoteType<unsigned int, long double>::toPromote;
740 struct PromoteTraits<unsigned int, long long> :
public detail::PromoteType<unsigned int, long long>
742 typedef detail::PromoteType<unsigned int, long long>::Promote Promote;
743 using detail::PromoteType<unsigned int, long long>::toPromote;
749 struct PromoteTraits<unsigned int, unsigned long long> :
public detail::PromoteType<unsigned int, unsigned long long>
751 typedef detail::PromoteType<unsigned int, unsigned long long>::Promote Promote;
752 using detail::PromoteType<unsigned int, unsigned long long>::toPromote;
757 struct PromoteTraits<long, long> :
public detail::PromoteType<long, long>
759 typedef detail::PromoteType<long, long>::Promote Promote;
760 using detail::PromoteType<long, long>::toPromote;
764 struct PromoteTraits<long, bool> :
public detail::PromoteType<long, bool>
766 typedef detail::PromoteType<long, bool>::Promote Promote;
767 using detail::PromoteType<long, bool>::toPromote;
771 struct PromoteTraits<long, signed char> :
public detail::PromoteType<long, signed char>
773 typedef detail::PromoteType<long, signed char>::Promote Promote;
774 using detail::PromoteType<long, signed char>::toPromote;
778 struct PromoteTraits<long, unsigned char> :
public detail::PromoteType<long, unsigned char>
780 typedef detail::PromoteType<long, unsigned char>::Promote Promote;
781 using detail::PromoteType<long, unsigned char>::toPromote;
785 struct PromoteTraits<long, short> :
public detail::PromoteType<long, short>
787 typedef detail::PromoteType<long, short>::Promote Promote;
788 using detail::PromoteType<long, short>::toPromote;
792 struct PromoteTraits<long, unsigned short> :
public detail::PromoteType<long, unsigned short>
794 typedef detail::PromoteType<long, unsigned short>::Promote Promote;
795 using detail::PromoteType<long, unsigned short>::toPromote;
799 struct PromoteTraits<long, int> :
public detail::PromoteType<long, int>
801 typedef detail::PromoteType<long, int>::Promote Promote;
802 using detail::PromoteType<long, int>::toPromote;
806 struct PromoteTraits<long, unsigned int> :
public detail::PromoteType<long, unsigned int>
808 typedef detail::PromoteType<long, unsigned int>::Promote Promote;
809 using detail::PromoteType<long, unsigned int>::toPromote;
813 struct PromoteTraits<long, unsigned long> :
public detail::PromoteType<long, unsigned long>
815 typedef detail::PromoteType<long, unsigned long>::Promote Promote;
816 using detail::PromoteType<long, unsigned long>::toPromote;
820 struct PromoteTraits<long, float> :
public detail::PromoteType<long, float>
822 typedef detail::PromoteType<long, float>::Promote Promote;
823 using detail::PromoteType<long, float>::toPromote;
827 struct PromoteTraits<long, double> :
public detail::PromoteType<long, double>
829 typedef detail::PromoteType<long, double>::Promote Promote;
830 using detail::PromoteType<long, double>::toPromote;
834 struct PromoteTraits<long, long double> :
public detail::PromoteType<long, long double>
836 typedef detail::PromoteType<long, long double>::Promote Promote;
837 using detail::PromoteType<long, long double>::toPromote;
842 struct PromoteTraits<long, long long> :
public detail::PromoteType<long, long long>
844 typedef detail::PromoteType<long, long long>::Promote Promote;
845 using detail::PromoteType<long, long long>::toPromote;
851 struct PromoteTraits<long, unsigned long long> :
public detail::PromoteType<long, unsigned long long>
853 typedef detail::PromoteType<long, unsigned long long>::Promote Promote;
854 using detail::PromoteType<long, unsigned long long>::toPromote;
859 struct PromoteTraits<unsigned long, unsigned long> :
public detail::PromoteType<unsigned long, unsigned long>
861 typedef detail::PromoteType<unsigned long, unsigned long>::Promote Promote;
862 using detail::PromoteType<unsigned long, unsigned long>::toPromote;
866 struct PromoteTraits<unsigned long, bool> :
public detail::PromoteType<unsigned long, bool>
868 typedef detail::PromoteType<unsigned long, bool>::Promote Promote;
869 using detail::PromoteType<unsigned long, bool>::toPromote;
873 struct PromoteTraits<unsigned long, signed char> :
public detail::PromoteType<unsigned long, signed char>
875 typedef detail::PromoteType<unsigned long, signed char>::Promote Promote;
876 using detail::PromoteType<unsigned long, signed char>::toPromote;
880 struct PromoteTraits<unsigned long, unsigned char> :
public detail::PromoteType<unsigned long, unsigned char>
882 typedef detail::PromoteType<unsigned long, unsigned char>::Promote Promote;
883 using detail::PromoteType<unsigned long, unsigned char>::toPromote;
887 struct PromoteTraits<unsigned long, short> :
public detail::PromoteType<unsigned long, short>
889 typedef detail::PromoteType<unsigned long, short>::Promote Promote;
890 using detail::PromoteType<unsigned long, short>::toPromote;
894 struct PromoteTraits<unsigned long, unsigned short> :
public detail::PromoteType<unsigned long, unsigned short>
896 typedef detail::PromoteType<unsigned long, unsigned short>::Promote Promote;
897 using detail::PromoteType<unsigned long, unsigned short>::toPromote;
901 struct PromoteTraits<unsigned long, int> :
public detail::PromoteType<unsigned long, int>
903 typedef detail::PromoteType<unsigned long, int>::Promote Promote;
904 using detail::PromoteType<unsigned long, int>::toPromote;
908 struct PromoteTraits<unsigned long, unsigned int> :
public detail::PromoteType<unsigned long, unsigned int>
910 typedef detail::PromoteType<unsigned long, unsigned int>::Promote Promote;
911 using detail::PromoteType<unsigned long, unsigned int>::toPromote;
915 struct PromoteTraits<unsigned long, long> :
public detail::PromoteType<unsigned long, long>
917 typedef detail::PromoteType<unsigned long, long>::Promote Promote;
918 using detail::PromoteType<unsigned long, long>::toPromote;
922 struct PromoteTraits<unsigned long, float> :
public detail::PromoteType<unsigned long, float>
924 typedef detail::PromoteType<unsigned long, float>::Promote Promote;
925 using detail::PromoteType<unsigned long, float>::toPromote;
929 struct PromoteTraits<unsigned long, double> :
public detail::PromoteType<unsigned long, double>
931 typedef detail::PromoteType<unsigned long, double>::Promote Promote;
932 using detail::PromoteType<unsigned long, double>::toPromote;
936 struct PromoteTraits<unsigned long, long double> :
public detail::PromoteType<unsigned long, long double>
938 typedef detail::PromoteType<unsigned long, long double>::Promote Promote;
939 using detail::PromoteType<unsigned long, long double>::toPromote;
944 struct PromoteTraits<unsigned long, long long> :
public detail::PromoteType<unsigned long, long long>
946 typedef detail::PromoteType<unsigned long, long long>::Promote Promote;
947 using detail::PromoteType<unsigned long, long long>::toPromote;
953 struct PromoteTraits<unsigned long, unsigned long long> :
public detail::PromoteType<unsigned long, unsigned long long>
955 typedef detail::PromoteType<unsigned long, unsigned long long>::Promote Promote;
956 using detail::PromoteType<unsigned long, unsigned long long>::toPromote;
961 struct PromoteTraits<float, float> :
public detail::PromoteType<float, float>
963 typedef detail::PromoteType<float, float>::Promote Promote;
964 using detail::PromoteType<float, float>::toPromote;
968 struct PromoteTraits<float, bool> :
public detail::PromoteType<float, bool>
970 typedef detail::PromoteType<float, bool>::Promote Promote;
971 using detail::PromoteType<float, bool>::toPromote;
975 struct PromoteTraits<float, signed char> :
public detail::PromoteType<float, signed char>
977 typedef detail::PromoteType<float, signed char>::Promote Promote;
978 using detail::PromoteType<float, signed char>::toPromote;
982 struct PromoteTraits<float, unsigned char> :
public detail::PromoteType<float, unsigned char>
984 typedef detail::PromoteType<float, unsigned char>::Promote Promote;
985 using detail::PromoteType<float, unsigned char>::toPromote;
989 struct PromoteTraits<float, short> :
public detail::PromoteType<float, short>
991 typedef detail::PromoteType<float, short>::Promote Promote;
992 using detail::PromoteType<float, short>::toPromote;
996 struct PromoteTraits<float, unsigned short> :
public detail::PromoteType<float, unsigned short>
998 typedef detail::PromoteType<float, unsigned short>::Promote Promote;
999 using detail::PromoteType<float, unsigned short>::toPromote;
1003 struct PromoteTraits<float, int> :
public detail::PromoteType<float, int>
1005 typedef detail::PromoteType<float, int>::Promote Promote;
1006 using detail::PromoteType<float, int>::toPromote;
1010 struct PromoteTraits<float, unsigned int> :
public detail::PromoteType<float, unsigned int>
1012 typedef detail::PromoteType<float, unsigned int>::Promote Promote;
1013 using detail::PromoteType<float, unsigned int>::toPromote;
1017 struct PromoteTraits<float, long> :
public detail::PromoteType<float, long>
1019 typedef detail::PromoteType<float, long>::Promote Promote;
1020 using detail::PromoteType<float, long>::toPromote;
1024 struct PromoteTraits<float, unsigned long> :
public detail::PromoteType<float, unsigned long>
1026 typedef detail::PromoteType<float, unsigned long>::Promote Promote;
1027 using detail::PromoteType<float, unsigned long>::toPromote;
1031 struct PromoteTraits<float, double> :
public detail::PromoteType<float, double>
1033 typedef detail::PromoteType<float, double>::Promote Promote;
1034 using detail::PromoteType<float, double>::toPromote;
1038 struct PromoteTraits<float, long double> :
public detail::PromoteType<float, long double>
1040 typedef detail::PromoteType<float, long double>::Promote Promote;
1041 using detail::PromoteType<float, long double>::toPromote;
1046 struct PromoteTraits<float, long long> :
public detail::PromoteType<float, long long>
1048 typedef detail::PromoteType<float, long long>::Promote Promote;
1049 using detail::PromoteType<float, long long>::toPromote;
1055 struct PromoteTraits<float, unsigned long long> :
public detail::PromoteType<float, unsigned long long>
1057 typedef detail::PromoteType<float, unsigned long long>::Promote Promote;
1058 using detail::PromoteType<float, unsigned long long>::toPromote;
1063 struct PromoteTraits<double, double> :
public detail::PromoteType<double, double>
1065 typedef detail::PromoteType<double, double>::Promote Promote;
1066 using detail::PromoteType<double, double>::toPromote;
1070 struct PromoteTraits<double, bool> :
public detail::PromoteType<double, bool>
1072 typedef detail::PromoteType<double, bool>::Promote Promote;
1073 using detail::PromoteType<double, bool>::toPromote;
1077 struct PromoteTraits<double, signed char> :
public detail::PromoteType<double, signed char>
1079 typedef detail::PromoteType<double, signed char>::Promote Promote;
1080 using detail::PromoteType<double, signed char>::toPromote;
1084 struct PromoteTraits<double, unsigned char> :
public detail::PromoteType<double, unsigned char>
1086 typedef detail::PromoteType<double, unsigned char>::Promote Promote;
1087 using detail::PromoteType<double, unsigned char>::toPromote;
1091 struct PromoteTraits<double, short> :
public detail::PromoteType<double, short>
1093 typedef detail::PromoteType<double, short>::Promote Promote;
1094 using detail::PromoteType<double, short>::toPromote;
1098 struct PromoteTraits<double, unsigned short> :
public detail::PromoteType<double, unsigned short>
1100 typedef detail::PromoteType<double, unsigned short>::Promote Promote;
1101 using detail::PromoteType<double, unsigned short>::toPromote;
1105 struct PromoteTraits<double, int> :
public detail::PromoteType<double, int>
1107 typedef detail::PromoteType<double, int>::Promote Promote;
1108 using detail::PromoteType<double, int>::toPromote;
1112 struct PromoteTraits<double, unsigned int> :
public detail::PromoteType<double, unsigned int>
1114 typedef detail::PromoteType<double, unsigned int>::Promote Promote;
1115 using detail::PromoteType<double, unsigned int>::toPromote;
1119 struct PromoteTraits<double, long> :
public detail::PromoteType<double, long>
1121 typedef detail::PromoteType<double, long>::Promote Promote;
1122 using detail::PromoteType<double, long>::toPromote;
1126 struct PromoteTraits<double, unsigned long> :
public detail::PromoteType<double, unsigned long>
1128 typedef detail::PromoteType<double, unsigned long>::Promote Promote;
1129 using detail::PromoteType<double, unsigned long>::toPromote;
1133 struct PromoteTraits<double, float> :
public detail::PromoteType<double, float>
1135 typedef detail::PromoteType<double, float>::Promote Promote;
1136 using detail::PromoteType<double, float>::toPromote;
1140 struct PromoteTraits<double, long double> :
public detail::PromoteType<double, long double>
1142 typedef detail::PromoteType<double, long double>::Promote Promote;
1143 using detail::PromoteType<double, long double>::toPromote;
1148 struct PromoteTraits<double, long long> :
public detail::PromoteType<double, long long>
1150 typedef detail::PromoteType<double, long long>::Promote Promote;
1151 using detail::PromoteType<double, long long>::toPromote;
1157 struct PromoteTraits<double, unsigned long long> :
public detail::PromoteType<double, unsigned long long>
1159 typedef detail::PromoteType<double, unsigned long long>::Promote Promote;
1160 using detail::PromoteType<double, unsigned long long>::toPromote;
1165 struct PromoteTraits<long double, long double> :
public detail::PromoteType<long double, long double>
1167 typedef detail::PromoteType<long double, long double>::Promote Promote;
1168 using detail::PromoteType<long double, long double>::toPromote;
1172 struct PromoteTraits<long double, bool> :
public detail::PromoteType<long double, bool>
1174 typedef detail::PromoteType<long double, bool>::Promote Promote;
1175 using detail::PromoteType<long double, bool>::toPromote;
1179 struct PromoteTraits<long double, signed char> :
public detail::PromoteType<long double, signed char>
1181 typedef detail::PromoteType<long double, signed char>::Promote Promote;
1182 using detail::PromoteType<long double, signed char>::toPromote;
1186 struct PromoteTraits<long double, unsigned char> :
public detail::PromoteType<long double, unsigned char>
1188 typedef detail::PromoteType<long double, unsigned char>::Promote Promote;
1189 using detail::PromoteType<long double, unsigned char>::toPromote;
1193 struct PromoteTraits<long double, short> :
public detail::PromoteType<long double, short>
1195 typedef detail::PromoteType<long double, short>::Promote Promote;
1196 using detail::PromoteType<long double, short>::toPromote;
1200 struct PromoteTraits<long double, unsigned short> :
public detail::PromoteType<long double, unsigned short>
1202 typedef detail::PromoteType<long double, unsigned short>::Promote Promote;
1203 using detail::PromoteType<long double, unsigned short>::toPromote;
1207 struct PromoteTraits<long double, int> :
public detail::PromoteType<long double, int>
1209 typedef detail::PromoteType<long double, int>::Promote Promote;
1210 using detail::PromoteType<long double, int>::toPromote;
1214 struct PromoteTraits<long double, unsigned int> :
public detail::PromoteType<long double, unsigned int>
1216 typedef detail::PromoteType<long double, unsigned int>::Promote Promote;
1217 using detail::PromoteType<long double, unsigned int>::toPromote;
1221 struct PromoteTraits<long double, long> :
public detail::PromoteType<long double, long>
1223 typedef detail::PromoteType<long double, long>::Promote Promote;
1224 using detail::PromoteType<long double, long>::toPromote;
1228 struct PromoteTraits<long double, unsigned long> :
public detail::PromoteType<long double, unsigned long>
1230 typedef detail::PromoteType<long double, unsigned long>::Promote Promote;
1231 using detail::PromoteType<long double, unsigned long>::toPromote;
1235 struct PromoteTraits<long double, float> :
public detail::PromoteType<long double, float>
1237 typedef detail::PromoteType<long double, float>::Promote Promote;
1238 using detail::PromoteType<long double, float>::toPromote;
1242 struct PromoteTraits<long double, double> :
public detail::PromoteType<long double, double>
1244 typedef detail::PromoteType<long double, double>::Promote Promote;
1245 using detail::PromoteType<long double, double>::toPromote;
1250 struct PromoteTraits<long double, long long> :
public detail::PromoteType<long double, long long>
1252 typedef detail::PromoteType<long double, long long>::Promote Promote;
1253 using detail::PromoteType<long double, long long>::toPromote;
1259 struct PromoteTraits<long double, unsigned long long> :
public detail::PromoteType<long double, unsigned long long>
1261 typedef detail::PromoteType<long double, unsigned long long>::Promote Promote;
1262 using detail::PromoteType<long double, unsigned long long>::toPromote;
1268 struct PromoteTraits<long long, long long> :
public detail::PromoteType<long long, long long>
1270 typedef detail::PromoteType<long long, long long>::Promote Promote;
1271 using detail::PromoteType<long long, long long>::toPromote;
1277 struct PromoteTraits<long long, bool> :
public detail::PromoteType<long long, bool>
1279 typedef detail::PromoteType<long long, bool>::Promote Promote;
1280 using detail::PromoteType<long long, bool>::toPromote;
1286 struct PromoteTraits<long long, signed char> :
public detail::PromoteType<long long, signed char>
1288 typedef detail::PromoteType<long long, signed char>::Promote Promote;
1289 using detail::PromoteType<long long, signed char>::toPromote;
1295 struct PromoteTraits<long long, unsigned char> :
public detail::PromoteType<long long, unsigned char>
1297 typedef detail::PromoteType<long long, unsigned char>::Promote Promote;
1298 using detail::PromoteType<long long, unsigned char>::toPromote;
1304 struct PromoteTraits<long long, short> :
public detail::PromoteType<long long, short>
1306 typedef detail::PromoteType<long long, short>::Promote Promote;
1307 using detail::PromoteType<long long, short>::toPromote;
1313 struct PromoteTraits<long long, unsigned short> :
public detail::PromoteType<long long, unsigned short>
1315 typedef detail::PromoteType<long long, unsigned short>::Promote Promote;
1316 using detail::PromoteType<long long, unsigned short>::toPromote;
1322 struct PromoteTraits<long long, int> :
public detail::PromoteType<long long, int>
1324 typedef detail::PromoteType<long long, int>::Promote Promote;
1325 using detail::PromoteType<long long, int>::toPromote;
1331 struct PromoteTraits<long long, unsigned int> :
public detail::PromoteType<long long, unsigned int>
1333 typedef detail::PromoteType<long long, unsigned int>::Promote Promote;
1334 using detail::PromoteType<long long, unsigned int>::toPromote;
1340 struct PromoteTraits<long long, long> :
public detail::PromoteType<long long, long>
1342 typedef detail::PromoteType<long long, long>::Promote Promote;
1343 using detail::PromoteType<long long, long>::toPromote;
1349 struct PromoteTraits<long long, unsigned long> :
public detail::PromoteType<long long, unsigned long>
1351 typedef detail::PromoteType<long long, unsigned long>::Promote Promote;
1352 using detail::PromoteType<long long, unsigned long>::toPromote;
1358 struct PromoteTraits<long long, float> :
public detail::PromoteType<long long, float>
1360 typedef detail::PromoteType<long long, float>::Promote Promote;
1361 using detail::PromoteType<long long, float>::toPromote;
1367 struct PromoteTraits<long long, double> :
public detail::PromoteType<long long, double>
1369 typedef detail::PromoteType<long long, double>::Promote Promote;
1370 using detail::PromoteType<long long, double>::toPromote;
1376 struct PromoteTraits<long long, long double> :
public detail::PromoteType<long long, long double>
1378 typedef detail::PromoteType<long long, long double>::Promote Promote;
1379 using detail::PromoteType<long long, long double>::toPromote;
1385 struct PromoteTraits<long long, unsigned long long> :
public detail::PromoteType<long long, unsigned long long>
1387 typedef detail::PromoteType<long long, unsigned long long>::Promote Promote;
1388 using detail::PromoteType<long long, unsigned long long>::toPromote;
1394 struct PromoteTraits<unsigned long long, unsigned long long> :
public detail::PromoteType<unsigned long long, unsigned long long>
1396 typedef detail::PromoteType<unsigned long long, unsigned long long>::Promote Promote;
1397 using detail::PromoteType<unsigned long long, unsigned long long>::toPromote;
1403 struct PromoteTraits<unsigned long long, bool> :
public detail::PromoteType<unsigned long long, bool>
1405 typedef detail::PromoteType<unsigned long long, bool>::Promote Promote;
1406 using detail::PromoteType<unsigned long long, bool>::toPromote;
1412 struct PromoteTraits<unsigned long long, signed char> :
public detail::PromoteType<unsigned long long, signed char>
1414 typedef detail::PromoteType<unsigned long long, signed char>::Promote Promote;
1415 using detail::PromoteType<unsigned long long, signed char>::toPromote;
1421 struct PromoteTraits<unsigned long long, unsigned char> :
public detail::PromoteType<unsigned long long, unsigned char>
1423 typedef detail::PromoteType<unsigned long long, unsigned char>::Promote Promote;
1424 using detail::PromoteType<unsigned long long, unsigned char>::toPromote;
1430 struct PromoteTraits<unsigned long long, short> :
public detail::PromoteType<unsigned long long, short>
1432 typedef detail::PromoteType<unsigned long long, short>::Promote Promote;
1433 using detail::PromoteType<unsigned long long, short>::toPromote;
1439 struct PromoteTraits<unsigned long long, unsigned short> :
public detail::PromoteType<unsigned long long, unsigned short>
1441 typedef detail::PromoteType<unsigned long long, unsigned short>::Promote Promote;
1442 using detail::PromoteType<unsigned long long, unsigned short>::toPromote;
1448 struct PromoteTraits<unsigned long long, int> :
public detail::PromoteType<unsigned long long, int>
1450 typedef detail::PromoteType<unsigned long long, int>::Promote Promote;
1451 using detail::PromoteType<unsigned long long, int>::toPromote;
1457 struct PromoteTraits<unsigned long long, unsigned int> :
public detail::PromoteType<unsigned long long, unsigned int>
1459 typedef detail::PromoteType<unsigned long long, unsigned int>::Promote Promote;
1460 using detail::PromoteType<unsigned long long, unsigned int>::toPromote;
1466 struct PromoteTraits<unsigned long long, long> :
public detail::PromoteType<unsigned long long, long>
1468 typedef detail::PromoteType<unsigned long long, long>::Promote Promote;
1469 using detail::PromoteType<unsigned long long, long>::toPromote;
1475 struct PromoteTraits<unsigned long long, unsigned long> :
public detail::PromoteType<unsigned long long, unsigned long>
1477 typedef detail::PromoteType<unsigned long long, unsigned long>::Promote Promote;
1478 using detail::PromoteType<unsigned long long, unsigned long>::toPromote;
1484 struct PromoteTraits<unsigned long long, float> :
public detail::PromoteType<unsigned long long, float>
1486 typedef detail::PromoteType<unsigned long long, float>::Promote Promote;
1487 using detail::PromoteType<unsigned long long, float>::toPromote;
1493 struct PromoteTraits<unsigned long long, double> :
public detail::PromoteType<unsigned long long, double>
1495 typedef detail::PromoteType<unsigned long long, double>::Promote Promote;
1496 using detail::PromoteType<unsigned long long, double>::toPromote;
1502 struct PromoteTraits<unsigned long long, long double> :
public detail::PromoteType<unsigned long long, long double>
1504 typedef detail::PromoteType<unsigned long long, long double>::Promote Promote;
1505 using detail::PromoteType<unsigned long long, long double>::toPromote;
1511 struct PromoteTraits<unsigned long long, long long> :
public detail::PromoteType<unsigned long long, long long>
1513 typedef detail::PromoteType<unsigned long long, long long>::Promote Promote;
1514 using detail::PromoteType<unsigned long long, long long>::toPromote;
1520 #endif // VIGRA_PROMOTETRAITS_HXX