1 //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifndef UUID_F20566FC196311E0B99D606CDFD72085
7 #define UUID_F20566FC196311E0B99D606CDFD72085
9 #include <boost/qvm/scalar_traits.hpp>
20 template <class A,class B> struct deduce_scalar_impl { };
24 deduce_scalar_impl<T,T>
29 template <> struct deduce_scalar_impl<signed char,unsigned char> { typedef unsigned char type; };
30 template <> struct deduce_scalar_impl<signed char,unsigned short> { typedef unsigned short type; };
31 template <> struct deduce_scalar_impl<signed char,unsigned int> { typedef unsigned int type; };
32 template <> struct deduce_scalar_impl<signed char,unsigned long> { typedef unsigned long type; };
33 template <> struct deduce_scalar_impl<signed char,signed short> { typedef signed short type; };
34 template <> struct deduce_scalar_impl<signed char,signed int> { typedef signed int type; };
35 template <> struct deduce_scalar_impl<signed char,signed long> { typedef signed long type; };
36 template <> struct deduce_scalar_impl<signed char,float> { typedef float type; };
37 template <> struct deduce_scalar_impl<signed char,double> { typedef double type; };
38 template <> struct deduce_scalar_impl<unsigned char,unsigned short> { typedef unsigned short type; };
39 template <> struct deduce_scalar_impl<unsigned char,unsigned int> { typedef unsigned int type; };
40 template <> struct deduce_scalar_impl<unsigned char,unsigned long> { typedef unsigned long type; };
41 template <> struct deduce_scalar_impl<unsigned char,signed short> { typedef signed short type; };
42 template <> struct deduce_scalar_impl<unsigned char,signed int> { typedef signed int type; };
43 template <> struct deduce_scalar_impl<unsigned char,signed long> { typedef signed long type; };
44 template <> struct deduce_scalar_impl<unsigned char,float> { typedef float type; };
45 template <> struct deduce_scalar_impl<unsigned char,double> { typedef double type; };
46 template <> struct deduce_scalar_impl<signed short,unsigned short> { typedef unsigned short type; };
47 template <> struct deduce_scalar_impl<signed short,unsigned int> { typedef unsigned int type; };
48 template <> struct deduce_scalar_impl<signed short,unsigned long> { typedef unsigned long type; };
49 template <> struct deduce_scalar_impl<signed short,signed int> { typedef signed int type; };
50 template <> struct deduce_scalar_impl<signed short,signed long> { typedef signed long type; };
51 template <> struct deduce_scalar_impl<signed short,float> { typedef float type; };
52 template <> struct deduce_scalar_impl<signed short,double> { typedef double type; };
53 template <> struct deduce_scalar_impl<unsigned short,unsigned int> { typedef unsigned int type; };
54 template <> struct deduce_scalar_impl<unsigned short,unsigned long> { typedef unsigned long type; };
55 template <> struct deduce_scalar_impl<unsigned short,signed int> { typedef signed int type; };
56 template <> struct deduce_scalar_impl<unsigned short,signed long> { typedef signed long type; };
57 template <> struct deduce_scalar_impl<unsigned short,float> { typedef float type; };
58 template <> struct deduce_scalar_impl<unsigned short,double> { typedef double type; };
59 template <> struct deduce_scalar_impl<signed int,unsigned int> { typedef unsigned int type; };
60 template <> struct deduce_scalar_impl<signed int,unsigned long> { typedef unsigned long type; };
61 template <> struct deduce_scalar_impl<signed int,signed long> { typedef signed long type; };
62 template <> struct deduce_scalar_impl<signed int,float> { typedef float type; };
63 template <> struct deduce_scalar_impl<signed int,double> { typedef double type; };
64 template <> struct deduce_scalar_impl<unsigned int,unsigned long> { typedef unsigned long type; };
65 template <> struct deduce_scalar_impl<unsigned int,signed long> { typedef signed long type; };
66 template <> struct deduce_scalar_impl<unsigned int,float> { typedef float type; };
67 template <> struct deduce_scalar_impl<unsigned int,double> { typedef double type; };
68 template <> struct deduce_scalar_impl<signed long,unsigned long> { typedef unsigned long type; };
69 template <> struct deduce_scalar_impl<signed long,float> { typedef float type; };
70 template <> struct deduce_scalar_impl<signed long,double> { typedef double type; };
71 template <> struct deduce_scalar_impl<unsigned long,float> { typedef float type; };
72 template <> struct deduce_scalar_impl<unsigned long,double> { typedef double type; };
73 template <> struct deduce_scalar_impl<float,double> { typedef double type; };
75 template <> struct deduce_scalar_impl<unsigned char,signed char> { typedef unsigned char type; };
76 template <> struct deduce_scalar_impl<unsigned short,signed char> { typedef unsigned short type; };
77 template <> struct deduce_scalar_impl<unsigned int,signed char> { typedef unsigned int type; };
78 template <> struct deduce_scalar_impl<unsigned long,signed char> { typedef unsigned long type; };
79 template <> struct deduce_scalar_impl<signed short,signed char> { typedef signed short type; };
80 template <> struct deduce_scalar_impl<signed int,signed char> { typedef signed int type; };
81 template <> struct deduce_scalar_impl<signed long,signed char> { typedef signed long type; };
82 template <> struct deduce_scalar_impl<float,signed char> { typedef float type; };
83 template <> struct deduce_scalar_impl<double,signed char> { typedef double type; };
84 template <> struct deduce_scalar_impl<unsigned short,unsigned char> { typedef unsigned short type; };
85 template <> struct deduce_scalar_impl<unsigned int,unsigned char> { typedef unsigned int type; };
86 template <> struct deduce_scalar_impl<unsigned long,unsigned char> { typedef unsigned long type; };
87 template <> struct deduce_scalar_impl<signed short,unsigned char> { typedef signed short type; };
88 template <> struct deduce_scalar_impl<signed int,unsigned char> { typedef signed int type; };
89 template <> struct deduce_scalar_impl<signed long,unsigned char> { typedef signed long type; };
90 template <> struct deduce_scalar_impl<float,unsigned char> { typedef float type; };
91 template <> struct deduce_scalar_impl<double,unsigned char> { typedef double type; };
92 template <> struct deduce_scalar_impl<unsigned short,signed short> { typedef unsigned short type; };
93 template <> struct deduce_scalar_impl<unsigned int,signed short> { typedef unsigned int type; };
94 template <> struct deduce_scalar_impl<unsigned long,signed short> { typedef unsigned long type; };
95 template <> struct deduce_scalar_impl<signed int,signed short> { typedef signed int type; };
96 template <> struct deduce_scalar_impl<signed long,signed short> { typedef signed long type; };
97 template <> struct deduce_scalar_impl<float,signed short> { typedef float type; };
98 template <> struct deduce_scalar_impl<double,signed short> { typedef double type; };
99 template <> struct deduce_scalar_impl<unsigned int,unsigned short> { typedef unsigned int type; };
100 template <> struct deduce_scalar_impl<unsigned long,unsigned short> { typedef unsigned long type; };
101 template <> struct deduce_scalar_impl<signed int,unsigned short> { typedef signed int type; };
102 template <> struct deduce_scalar_impl<signed long,unsigned short> { typedef signed long type; };
103 template <> struct deduce_scalar_impl<float,unsigned short> { typedef float type; };
104 template <> struct deduce_scalar_impl<double,unsigned short> { typedef double type; };
105 template <> struct deduce_scalar_impl<unsigned int,signed int> { typedef unsigned int type; };
106 template <> struct deduce_scalar_impl<unsigned long,signed int> { typedef unsigned long type; };
107 template <> struct deduce_scalar_impl<signed long,signed int> { typedef signed long type; };
108 template <> struct deduce_scalar_impl<float,signed int> { typedef float type; };
109 template <> struct deduce_scalar_impl<double,signed int> { typedef double type; };
110 template <> struct deduce_scalar_impl<unsigned long,unsigned int> { typedef unsigned long type; };
111 template <> struct deduce_scalar_impl<signed long,unsigned int> { typedef signed long type; };
112 template <> struct deduce_scalar_impl<float,unsigned int> { typedef float type; };
113 template <> struct deduce_scalar_impl<double,unsigned int> { typedef double type; };
114 template <> struct deduce_scalar_impl<unsigned long,signed long> { typedef unsigned long type; };
115 template <> struct deduce_scalar_impl<float,signed long> { typedef float type; };
116 template <> struct deduce_scalar_impl<double,signed long> { typedef double type; };
117 template <> struct deduce_scalar_impl<float,unsigned long> { typedef float type; };
118 template <> struct deduce_scalar_impl<double,unsigned long> { typedef double type; };
119 template <> struct deduce_scalar_impl<double,float> { typedef double type; };
122 template <class A,class B>
126 typedef typename deduce_scalar_detail::deduce_scalar_impl<A,B>::type type;