]> git.donarmstrong.com Git - rsem.git/blob - boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp
Updated boost to v1.55.0
[rsem.git] / boost / numeric / conversion / detail / preprocessed / numeric_cast_traits_common.hpp
1 //
2 //! Copyright (c) 2011-2012
3 //! Brandon Kohn
4 //
5 //  Distributed under the Boost Software License, Version 1.0. (See
6 //  accompanying file LICENSE_1_0.txt or copy at
7 //  http://www.boost.org/LICENSE_1_0.txt)
8 //
9         
10         
11         
12 namespace boost { namespace numeric {
13     
14     template <>
15     struct numeric_cast_traits
16         <
17             char
18           , char
19         >
20     {
21         typedef def_overflow_handler overflow_policy;
22         typedef UseInternalRangeChecker range_checking_policy;
23         typedef Trunc<char> rounding_policy;
24     }; 
25     
26     template <>
27     struct numeric_cast_traits
28         <
29             char
30           , signed char
31         >
32     {
33         typedef def_overflow_handler overflow_policy;
34         typedef UseInternalRangeChecker range_checking_policy;
35         typedef Trunc<signed char> rounding_policy;
36     }; 
37     
38     template <>
39     struct numeric_cast_traits
40         <
41             char
42           , unsigned char
43         >
44     {
45         typedef def_overflow_handler overflow_policy;
46         typedef UseInternalRangeChecker range_checking_policy;
47         typedef Trunc<unsigned char> rounding_policy;
48     }; 
49     
50     template <>
51     struct numeric_cast_traits
52         <
53             char
54           , short
55         >
56     {
57         typedef def_overflow_handler overflow_policy;
58         typedef UseInternalRangeChecker range_checking_policy;
59         typedef Trunc<short> rounding_policy;
60     }; 
61     
62     template <>
63     struct numeric_cast_traits
64         <
65             char
66           , unsigned short
67         >
68     {
69         typedef def_overflow_handler overflow_policy;
70         typedef UseInternalRangeChecker range_checking_policy;
71         typedef Trunc<unsigned short> rounding_policy;
72     }; 
73     
74     template <>
75     struct numeric_cast_traits
76         <
77             char
78           , int
79         >
80     {
81         typedef def_overflow_handler overflow_policy;
82         typedef UseInternalRangeChecker range_checking_policy;
83         typedef Trunc<int> rounding_policy;
84     }; 
85     
86     template <>
87     struct numeric_cast_traits
88         <
89             char
90           , unsigned int
91         >
92     {
93         typedef def_overflow_handler overflow_policy;
94         typedef UseInternalRangeChecker range_checking_policy;
95         typedef Trunc<unsigned int> rounding_policy;
96     }; 
97     
98     template <>
99     struct numeric_cast_traits
100         <
101             char
102           , long
103         >
104     {
105         typedef def_overflow_handler overflow_policy;
106         typedef UseInternalRangeChecker range_checking_policy;
107         typedef Trunc<long> rounding_policy;
108     }; 
109     
110     template <>
111     struct numeric_cast_traits
112         <
113             char
114           , unsigned long
115         >
116     {
117         typedef def_overflow_handler overflow_policy;
118         typedef UseInternalRangeChecker range_checking_policy;
119         typedef Trunc<unsigned long> rounding_policy;
120     }; 
121     
122     template <>
123     struct numeric_cast_traits
124         <
125             char
126           , float
127         >
128     {
129         typedef def_overflow_handler overflow_policy;
130         typedef UseInternalRangeChecker range_checking_policy;
131         typedef Trunc<float> rounding_policy;
132     }; 
133     
134     template <>
135     struct numeric_cast_traits
136         <
137             char
138           , double
139         >
140     {
141         typedef def_overflow_handler overflow_policy;
142         typedef UseInternalRangeChecker range_checking_policy;
143         typedef Trunc<double> rounding_policy;
144     }; 
145     
146     template <>
147     struct numeric_cast_traits
148         <
149             char
150           , long double
151         >
152     {
153         typedef def_overflow_handler overflow_policy;
154         typedef UseInternalRangeChecker range_checking_policy;
155         typedef Trunc<long double> rounding_policy;
156     }; 
157     
158     template <>
159     struct numeric_cast_traits
160         <
161             signed char
162           , char
163         >
164     {
165         typedef def_overflow_handler overflow_policy;
166         typedef UseInternalRangeChecker range_checking_policy;
167         typedef Trunc<char> rounding_policy;
168     }; 
169     
170     template <>
171     struct numeric_cast_traits
172         <
173             signed char
174           , signed char
175         >
176     {
177         typedef def_overflow_handler overflow_policy;
178         typedef UseInternalRangeChecker range_checking_policy;
179         typedef Trunc<signed char> rounding_policy;
180     }; 
181     
182     template <>
183     struct numeric_cast_traits
184         <
185             signed char
186           , unsigned char
187         >
188     {
189         typedef def_overflow_handler overflow_policy;
190         typedef UseInternalRangeChecker range_checking_policy;
191         typedef Trunc<unsigned char> rounding_policy;
192     }; 
193     
194     template <>
195     struct numeric_cast_traits
196         <
197             signed char
198           , short
199         >
200     {
201         typedef def_overflow_handler overflow_policy;
202         typedef UseInternalRangeChecker range_checking_policy;
203         typedef Trunc<short> rounding_policy;
204     }; 
205     
206     template <>
207     struct numeric_cast_traits
208         <
209             signed char
210           , unsigned short
211         >
212     {
213         typedef def_overflow_handler overflow_policy;
214         typedef UseInternalRangeChecker range_checking_policy;
215         typedef Trunc<unsigned short> rounding_policy;
216     }; 
217     
218     template <>
219     struct numeric_cast_traits
220         <
221             signed char
222           , int
223         >
224     {
225         typedef def_overflow_handler overflow_policy;
226         typedef UseInternalRangeChecker range_checking_policy;
227         typedef Trunc<int> rounding_policy;
228     }; 
229     
230     template <>
231     struct numeric_cast_traits
232         <
233             signed char
234           , unsigned int
235         >
236     {
237         typedef def_overflow_handler overflow_policy;
238         typedef UseInternalRangeChecker range_checking_policy;
239         typedef Trunc<unsigned int> rounding_policy;
240     }; 
241     
242     template <>
243     struct numeric_cast_traits
244         <
245             signed char
246           , long
247         >
248     {
249         typedef def_overflow_handler overflow_policy;
250         typedef UseInternalRangeChecker range_checking_policy;
251         typedef Trunc<long> rounding_policy;
252     }; 
253     
254     template <>
255     struct numeric_cast_traits
256         <
257             signed char
258           , unsigned long
259         >
260     {
261         typedef def_overflow_handler overflow_policy;
262         typedef UseInternalRangeChecker range_checking_policy;
263         typedef Trunc<unsigned long> rounding_policy;
264     }; 
265     
266     template <>
267     struct numeric_cast_traits
268         <
269             signed char
270           , float
271         >
272     {
273         typedef def_overflow_handler overflow_policy;
274         typedef UseInternalRangeChecker range_checking_policy;
275         typedef Trunc<float> rounding_policy;
276     }; 
277     
278     template <>
279     struct numeric_cast_traits
280         <
281             signed char
282           , double
283         >
284     {
285         typedef def_overflow_handler overflow_policy;
286         typedef UseInternalRangeChecker range_checking_policy;
287         typedef Trunc<double> rounding_policy;
288     }; 
289     
290     template <>
291     struct numeric_cast_traits
292         <
293             signed char
294           , long double
295         >
296     {
297         typedef def_overflow_handler overflow_policy;
298         typedef UseInternalRangeChecker range_checking_policy;
299         typedef Trunc<long double> rounding_policy;
300     }; 
301     
302     template <>
303     struct numeric_cast_traits
304         <
305             unsigned char
306           , char
307         >
308     {
309         typedef def_overflow_handler overflow_policy;
310         typedef UseInternalRangeChecker range_checking_policy;
311         typedef Trunc<char> rounding_policy;
312     }; 
313     
314     template <>
315     struct numeric_cast_traits
316         <
317             unsigned char
318           , signed char
319         >
320     {
321         typedef def_overflow_handler overflow_policy;
322         typedef UseInternalRangeChecker range_checking_policy;
323         typedef Trunc<signed char> rounding_policy;
324     }; 
325     
326     template <>
327     struct numeric_cast_traits
328         <
329             unsigned char
330           , unsigned char
331         >
332     {
333         typedef def_overflow_handler overflow_policy;
334         typedef UseInternalRangeChecker range_checking_policy;
335         typedef Trunc<unsigned char> rounding_policy;
336     }; 
337     
338     template <>
339     struct numeric_cast_traits
340         <
341             unsigned char
342           , short
343         >
344     {
345         typedef def_overflow_handler overflow_policy;
346         typedef UseInternalRangeChecker range_checking_policy;
347         typedef Trunc<short> rounding_policy;
348     }; 
349     
350     template <>
351     struct numeric_cast_traits
352         <
353             unsigned char
354           , unsigned short
355         >
356     {
357         typedef def_overflow_handler overflow_policy;
358         typedef UseInternalRangeChecker range_checking_policy;
359         typedef Trunc<unsigned short> rounding_policy;
360     }; 
361     
362     template <>
363     struct numeric_cast_traits
364         <
365             unsigned char
366           , int
367         >
368     {
369         typedef def_overflow_handler overflow_policy;
370         typedef UseInternalRangeChecker range_checking_policy;
371         typedef Trunc<int> rounding_policy;
372     }; 
373     
374     template <>
375     struct numeric_cast_traits
376         <
377             unsigned char
378           , unsigned int
379         >
380     {
381         typedef def_overflow_handler overflow_policy;
382         typedef UseInternalRangeChecker range_checking_policy;
383         typedef Trunc<unsigned int> rounding_policy;
384     }; 
385     
386     template <>
387     struct numeric_cast_traits
388         <
389             unsigned char
390           , long
391         >
392     {
393         typedef def_overflow_handler overflow_policy;
394         typedef UseInternalRangeChecker range_checking_policy;
395         typedef Trunc<long> rounding_policy;
396     }; 
397     
398     template <>
399     struct numeric_cast_traits
400         <
401             unsigned char
402           , unsigned long
403         >
404     {
405         typedef def_overflow_handler overflow_policy;
406         typedef UseInternalRangeChecker range_checking_policy;
407         typedef Trunc<unsigned long> rounding_policy;
408     }; 
409     
410     template <>
411     struct numeric_cast_traits
412         <
413             unsigned char
414           , float
415         >
416     {
417         typedef def_overflow_handler overflow_policy;
418         typedef UseInternalRangeChecker range_checking_policy;
419         typedef Trunc<float> rounding_policy;
420     }; 
421     
422     template <>
423     struct numeric_cast_traits
424         <
425             unsigned char
426           , double
427         >
428     {
429         typedef def_overflow_handler overflow_policy;
430         typedef UseInternalRangeChecker range_checking_policy;
431         typedef Trunc<double> rounding_policy;
432     }; 
433     
434     template <>
435     struct numeric_cast_traits
436         <
437             unsigned char
438           , long double
439         >
440     {
441         typedef def_overflow_handler overflow_policy;
442         typedef UseInternalRangeChecker range_checking_policy;
443         typedef Trunc<long double> rounding_policy;
444     }; 
445     
446     template <>
447     struct numeric_cast_traits
448         <
449             short
450           , char
451         >
452     {
453         typedef def_overflow_handler overflow_policy;
454         typedef UseInternalRangeChecker range_checking_policy;
455         typedef Trunc<char> rounding_policy;
456     }; 
457     
458     template <>
459     struct numeric_cast_traits
460         <
461             short
462           , signed char
463         >
464     {
465         typedef def_overflow_handler overflow_policy;
466         typedef UseInternalRangeChecker range_checking_policy;
467         typedef Trunc<signed char> rounding_policy;
468     }; 
469     
470     template <>
471     struct numeric_cast_traits
472         <
473             short
474           , unsigned char
475         >
476     {
477         typedef def_overflow_handler overflow_policy;
478         typedef UseInternalRangeChecker range_checking_policy;
479         typedef Trunc<unsigned char> rounding_policy;
480     }; 
481     
482     template <>
483     struct numeric_cast_traits
484         <
485             short
486           , short
487         >
488     {
489         typedef def_overflow_handler overflow_policy;
490         typedef UseInternalRangeChecker range_checking_policy;
491         typedef Trunc<short> rounding_policy;
492     }; 
493     
494     template <>
495     struct numeric_cast_traits
496         <
497             short
498           , unsigned short
499         >
500     {
501         typedef def_overflow_handler overflow_policy;
502         typedef UseInternalRangeChecker range_checking_policy;
503         typedef Trunc<unsigned short> rounding_policy;
504     }; 
505     
506     template <>
507     struct numeric_cast_traits
508         <
509             short
510           , int
511         >
512     {
513         typedef def_overflow_handler overflow_policy;
514         typedef UseInternalRangeChecker range_checking_policy;
515         typedef Trunc<int> rounding_policy;
516     }; 
517     
518     template <>
519     struct numeric_cast_traits
520         <
521             short
522           , unsigned int
523         >
524     {
525         typedef def_overflow_handler overflow_policy;
526         typedef UseInternalRangeChecker range_checking_policy;
527         typedef Trunc<unsigned int> rounding_policy;
528     }; 
529     
530     template <>
531     struct numeric_cast_traits
532         <
533             short
534           , long
535         >
536     {
537         typedef def_overflow_handler overflow_policy;
538         typedef UseInternalRangeChecker range_checking_policy;
539         typedef Trunc<long> rounding_policy;
540     }; 
541     
542     template <>
543     struct numeric_cast_traits
544         <
545             short
546           , unsigned long
547         >
548     {
549         typedef def_overflow_handler overflow_policy;
550         typedef UseInternalRangeChecker range_checking_policy;
551         typedef Trunc<unsigned long> rounding_policy;
552     }; 
553     
554     template <>
555     struct numeric_cast_traits
556         <
557             short
558           , float
559         >
560     {
561         typedef def_overflow_handler overflow_policy;
562         typedef UseInternalRangeChecker range_checking_policy;
563         typedef Trunc<float> rounding_policy;
564     }; 
565     
566     template <>
567     struct numeric_cast_traits
568         <
569             short
570           , double
571         >
572     {
573         typedef def_overflow_handler overflow_policy;
574         typedef UseInternalRangeChecker range_checking_policy;
575         typedef Trunc<double> rounding_policy;
576     }; 
577     
578     template <>
579     struct numeric_cast_traits
580         <
581             short
582           , long double
583         >
584     {
585         typedef def_overflow_handler overflow_policy;
586         typedef UseInternalRangeChecker range_checking_policy;
587         typedef Trunc<long double> rounding_policy;
588     }; 
589     
590     template <>
591     struct numeric_cast_traits
592         <
593             unsigned short
594           , char
595         >
596     {
597         typedef def_overflow_handler overflow_policy;
598         typedef UseInternalRangeChecker range_checking_policy;
599         typedef Trunc<char> rounding_policy;
600     }; 
601     
602     template <>
603     struct numeric_cast_traits
604         <
605             unsigned short
606           , signed char
607         >
608     {
609         typedef def_overflow_handler overflow_policy;
610         typedef UseInternalRangeChecker range_checking_policy;
611         typedef Trunc<signed char> rounding_policy;
612     }; 
613     
614     template <>
615     struct numeric_cast_traits
616         <
617             unsigned short
618           , unsigned char
619         >
620     {
621         typedef def_overflow_handler overflow_policy;
622         typedef UseInternalRangeChecker range_checking_policy;
623         typedef Trunc<unsigned char> rounding_policy;
624     }; 
625     
626     template <>
627     struct numeric_cast_traits
628         <
629             unsigned short
630           , short
631         >
632     {
633         typedef def_overflow_handler overflow_policy;
634         typedef UseInternalRangeChecker range_checking_policy;
635         typedef Trunc<short> rounding_policy;
636     }; 
637     
638     template <>
639     struct numeric_cast_traits
640         <
641             unsigned short
642           , unsigned short
643         >
644     {
645         typedef def_overflow_handler overflow_policy;
646         typedef UseInternalRangeChecker range_checking_policy;
647         typedef Trunc<unsigned short> rounding_policy;
648     }; 
649     
650     template <>
651     struct numeric_cast_traits
652         <
653             unsigned short
654           , int
655         >
656     {
657         typedef def_overflow_handler overflow_policy;
658         typedef UseInternalRangeChecker range_checking_policy;
659         typedef Trunc<int> rounding_policy;
660     }; 
661     
662     template <>
663     struct numeric_cast_traits
664         <
665             unsigned short
666           , unsigned int
667         >
668     {
669         typedef def_overflow_handler overflow_policy;
670         typedef UseInternalRangeChecker range_checking_policy;
671         typedef Trunc<unsigned int> rounding_policy;
672     }; 
673     
674     template <>
675     struct numeric_cast_traits
676         <
677             unsigned short
678           , long
679         >
680     {
681         typedef def_overflow_handler overflow_policy;
682         typedef UseInternalRangeChecker range_checking_policy;
683         typedef Trunc<long> rounding_policy;
684     }; 
685     
686     template <>
687     struct numeric_cast_traits
688         <
689             unsigned short
690           , unsigned long
691         >
692     {
693         typedef def_overflow_handler overflow_policy;
694         typedef UseInternalRangeChecker range_checking_policy;
695         typedef Trunc<unsigned long> rounding_policy;
696     }; 
697     
698     template <>
699     struct numeric_cast_traits
700         <
701             unsigned short
702           , float
703         >
704     {
705         typedef def_overflow_handler overflow_policy;
706         typedef UseInternalRangeChecker range_checking_policy;
707         typedef Trunc<float> rounding_policy;
708     }; 
709     
710     template <>
711     struct numeric_cast_traits
712         <
713             unsigned short
714           , double
715         >
716     {
717         typedef def_overflow_handler overflow_policy;
718         typedef UseInternalRangeChecker range_checking_policy;
719         typedef Trunc<double> rounding_policy;
720     }; 
721     
722     template <>
723     struct numeric_cast_traits
724         <
725             unsigned short
726           , long double
727         >
728     {
729         typedef def_overflow_handler overflow_policy;
730         typedef UseInternalRangeChecker range_checking_policy;
731         typedef Trunc<long double> rounding_policy;
732     }; 
733     
734     template <>
735     struct numeric_cast_traits
736         <
737             int
738           , char
739         >
740     {
741         typedef def_overflow_handler overflow_policy;
742         typedef UseInternalRangeChecker range_checking_policy;
743         typedef Trunc<char> rounding_policy;
744     }; 
745     
746     template <>
747     struct numeric_cast_traits
748         <
749             int
750           , signed char
751         >
752     {
753         typedef def_overflow_handler overflow_policy;
754         typedef UseInternalRangeChecker range_checking_policy;
755         typedef Trunc<signed char> rounding_policy;
756     }; 
757     
758     template <>
759     struct numeric_cast_traits
760         <
761             int
762           , unsigned char
763         >
764     {
765         typedef def_overflow_handler overflow_policy;
766         typedef UseInternalRangeChecker range_checking_policy;
767         typedef Trunc<unsigned char> rounding_policy;
768     }; 
769     
770     template <>
771     struct numeric_cast_traits
772         <
773             int
774           , short
775         >
776     {
777         typedef def_overflow_handler overflow_policy;
778         typedef UseInternalRangeChecker range_checking_policy;
779         typedef Trunc<short> rounding_policy;
780     }; 
781     
782     template <>
783     struct numeric_cast_traits
784         <
785             int
786           , unsigned short
787         >
788     {
789         typedef def_overflow_handler overflow_policy;
790         typedef UseInternalRangeChecker range_checking_policy;
791         typedef Trunc<unsigned short> rounding_policy;
792     }; 
793     
794     template <>
795     struct numeric_cast_traits
796         <
797             int
798           , int
799         >
800     {
801         typedef def_overflow_handler overflow_policy;
802         typedef UseInternalRangeChecker range_checking_policy;
803         typedef Trunc<int> rounding_policy;
804     }; 
805     
806     template <>
807     struct numeric_cast_traits
808         <
809             int
810           , unsigned int
811         >
812     {
813         typedef def_overflow_handler overflow_policy;
814         typedef UseInternalRangeChecker range_checking_policy;
815         typedef Trunc<unsigned int> rounding_policy;
816     }; 
817     
818     template <>
819     struct numeric_cast_traits
820         <
821             int
822           , long
823         >
824     {
825         typedef def_overflow_handler overflow_policy;
826         typedef UseInternalRangeChecker range_checking_policy;
827         typedef Trunc<long> rounding_policy;
828     }; 
829     
830     template <>
831     struct numeric_cast_traits
832         <
833             int
834           , unsigned long
835         >
836     {
837         typedef def_overflow_handler overflow_policy;
838         typedef UseInternalRangeChecker range_checking_policy;
839         typedef Trunc<unsigned long> rounding_policy;
840     }; 
841     
842     template <>
843     struct numeric_cast_traits
844         <
845             int
846           , float
847         >
848     {
849         typedef def_overflow_handler overflow_policy;
850         typedef UseInternalRangeChecker range_checking_policy;
851         typedef Trunc<float> rounding_policy;
852     }; 
853     
854     template <>
855     struct numeric_cast_traits
856         <
857             int
858           , double
859         >
860     {
861         typedef def_overflow_handler overflow_policy;
862         typedef UseInternalRangeChecker range_checking_policy;
863         typedef Trunc<double> rounding_policy;
864     }; 
865     
866     template <>
867     struct numeric_cast_traits
868         <
869             int
870           , long double
871         >
872     {
873         typedef def_overflow_handler overflow_policy;
874         typedef UseInternalRangeChecker range_checking_policy;
875         typedef Trunc<long double> rounding_policy;
876     }; 
877     
878     template <>
879     struct numeric_cast_traits
880         <
881             unsigned int
882           , char
883         >
884     {
885         typedef def_overflow_handler overflow_policy;
886         typedef UseInternalRangeChecker range_checking_policy;
887         typedef Trunc<char> rounding_policy;
888     }; 
889     
890     template <>
891     struct numeric_cast_traits
892         <
893             unsigned int
894           , signed char
895         >
896     {
897         typedef def_overflow_handler overflow_policy;
898         typedef UseInternalRangeChecker range_checking_policy;
899         typedef Trunc<signed char> rounding_policy;
900     }; 
901     
902     template <>
903     struct numeric_cast_traits
904         <
905             unsigned int
906           , unsigned char
907         >
908     {
909         typedef def_overflow_handler overflow_policy;
910         typedef UseInternalRangeChecker range_checking_policy;
911         typedef Trunc<unsigned char> rounding_policy;
912     }; 
913     
914     template <>
915     struct numeric_cast_traits
916         <
917             unsigned int
918           , short
919         >
920     {
921         typedef def_overflow_handler overflow_policy;
922         typedef UseInternalRangeChecker range_checking_policy;
923         typedef Trunc<short> rounding_policy;
924     }; 
925     
926     template <>
927     struct numeric_cast_traits
928         <
929             unsigned int
930           , unsigned short
931         >
932     {
933         typedef def_overflow_handler overflow_policy;
934         typedef UseInternalRangeChecker range_checking_policy;
935         typedef Trunc<unsigned short> rounding_policy;
936     }; 
937     
938     template <>
939     struct numeric_cast_traits
940         <
941             unsigned int
942           , int
943         >
944     {
945         typedef def_overflow_handler overflow_policy;
946         typedef UseInternalRangeChecker range_checking_policy;
947         typedef Trunc<int> rounding_policy;
948     }; 
949     
950     template <>
951     struct numeric_cast_traits
952         <
953             unsigned int
954           , unsigned int
955         >
956     {
957         typedef def_overflow_handler overflow_policy;
958         typedef UseInternalRangeChecker range_checking_policy;
959         typedef Trunc<unsigned int> rounding_policy;
960     }; 
961     
962     template <>
963     struct numeric_cast_traits
964         <
965             unsigned int
966           , long
967         >
968     {
969         typedef def_overflow_handler overflow_policy;
970         typedef UseInternalRangeChecker range_checking_policy;
971         typedef Trunc<long> rounding_policy;
972     }; 
973     
974     template <>
975     struct numeric_cast_traits
976         <
977             unsigned int
978           , unsigned long
979         >
980     {
981         typedef def_overflow_handler overflow_policy;
982         typedef UseInternalRangeChecker range_checking_policy;
983         typedef Trunc<unsigned long> rounding_policy;
984     }; 
985     
986     template <>
987     struct numeric_cast_traits
988         <
989             unsigned int
990           , float
991         >
992     {
993         typedef def_overflow_handler overflow_policy;
994         typedef UseInternalRangeChecker range_checking_policy;
995         typedef Trunc<float> rounding_policy;
996     }; 
997     
998     template <>
999     struct numeric_cast_traits
1000         <
1001             unsigned int
1002           , double
1003         >
1004     {
1005         typedef def_overflow_handler overflow_policy;
1006         typedef UseInternalRangeChecker range_checking_policy;
1007         typedef Trunc<double> rounding_policy;
1008     }; 
1009     
1010     template <>
1011     struct numeric_cast_traits
1012         <
1013             unsigned int
1014           , long double
1015         >
1016     {
1017         typedef def_overflow_handler overflow_policy;
1018         typedef UseInternalRangeChecker range_checking_policy;
1019         typedef Trunc<long double> rounding_policy;
1020     }; 
1021     
1022     template <>
1023     struct numeric_cast_traits
1024         <
1025             long
1026           , char
1027         >
1028     {
1029         typedef def_overflow_handler overflow_policy;
1030         typedef UseInternalRangeChecker range_checking_policy;
1031         typedef Trunc<char> rounding_policy;
1032     }; 
1033     
1034     template <>
1035     struct numeric_cast_traits
1036         <
1037             long
1038           , signed char
1039         >
1040     {
1041         typedef def_overflow_handler overflow_policy;
1042         typedef UseInternalRangeChecker range_checking_policy;
1043         typedef Trunc<signed char> rounding_policy;
1044     }; 
1045     
1046     template <>
1047     struct numeric_cast_traits
1048         <
1049             long
1050           , unsigned char
1051         >
1052     {
1053         typedef def_overflow_handler overflow_policy;
1054         typedef UseInternalRangeChecker range_checking_policy;
1055         typedef Trunc<unsigned char> rounding_policy;
1056     }; 
1057     
1058     template <>
1059     struct numeric_cast_traits
1060         <
1061             long
1062           , short
1063         >
1064     {
1065         typedef def_overflow_handler overflow_policy;
1066         typedef UseInternalRangeChecker range_checking_policy;
1067         typedef Trunc<short> rounding_policy;
1068     }; 
1069     
1070     template <>
1071     struct numeric_cast_traits
1072         <
1073             long
1074           , unsigned short
1075         >
1076     {
1077         typedef def_overflow_handler overflow_policy;
1078         typedef UseInternalRangeChecker range_checking_policy;
1079         typedef Trunc<unsigned short> rounding_policy;
1080     }; 
1081     
1082     template <>
1083     struct numeric_cast_traits
1084         <
1085             long
1086           , int
1087         >
1088     {
1089         typedef def_overflow_handler overflow_policy;
1090         typedef UseInternalRangeChecker range_checking_policy;
1091         typedef Trunc<int> rounding_policy;
1092     }; 
1093     
1094     template <>
1095     struct numeric_cast_traits
1096         <
1097             long
1098           , unsigned int
1099         >
1100     {
1101         typedef def_overflow_handler overflow_policy;
1102         typedef UseInternalRangeChecker range_checking_policy;
1103         typedef Trunc<unsigned int> rounding_policy;
1104     }; 
1105     
1106     template <>
1107     struct numeric_cast_traits
1108         <
1109             long
1110           , long
1111         >
1112     {
1113         typedef def_overflow_handler overflow_policy;
1114         typedef UseInternalRangeChecker range_checking_policy;
1115         typedef Trunc<long> rounding_policy;
1116     }; 
1117     
1118     template <>
1119     struct numeric_cast_traits
1120         <
1121             long
1122           , unsigned long
1123         >
1124     {
1125         typedef def_overflow_handler overflow_policy;
1126         typedef UseInternalRangeChecker range_checking_policy;
1127         typedef Trunc<unsigned long> rounding_policy;
1128     }; 
1129     
1130     template <>
1131     struct numeric_cast_traits
1132         <
1133             long
1134           , float
1135         >
1136     {
1137         typedef def_overflow_handler overflow_policy;
1138         typedef UseInternalRangeChecker range_checking_policy;
1139         typedef Trunc<float> rounding_policy;
1140     }; 
1141     
1142     template <>
1143     struct numeric_cast_traits
1144         <
1145             long
1146           , double
1147         >
1148     {
1149         typedef def_overflow_handler overflow_policy;
1150         typedef UseInternalRangeChecker range_checking_policy;
1151         typedef Trunc<double> rounding_policy;
1152     }; 
1153     
1154     template <>
1155     struct numeric_cast_traits
1156         <
1157             long
1158           , long double
1159         >
1160     {
1161         typedef def_overflow_handler overflow_policy;
1162         typedef UseInternalRangeChecker range_checking_policy;
1163         typedef Trunc<long double> rounding_policy;
1164     }; 
1165     
1166     template <>
1167     struct numeric_cast_traits
1168         <
1169             unsigned long
1170           , char
1171         >
1172     {
1173         typedef def_overflow_handler overflow_policy;
1174         typedef UseInternalRangeChecker range_checking_policy;
1175         typedef Trunc<char> rounding_policy;
1176     }; 
1177     
1178     template <>
1179     struct numeric_cast_traits
1180         <
1181             unsigned long
1182           , signed char
1183         >
1184     {
1185         typedef def_overflow_handler overflow_policy;
1186         typedef UseInternalRangeChecker range_checking_policy;
1187         typedef Trunc<signed char> rounding_policy;
1188     }; 
1189     
1190     template <>
1191     struct numeric_cast_traits
1192         <
1193             unsigned long
1194           , unsigned char
1195         >
1196     {
1197         typedef def_overflow_handler overflow_policy;
1198         typedef UseInternalRangeChecker range_checking_policy;
1199         typedef Trunc<unsigned char> rounding_policy;
1200     }; 
1201     
1202     template <>
1203     struct numeric_cast_traits
1204         <
1205             unsigned long
1206           , short
1207         >
1208     {
1209         typedef def_overflow_handler overflow_policy;
1210         typedef UseInternalRangeChecker range_checking_policy;
1211         typedef Trunc<short> rounding_policy;
1212     }; 
1213     
1214     template <>
1215     struct numeric_cast_traits
1216         <
1217             unsigned long
1218           , unsigned short
1219         >
1220     {
1221         typedef def_overflow_handler overflow_policy;
1222         typedef UseInternalRangeChecker range_checking_policy;
1223         typedef Trunc<unsigned short> rounding_policy;
1224     }; 
1225     
1226     template <>
1227     struct numeric_cast_traits
1228         <
1229             unsigned long
1230           , int
1231         >
1232     {
1233         typedef def_overflow_handler overflow_policy;
1234         typedef UseInternalRangeChecker range_checking_policy;
1235         typedef Trunc<int> rounding_policy;
1236     }; 
1237     
1238     template <>
1239     struct numeric_cast_traits
1240         <
1241             unsigned long
1242           , unsigned int
1243         >
1244     {
1245         typedef def_overflow_handler overflow_policy;
1246         typedef UseInternalRangeChecker range_checking_policy;
1247         typedef Trunc<unsigned int> rounding_policy;
1248     }; 
1249     
1250     template <>
1251     struct numeric_cast_traits
1252         <
1253             unsigned long
1254           , long
1255         >
1256     {
1257         typedef def_overflow_handler overflow_policy;
1258         typedef UseInternalRangeChecker range_checking_policy;
1259         typedef Trunc<long> rounding_policy;
1260     }; 
1261     
1262     template <>
1263     struct numeric_cast_traits
1264         <
1265             unsigned long
1266           , unsigned long
1267         >
1268     {
1269         typedef def_overflow_handler overflow_policy;
1270         typedef UseInternalRangeChecker range_checking_policy;
1271         typedef Trunc<unsigned long> rounding_policy;
1272     }; 
1273     
1274     template <>
1275     struct numeric_cast_traits
1276         <
1277             unsigned long
1278           , float
1279         >
1280     {
1281         typedef def_overflow_handler overflow_policy;
1282         typedef UseInternalRangeChecker range_checking_policy;
1283         typedef Trunc<float> rounding_policy;
1284     }; 
1285     
1286     template <>
1287     struct numeric_cast_traits
1288         <
1289             unsigned long
1290           , double
1291         >
1292     {
1293         typedef def_overflow_handler overflow_policy;
1294         typedef UseInternalRangeChecker range_checking_policy;
1295         typedef Trunc<double> rounding_policy;
1296     }; 
1297     
1298     template <>
1299     struct numeric_cast_traits
1300         <
1301             unsigned long
1302           , long double
1303         >
1304     {
1305         typedef def_overflow_handler overflow_policy;
1306         typedef UseInternalRangeChecker range_checking_policy;
1307         typedef Trunc<long double> rounding_policy;
1308     }; 
1309     
1310     template <>
1311     struct numeric_cast_traits
1312         <
1313             float
1314           , char
1315         >
1316     {
1317         typedef def_overflow_handler overflow_policy;
1318         typedef UseInternalRangeChecker range_checking_policy;
1319         typedef Trunc<char> rounding_policy;
1320     }; 
1321     
1322     template <>
1323     struct numeric_cast_traits
1324         <
1325             float
1326           , signed char
1327         >
1328     {
1329         typedef def_overflow_handler overflow_policy;
1330         typedef UseInternalRangeChecker range_checking_policy;
1331         typedef Trunc<signed char> rounding_policy;
1332     }; 
1333     
1334     template <>
1335     struct numeric_cast_traits
1336         <
1337             float
1338           , unsigned char
1339         >
1340     {
1341         typedef def_overflow_handler overflow_policy;
1342         typedef UseInternalRangeChecker range_checking_policy;
1343         typedef Trunc<unsigned char> rounding_policy;
1344     }; 
1345     
1346     template <>
1347     struct numeric_cast_traits
1348         <
1349             float
1350           , short
1351         >
1352     {
1353         typedef def_overflow_handler overflow_policy;
1354         typedef UseInternalRangeChecker range_checking_policy;
1355         typedef Trunc<short> rounding_policy;
1356     }; 
1357     
1358     template <>
1359     struct numeric_cast_traits
1360         <
1361             float
1362           , unsigned short
1363         >
1364     {
1365         typedef def_overflow_handler overflow_policy;
1366         typedef UseInternalRangeChecker range_checking_policy;
1367         typedef Trunc<unsigned short> rounding_policy;
1368     }; 
1369     
1370     template <>
1371     struct numeric_cast_traits
1372         <
1373             float
1374           , int
1375         >
1376     {
1377         typedef def_overflow_handler overflow_policy;
1378         typedef UseInternalRangeChecker range_checking_policy;
1379         typedef Trunc<int> rounding_policy;
1380     }; 
1381     
1382     template <>
1383     struct numeric_cast_traits
1384         <
1385             float
1386           , unsigned int
1387         >
1388     {
1389         typedef def_overflow_handler overflow_policy;
1390         typedef UseInternalRangeChecker range_checking_policy;
1391         typedef Trunc<unsigned int> rounding_policy;
1392     }; 
1393     
1394     template <>
1395     struct numeric_cast_traits
1396         <
1397             float
1398           , long
1399         >
1400     {
1401         typedef def_overflow_handler overflow_policy;
1402         typedef UseInternalRangeChecker range_checking_policy;
1403         typedef Trunc<long> rounding_policy;
1404     }; 
1405     
1406     template <>
1407     struct numeric_cast_traits
1408         <
1409             float
1410           , unsigned long
1411         >
1412     {
1413         typedef def_overflow_handler overflow_policy;
1414         typedef UseInternalRangeChecker range_checking_policy;
1415         typedef Trunc<unsigned long> rounding_policy;
1416     }; 
1417     
1418     template <>
1419     struct numeric_cast_traits
1420         <
1421             float
1422           , float
1423         >
1424     {
1425         typedef def_overflow_handler overflow_policy;
1426         typedef UseInternalRangeChecker range_checking_policy;
1427         typedef Trunc<float> rounding_policy;
1428     }; 
1429     
1430     template <>
1431     struct numeric_cast_traits
1432         <
1433             float
1434           , double
1435         >
1436     {
1437         typedef def_overflow_handler overflow_policy;
1438         typedef UseInternalRangeChecker range_checking_policy;
1439         typedef Trunc<double> rounding_policy;
1440     }; 
1441     
1442     template <>
1443     struct numeric_cast_traits
1444         <
1445             float
1446           , long double
1447         >
1448     {
1449         typedef def_overflow_handler overflow_policy;
1450         typedef UseInternalRangeChecker range_checking_policy;
1451         typedef Trunc<long double> rounding_policy;
1452     }; 
1453     
1454     template <>
1455     struct numeric_cast_traits
1456         <
1457             double
1458           , char
1459         >
1460     {
1461         typedef def_overflow_handler overflow_policy;
1462         typedef UseInternalRangeChecker range_checking_policy;
1463         typedef Trunc<char> rounding_policy;
1464     }; 
1465     
1466     template <>
1467     struct numeric_cast_traits
1468         <
1469             double
1470           , signed char
1471         >
1472     {
1473         typedef def_overflow_handler overflow_policy;
1474         typedef UseInternalRangeChecker range_checking_policy;
1475         typedef Trunc<signed char> rounding_policy;
1476     }; 
1477     
1478     template <>
1479     struct numeric_cast_traits
1480         <
1481             double
1482           , unsigned char
1483         >
1484     {
1485         typedef def_overflow_handler overflow_policy;
1486         typedef UseInternalRangeChecker range_checking_policy;
1487         typedef Trunc<unsigned char> rounding_policy;
1488     }; 
1489     
1490     template <>
1491     struct numeric_cast_traits
1492         <
1493             double
1494           , short
1495         >
1496     {
1497         typedef def_overflow_handler overflow_policy;
1498         typedef UseInternalRangeChecker range_checking_policy;
1499         typedef Trunc<short> rounding_policy;
1500     }; 
1501     
1502     template <>
1503     struct numeric_cast_traits
1504         <
1505             double
1506           , unsigned short
1507         >
1508     {
1509         typedef def_overflow_handler overflow_policy;
1510         typedef UseInternalRangeChecker range_checking_policy;
1511         typedef Trunc<unsigned short> rounding_policy;
1512     }; 
1513     
1514     template <>
1515     struct numeric_cast_traits
1516         <
1517             double
1518           , int
1519         >
1520     {
1521         typedef def_overflow_handler overflow_policy;
1522         typedef UseInternalRangeChecker range_checking_policy;
1523         typedef Trunc<int> rounding_policy;
1524     }; 
1525     
1526     template <>
1527     struct numeric_cast_traits
1528         <
1529             double
1530           , unsigned int
1531         >
1532     {
1533         typedef def_overflow_handler overflow_policy;
1534         typedef UseInternalRangeChecker range_checking_policy;
1535         typedef Trunc<unsigned int> rounding_policy;
1536     }; 
1537     
1538     template <>
1539     struct numeric_cast_traits
1540         <
1541             double
1542           , long
1543         >
1544     {
1545         typedef def_overflow_handler overflow_policy;
1546         typedef UseInternalRangeChecker range_checking_policy;
1547         typedef Trunc<long> rounding_policy;
1548     }; 
1549     
1550     template <>
1551     struct numeric_cast_traits
1552         <
1553             double
1554           , unsigned long
1555         >
1556     {
1557         typedef def_overflow_handler overflow_policy;
1558         typedef UseInternalRangeChecker range_checking_policy;
1559         typedef Trunc<unsigned long> rounding_policy;
1560     }; 
1561     
1562     template <>
1563     struct numeric_cast_traits
1564         <
1565             double
1566           , float
1567         >
1568     {
1569         typedef def_overflow_handler overflow_policy;
1570         typedef UseInternalRangeChecker range_checking_policy;
1571         typedef Trunc<float> rounding_policy;
1572     }; 
1573     
1574     template <>
1575     struct numeric_cast_traits
1576         <
1577             double
1578           , double
1579         >
1580     {
1581         typedef def_overflow_handler overflow_policy;
1582         typedef UseInternalRangeChecker range_checking_policy;
1583         typedef Trunc<double> rounding_policy;
1584     }; 
1585     
1586     template <>
1587     struct numeric_cast_traits
1588         <
1589             double
1590           , long double
1591         >
1592     {
1593         typedef def_overflow_handler overflow_policy;
1594         typedef UseInternalRangeChecker range_checking_policy;
1595         typedef Trunc<long double> rounding_policy;
1596     }; 
1597     
1598     template <>
1599     struct numeric_cast_traits
1600         <
1601             long double
1602           , char
1603         >
1604     {
1605         typedef def_overflow_handler overflow_policy;
1606         typedef UseInternalRangeChecker range_checking_policy;
1607         typedef Trunc<char> rounding_policy;
1608     }; 
1609     
1610     template <>
1611     struct numeric_cast_traits
1612         <
1613             long double
1614           , signed char
1615         >
1616     {
1617         typedef def_overflow_handler overflow_policy;
1618         typedef UseInternalRangeChecker range_checking_policy;
1619         typedef Trunc<signed char> rounding_policy;
1620     }; 
1621     
1622     template <>
1623     struct numeric_cast_traits
1624         <
1625             long double
1626           , unsigned char
1627         >
1628     {
1629         typedef def_overflow_handler overflow_policy;
1630         typedef UseInternalRangeChecker range_checking_policy;
1631         typedef Trunc<unsigned char> rounding_policy;
1632     }; 
1633     
1634     template <>
1635     struct numeric_cast_traits
1636         <
1637             long double
1638           , short
1639         >
1640     {
1641         typedef def_overflow_handler overflow_policy;
1642         typedef UseInternalRangeChecker range_checking_policy;
1643         typedef Trunc<short> rounding_policy;
1644     }; 
1645     
1646     template <>
1647     struct numeric_cast_traits
1648         <
1649             long double
1650           , unsigned short
1651         >
1652     {
1653         typedef def_overflow_handler overflow_policy;
1654         typedef UseInternalRangeChecker range_checking_policy;
1655         typedef Trunc<unsigned short> rounding_policy;
1656     }; 
1657     
1658     template <>
1659     struct numeric_cast_traits
1660         <
1661             long double
1662           , int
1663         >
1664     {
1665         typedef def_overflow_handler overflow_policy;
1666         typedef UseInternalRangeChecker range_checking_policy;
1667         typedef Trunc<int> rounding_policy;
1668     }; 
1669     
1670     template <>
1671     struct numeric_cast_traits
1672         <
1673             long double
1674           , unsigned int
1675         >
1676     {
1677         typedef def_overflow_handler overflow_policy;
1678         typedef UseInternalRangeChecker range_checking_policy;
1679         typedef Trunc<unsigned int> rounding_policy;
1680     }; 
1681     
1682     template <>
1683     struct numeric_cast_traits
1684         <
1685             long double
1686           , long
1687         >
1688     {
1689         typedef def_overflow_handler overflow_policy;
1690         typedef UseInternalRangeChecker range_checking_policy;
1691         typedef Trunc<long> rounding_policy;
1692     }; 
1693     
1694     template <>
1695     struct numeric_cast_traits
1696         <
1697             long double
1698           , unsigned long
1699         >
1700     {
1701         typedef def_overflow_handler overflow_policy;
1702         typedef UseInternalRangeChecker range_checking_policy;
1703         typedef Trunc<unsigned long> rounding_policy;
1704     }; 
1705     
1706     template <>
1707     struct numeric_cast_traits
1708         <
1709             long double
1710           , float
1711         >
1712     {
1713         typedef def_overflow_handler overflow_policy;
1714         typedef UseInternalRangeChecker range_checking_policy;
1715         typedef Trunc<float> rounding_policy;
1716     }; 
1717     
1718     template <>
1719     struct numeric_cast_traits
1720         <
1721             long double
1722           , double
1723         >
1724     {
1725         typedef def_overflow_handler overflow_policy;
1726         typedef UseInternalRangeChecker range_checking_policy;
1727         typedef Trunc<double> rounding_policy;
1728     }; 
1729     
1730     template <>
1731     struct numeric_cast_traits
1732         <
1733             long double
1734           , long double
1735         >
1736     {
1737         typedef def_overflow_handler overflow_policy;
1738         typedef UseInternalRangeChecker range_checking_policy;
1739         typedef Trunc<long double> rounding_policy;
1740     }; 
1741 }}