37#ifndef VIGRA_PROMOTETRAITS_HXX
38#define VIGRA_PROMOTETRAITS_HXX
43struct PromoteTraits<bool, bool> :
public detail::PromoteType<bool, bool>
45 typedef detail::PromoteType<bool, bool>::Promote Promote;
46 using detail::PromoteType<bool,
bool>::toPromote;
50struct 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;
57struct 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;
64struct PromoteTraits<bool, short> :
public detail::PromoteType<bool, short>
66 typedef detail::PromoteType<bool, short>::Promote Promote;
67 using detail::PromoteType<bool,
short>::toPromote;
71struct 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;
78struct PromoteTraits<bool, int> :
public detail::PromoteType<bool, int>
80 typedef detail::PromoteType<bool, int>::Promote Promote;
81 using detail::PromoteType<bool,
int>::toPromote;
85struct 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;
92struct PromoteTraits<bool, long> :
public detail::PromoteType<bool, long>
94 typedef detail::PromoteType<bool, long>::Promote Promote;
95 using detail::PromoteType<bool,
long>::toPromote;
99struct 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;
106struct PromoteTraits<bool, float> :
public detail::PromoteType<bool, float>
108 typedef detail::PromoteType<bool, float>::Promote Promote;
109 using detail::PromoteType<bool,
float>::toPromote;
113struct PromoteTraits<bool, double> :
public detail::PromoteType<bool, double>
115 typedef detail::PromoteType<bool, double>::Promote Promote;
116 using detail::PromoteType<bool,
double>::toPromote;
120struct 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;
128struct 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;
137struct 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;
145struct 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;
152struct 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;
159struct 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;
166struct 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;
173struct 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;
180struct 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;
187struct 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;
194struct 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;
201struct 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;
208struct 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;
215struct 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;
222struct 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;
230struct 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;
239struct 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;
247struct 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;
254struct 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;
261struct 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;
268struct 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;
275struct 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;
282struct 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;
289struct 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;
296struct 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;
303struct 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;
310struct 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;
317struct 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;
324struct 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;
332struct 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;
341struct 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;
349struct PromoteTraits<short, short> :
public detail::PromoteType<short, short>
351 typedef detail::PromoteType<short, short>::Promote Promote;
352 using detail::PromoteType<short,
short>::toPromote;
356struct PromoteTraits<short, bool> :
public detail::PromoteType<short, bool>
358 typedef detail::PromoteType<short, bool>::Promote Promote;
359 using detail::PromoteType<short,
bool>::toPromote;
363struct 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;
370struct 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;
377struct 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;
384struct PromoteTraits<short, int> :
public detail::PromoteType<short, int>
386 typedef detail::PromoteType<short, int>::Promote Promote;
387 using detail::PromoteType<short,
int>::toPromote;
391struct 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;
398struct PromoteTraits<short, long> :
public detail::PromoteType<short, long>
400 typedef detail::PromoteType<short, long>::Promote Promote;
401 using detail::PromoteType<short,
long>::toPromote;
405struct 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;
412struct PromoteTraits<short, float> :
public detail::PromoteType<short, float>
414 typedef detail::PromoteType<short, float>::Promote Promote;
415 using detail::PromoteType<short,
float>::toPromote;
419struct PromoteTraits<short, double> :
public detail::PromoteType<short, double>
421 typedef detail::PromoteType<short, double>::Promote Promote;
422 using detail::PromoteType<short,
double>::toPromote;
426struct 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;
434struct 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;
443struct 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;
451struct 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;
458struct 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;
465struct 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;
472struct 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;
479struct 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;
486struct 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;
493struct 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;
500struct 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;
507struct 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;
514struct 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;
521struct 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;
528struct 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;
536struct 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;
545struct 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;
553struct PromoteTraits<int, int> :
public detail::PromoteType<int, int>
555 typedef detail::PromoteType<int, int>::Promote Promote;
556 using detail::PromoteType<int,
int>::toPromote;
560struct PromoteTraits<int, bool> :
public detail::PromoteType<int, bool>
562 typedef detail::PromoteType<int, bool>::Promote Promote;
563 using detail::PromoteType<int,
bool>::toPromote;
567struct 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;
574struct 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;
581struct PromoteTraits<int, short> :
public detail::PromoteType<int, short>
583 typedef detail::PromoteType<int, short>::Promote Promote;
584 using detail::PromoteType<int,
short>::toPromote;
588struct 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;
595struct 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;
602struct PromoteTraits<int, long> :
public detail::PromoteType<int, long>
604 typedef detail::PromoteType<int, long>::Promote Promote;
605 using detail::PromoteType<int,
long>::toPromote;
609struct 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;
616struct PromoteTraits<int, float> :
public detail::PromoteType<int, float>
618 typedef detail::PromoteType<int, float>::Promote Promote;
619 using detail::PromoteType<int,
float>::toPromote;
623struct PromoteTraits<int, double> :
public detail::PromoteType<int, double>
625 typedef detail::PromoteType<int, double>::Promote Promote;
626 using detail::PromoteType<int,
double>::toPromote;
630struct 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;
638struct 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;
647struct 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;
655struct 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;
662struct 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;
669struct 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;
676struct 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;
683struct 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;
690struct 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;
697struct 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;
704struct 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;
711struct 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;
718struct 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;
725struct 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;
732struct 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;
740struct 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;
749struct 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;
757struct PromoteTraits<long, long> :
public detail::PromoteType<long, long>
759 typedef detail::PromoteType<long, long>::Promote Promote;
760 using detail::PromoteType<long,
long>::toPromote;
764struct PromoteTraits<long, bool> :
public detail::PromoteType<long, bool>
766 typedef detail::PromoteType<long, bool>::Promote Promote;
767 using detail::PromoteType<long,
bool>::toPromote;
771struct 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;
778struct 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;
785struct PromoteTraits<long, short> :
public detail::PromoteType<long, short>
787 typedef detail::PromoteType<long, short>::Promote Promote;
788 using detail::PromoteType<long,
short>::toPromote;
792struct 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;
799struct PromoteTraits<long, int> :
public detail::PromoteType<long, int>
801 typedef detail::PromoteType<long, int>::Promote Promote;
802 using detail::PromoteType<long,
int>::toPromote;
806struct 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;
813struct 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;
820struct PromoteTraits<long, float> :
public detail::PromoteType<long, float>
822 typedef detail::PromoteType<long, float>::Promote Promote;
823 using detail::PromoteType<long,
float>::toPromote;
827struct PromoteTraits<long, double> :
public detail::PromoteType<long, double>
829 typedef detail::PromoteType<long, double>::Promote Promote;
830 using detail::PromoteType<long,
double>::toPromote;
834struct 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;
842struct 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;
851struct 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;
859struct 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;
866struct 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;
873struct 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;
880struct 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;
887struct 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;
894struct 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;
901struct 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;
908struct 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;
915struct 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;
922struct 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;
929struct 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;
936struct 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;
944struct 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;
953struct 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;
961struct PromoteTraits<float, float> :
public detail::PromoteType<float, float>
963 typedef detail::PromoteType<float, float>::Promote Promote;
964 using detail::PromoteType<float,
float>::toPromote;
968struct PromoteTraits<float, bool> :
public detail::PromoteType<float, bool>
970 typedef detail::PromoteType<float, bool>::Promote Promote;
971 using detail::PromoteType<float,
bool>::toPromote;
975struct 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;
982struct 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;
989struct PromoteTraits<float, short> :
public detail::PromoteType<float, short>
991 typedef detail::PromoteType<float, short>::Promote Promote;
992 using detail::PromoteType<float,
short>::toPromote;
996struct 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;
1003struct PromoteTraits<float, int> :
public detail::PromoteType<float, int>
1005 typedef detail::PromoteType<float, int>::Promote Promote;
1006 using detail::PromoteType<float,
int>::toPromote;
1010struct 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;
1017struct PromoteTraits<float, long> :
public detail::PromoteType<float, long>
1019 typedef detail::PromoteType<float, long>::Promote Promote;
1020 using detail::PromoteType<float,
long>::toPromote;
1024struct 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;
1031struct PromoteTraits<float, double> :
public detail::PromoteType<float, double>
1033 typedef detail::PromoteType<float, double>::Promote Promote;
1034 using detail::PromoteType<float,
double>::toPromote;
1038struct 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;
1046struct 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;
1055struct 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;
1063struct PromoteTraits<double, double> :
public detail::PromoteType<double, double>
1065 typedef detail::PromoteType<double, double>::Promote Promote;
1066 using detail::PromoteType<double,
double>::toPromote;
1070struct PromoteTraits<double, bool> :
public detail::PromoteType<double, bool>
1072 typedef detail::PromoteType<double, bool>::Promote Promote;
1073 using detail::PromoteType<double,
bool>::toPromote;
1077struct 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;
1084struct 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;
1091struct PromoteTraits<double, short> :
public detail::PromoteType<double, short>
1093 typedef detail::PromoteType<double, short>::Promote Promote;
1094 using detail::PromoteType<double,
short>::toPromote;
1098struct 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;
1105struct PromoteTraits<double, int> :
public detail::PromoteType<double, int>
1107 typedef detail::PromoteType<double, int>::Promote Promote;
1108 using detail::PromoteType<double,
int>::toPromote;
1112struct 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;
1119struct PromoteTraits<double, long> :
public detail::PromoteType<double, long>
1121 typedef detail::PromoteType<double, long>::Promote Promote;
1122 using detail::PromoteType<double,
long>::toPromote;
1126struct 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;
1133struct PromoteTraits<double, float> :
public detail::PromoteType<double, float>
1135 typedef detail::PromoteType<double, float>::Promote Promote;
1136 using detail::PromoteType<double,
float>::toPromote;
1140struct 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;
1148struct 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;
1157struct 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;
1165struct 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;
1172struct 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;
1179struct 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;
1186struct 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;
1193struct 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;
1200struct 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;
1207struct 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;
1214struct 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;
1221struct 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;
1228struct 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;
1235struct 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;
1242struct 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;
1250struct 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;
1259struct 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;
1268struct 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;
1277struct 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;
1286struct 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;
1295struct 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;
1304struct 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;
1313struct 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;
1322struct 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;
1331struct 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;
1340struct 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;
1349struct 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;
1358struct 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;
1367struct 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;
1376struct 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;
1385struct 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;
1394struct 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;
1403struct 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;
1412struct 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;
1421struct 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;
1430struct 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;
1439struct 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;
1448struct 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;
1457struct 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;
1466struct 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;
1475struct 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;
1484struct 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;
1493struct 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;
1502struct 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;
1511struct 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;