promote.h
Go to the documentation of this file.
#ifndef _RHEOLEF_PROMOTE_H
#define _RHEOLEF_PROMOTE_H
#include "rheolef/compiler.h"
namespace rheolef {
template<class T1, class T2>
struct promote_not_specialized_for_this_case {};
template<class T1, class T2>
struct promote {
typedef promote_not_specialized_for_this_case<T1,T2> type;
};
#define skit_promote(T1,T2) typename promote<T1,T2>::type
template <> struct promote<char, char > { typedef int type; };
template <> struct promote<char, unsigned char > { typedef int type; };
template <> struct promote<char, short int > { typedef int type; };
template <> struct promote<char, short unsigned int > { typedef unsigned int type; };
template <> struct promote<char, int > { typedef int type; };
template <> struct promote<char, unsigned int > { typedef unsigned int type; };
template <> struct promote<char, long > { typedef long type; };
template <> struct promote<char, unsigned long > { typedef unsigned long type; };
template <> struct promote<char, float > { typedef float type; };
template <> struct promote<char, double > { typedef double type; };
template <> struct promote<char, long double > { typedef long double type; };
template <> struct promote<unsigned char, char > { typedef int type; };
template <> struct promote<unsigned char, unsigned char > { typedef int type; };
template <> struct promote<unsigned char, short int > { typedef int type; };
template <> struct promote<unsigned char, short unsigned int > { typedef unsigned int type; };
template <> struct promote<unsigned char, int > { typedef int type; };
template <> struct promote<unsigned char, unsigned int > { typedef unsigned int type; };
template <> struct promote<unsigned char, long > { typedef long type; };
template <> struct promote<unsigned char, unsigned long > { typedef unsigned long type; };
template <> struct promote<unsigned char, float > { typedef float type; };
template <> struct promote<unsigned char, double > { typedef double type; };
template <> struct promote<unsigned char, long double > { typedef long double type; };
template <> struct promote<short int, char > { typedef int type; };
template <> struct promote<short int, unsigned char > { typedef int type; };
template <> struct promote<short int, short int > { typedef int type; };
template <> struct promote<short int, short unsigned int > { typedef unsigned int type; };
template <> struct promote<short int, int > { typedef int type; };
template <> struct promote<short int, unsigned int > { typedef unsigned int type; };
template <> struct promote<short int, long > { typedef long type; };
template <> struct promote<short int, unsigned long > { typedef unsigned long type; };
template <> struct promote<short int, float > { typedef float type; };
template <> struct promote<short int, double > { typedef double type; };
template <> struct promote<short unsigned int, char > { typedef unsigned int type; };
template <> struct promote<short unsigned int, unsigned char > { typedef unsigned int type; };
template <> struct promote<short unsigned int, short int > { typedef unsigned int type; };
template <> struct promote<short unsigned int, short unsigned int > { typedef unsigned int type; };
template <> struct promote<short unsigned int, int > { typedef unsigned int type; };
template <> struct promote<short unsigned int, unsigned int > { typedef unsigned int type; };
template <> struct promote<short unsigned int, long > { typedef long type; };
template <> struct promote<short unsigned int, unsigned long > { typedef unsigned long type; };
template <> struct promote<short unsigned int, float > { typedef float type; };
template <> struct promote<short unsigned int, double > { typedef double type; };
template <> struct promote<short unsigned int, long double > { typedef long double type; };
template <> struct promote<int, char > { typedef int type; };
template <> struct promote<int, unsigned char > { typedef int type; };
template <> struct promote<int, short int > { typedef int type; };
template <> struct promote<int, short unsigned int > { typedef unsigned int type; };
template <> struct promote<int, int > { typedef int type; };
template <> struct promote<int, unsigned int > { typedef unsigned int type; };
template <> struct promote<int, long > { typedef long type; };
template <> struct promote<int, unsigned long > { typedef unsigned long type; };
template <> struct promote<int, float > { typedef float type; };
template <> struct promote<int, double > { typedef double type; };
template <> struct promote<int, long double > { typedef long double type; };
template <> struct promote<unsigned int, char > { typedef unsigned int type; };
template <> struct promote<unsigned int, unsigned char > { typedef unsigned int type; };
template <> struct promote<unsigned int, short int > { typedef unsigned int type; };
template <> struct promote<unsigned int, short unsigned int > { typedef unsigned int type; };
template <> struct promote<unsigned int, int > { typedef unsigned int type; };
template <> struct promote<unsigned int, unsigned int > { typedef unsigned int type; };
template <> struct promote<unsigned int, long > { typedef long type; };
template <> struct promote<unsigned int, unsigned long > { typedef unsigned long type; };
template <> struct promote<unsigned int, float > { typedef float type; };
template <> struct promote<unsigned int, double > { typedef double type; };
template <> struct promote<unsigned int, long double > { typedef long double type; };
template <> struct promote<long, char > { typedef long type; };
template <> struct promote<long, unsigned char > { typedef long type; };
template <> struct promote<long, short int > { typedef long type; };
template <> struct promote<long, short unsigned int > { typedef long type; };
template <> struct promote<long, int > { typedef long type; };
template <> struct promote<long, unsigned int > { typedef long type; };
template <> struct promote<long, long > { typedef long type; };
template <> struct promote<long, unsigned long > { typedef unsigned long type; };
template <> struct promote<long, float > { typedef float type; };
template <> struct promote<long, double > { typedef double type; };
template <> struct promote<long, long double > { typedef long double type; };
template <> struct promote<unsigned long, char > { typedef unsigned long type; };
template <> struct promote<unsigned long, unsigned char > { typedef unsigned long type; };
template <> struct promote<unsigned long, short int > { typedef unsigned long type; };
template <> struct promote<unsigned long, short unsigned int > { typedef unsigned long type; };
template <> struct promote<unsigned long, int > { typedef unsigned long type; };
template <> struct promote<unsigned long, unsigned int > { typedef unsigned long type; };
template <> struct promote<unsigned long, long > { typedef unsigned long type; };
template <> struct promote<unsigned long, unsigned long > { typedef unsigned long type; };
template <> struct promote<unsigned long, float > { typedef float type; };
template <> struct promote<unsigned long, double > { typedef double type; };
template <> struct promote<unsigned long, long double > { typedef long double type; };
template <> struct promote<float, char > { typedef float type; };
template <> struct promote<float, unsigned char > { typedef float type; };
template <> struct promote<float, short int > { typedef float type; };
template <> struct promote<float, short unsigned int > { typedef float type; };
template <> struct promote<float, int > { typedef float type; };
template <> struct promote<float, unsigned int > { typedef float type; };
template <> struct promote<float, long > { typedef float type; };
template <> struct promote<float, unsigned long > { typedef float type; };
template <> struct promote<float, float > { typedef float type; };
template <> struct promote<float, double > { typedef double type; };
template <> struct promote<float, long double > { typedef long double type; };
template <> struct promote<double, char > { typedef double type; };
template <> struct promote<double, unsigned char > { typedef double type; };
template <> struct promote<double, short int > { typedef double type; };
template <> struct promote<double, short unsigned int > { typedef double type; };
template <> struct promote<double, int > { typedef double type; };
template <> struct promote<double, unsigned int > { typedef double type; };
template <> struct promote<double, long > { typedef double type; };
template <> struct promote<double, unsigned long > { typedef double type; };
template <> struct promote<double, float > { typedef double type; };
template <> struct promote<double, double > { typedef double type; };
template <> struct promote<double, long double > { typedef long double type; };
template <> struct promote<long double, char > { typedef long double type; };
template <> struct promote<long double, unsigned char > { typedef long double type; };
template <> struct promote<long double, short int > { typedef long double type; };
template <> struct promote<long double, short unsigned int > { typedef long double type; };
template <> struct promote<long double, int > { typedef long double type; };
template <> struct promote<long double, unsigned int > { typedef long double type; };
template <> struct promote<long double, long > { typedef long double type; };
template <> struct promote<long double, unsigned long > { typedef long double type; };
template <> struct promote<long double, float > { typedef long double type; };
template <> struct promote<long double, double > { typedef long double type; };
template <> struct promote<long double, long double > { typedef long double type; };
#ifdef _RHEOLEF_HAVE_FLOAT128
template <> struct promote<char, float128 > { typedef float128 type; };
template <> struct promote<unsigned char, float128 > { typedef float128 type; };
template <> struct promote<short unsigned int, float128 > { typedef float128 type; };
template <> struct promote<int, float128 > { typedef float128 type; };
template <> struct promote<unsigned int, float128 > { typedef float128 type; };
template <> struct promote<long, float128 > { typedef float128 type; };
template <> struct promote<unsigned long, float128 > { typedef float128 type; };
template <> struct promote<float, float128 > { typedef float128 type; };
template <> struct promote<double, float128 > { typedef float128 type; };
template <> struct promote<float128, char > { typedef float128 type; };
template <> struct promote<float128, unsigned char > { typedef float128 type; };
template <> struct promote<float128, short int > { typedef float128 type; };
template <> struct promote<float128, short unsigned int > { typedef float128 type; };
template <> struct promote<float128, int > { typedef float128 type; };
template <> struct promote<float128, unsigned int > { typedef float128 type; };
template <> struct promote<float128, long > { typedef float128 type; };
template <> struct promote<float128, unsigned long > { typedef float128 type; };
template <> struct promote<float128, float > { typedef float128 type; };
template <> struct promote<float128, double > { typedef float128 type; };
template <> struct promote<float128, float128 > { typedef float128 type; };
#endif // _RHEOLEF_HAVE_FLOAT128
} // namespace rheolef
#endif /* _RHEOLEF_PROMOTE_H */
rheolef::promote< long double, long double >::type
long double type
Definition: promote.h:153
rheolef-config.float
float
Definition: rheolef-config.in:211
rheolef::promote< long double, char >::type
long double type
Definition: promote.h:143
rheolef::promote< unsigned long, unsigned int >::type
unsigned long type
Definition: promote.h:115
rheolef::promote< long, short unsigned int >::type
long type
Definition: promote.h:102
rheolef::promote< int, long double >::type
long double type
Definition: promote.h:87
rheolef::promote< int, unsigned char >::type
int type
Definition: promote.h:78
rheolef::promote< short int, short int >::type
int type
Definition: promote.h:58
rheolef::promote< double, unsigned char >::type
double type
Definition: promote.h:133
rheolef::promote< unsigned char, long double >::type
long double type
Definition: promote.h:55
rheolef::promote< short int, int >::type
int type
Definition: promote.h:60
rheolef::promote< short unsigned int, float >::type
float type
Definition: promote.h:74
rheolef::promote< char, long >::type
long type
Definition: promote.h:40
rheolef::promote< unsigned int, char >::type
unsigned int type
Definition: promote.h:88
rheolef::promote< char, char >::type
int type
Definition: promote.h:34
rheolef::promote< unsigned long, short unsigned int >::type
unsigned long type
Definition: promote.h:113
rheolef::promote< unsigned char, long >::type
long type
Definition: promote.h:51
rheolef::promote< long, char >::type
long type
Definition: promote.h:99
rheolef::promote< double, char >::type
double type
Definition: promote.h:132
rheolef::promote< long, double >::type
double type
Definition: promote.h:108
rheolef::promote< long double, long >::type
long double type
Definition: promote.h:149
rheolef::promote< unsigned int, long double >::type
long double type
Definition: promote.h:98
rheolef::promote< double, short unsigned int >::type
double type
Definition: promote.h:135
rheolef::promote< short unsigned int, unsigned int >::type
unsigned int type
Definition: promote.h:71
rheolef::promote< float, int >::type
float type
Definition: promote.h:125
rheolef::promote< short int, char >::type
int type
Definition: promote.h:56
rheolef::promote< float, float >::type
float type
Definition: promote.h:129
rheolef::promote< short unsigned int, short int >::type
unsigned int type
Definition: promote.h:68
rheolef::promote< unsigned long, unsigned char >::type
unsigned long type
Definition: promote.h:111
rheolef::promote< unsigned int, unsigned long >::type
unsigned long type
Definition: promote.h:95
rheolef::promote< unsigned char, char >::type
int type
Definition: promote.h:45
rheolef::promote< long, unsigned char >::type
long type
Definition: promote.h:100
rheolef::promote< char, short int >::type
int type
Definition: promote.h:36
rheolef::promote< char, float >::type
float type
Definition: promote.h:42
rheolef::promote< unsigned char, float >::type
float type
Definition: promote.h:53
rheolef::promote< short unsigned int, double >::type
double type
Definition: promote.h:75
rheolef::promote< short int, unsigned char >::type
int type
Definition: promote.h:57
rheolef::promote< long, long double >::type
long double type
Definition: promote.h:109
rheolef::promote< double, unsigned int >::type
double type
Definition: promote.h:137
rheolef::promote< unsigned char, unsigned int >::type
unsigned int type
Definition: promote.h:50
rheolef::promote< int, int >::type
int type
Definition: promote.h:81
rheolef::promote< int, unsigned long >::type
unsigned long type
Definition: promote.h:84
rheolef::promote< unsigned long, long double >::type
long double type
Definition: promote.h:120
rheolef::promote< float, unsigned int >::type
float type
Definition: promote.h:126
rheolef::promote< double, long double >::type
long double type
Definition: promote.h:142
rheolef::promote< short int, short unsigned int >::type
unsigned int type
Definition: promote.h:59
rheolef::promote< unsigned int, short unsigned int >::type
unsigned int type
Definition: promote.h:91
rheolef::promote< double, double >::type
double type
Definition: promote.h:141
rheolef::promote< short unsigned int, unsigned char >::type
unsigned int type
Definition: promote.h:67
rheolef::promote< unsigned char, double >::type
double type
Definition: promote.h:54
rheolef::promote< char, unsigned int >::type
unsigned int type
Definition: promote.h:39
rheolef::promote< int, double >::type
double type
Definition: promote.h:86
rheolef::promote< short unsigned int, char >::type
unsigned int type
Definition: promote.h:66
rheolef::promote< short int, unsigned int >::type
unsigned int type
Definition: promote.h:61
rheolef::promote< long, long >::type
long type
Definition: promote.h:105
rheolef::promote< double, int >::type
double type
Definition: promote.h:136
rheolef::promote< unsigned long, float >::type
float type
Definition: promote.h:118
rheolef::promote< float, long >::type
float type
Definition: promote.h:127
rheolef::promote< unsigned char, unsigned long >::type
unsigned long type
Definition: promote.h:52
rheolef::promote< int, char >::type
int type
Definition: promote.h:77
rheolef::promote< unsigned int, float >::type
float type
Definition: promote.h:96
rheolef::promote< double, short int >::type
double type
Definition: promote.h:134
rheolef::promote< unsigned int, unsigned int >::type
unsigned int type
Definition: promote.h:93
rheolef::promote< long double, double >::type
long double type
Definition: promote.h:152
rheolef::promote< int, float >::type
float type
Definition: promote.h:85
rheolef::promote< short int, unsigned long >::type
unsigned long type
Definition: promote.h:63
rheolef::promote< char, double >::type
double type
Definition: promote.h:43
rheolef::promote< long, unsigned int >::type
long type
Definition: promote.h:104
rheolef::promote< short unsigned int, int >::type
unsigned int type
Definition: promote.h:70
rheolef::promote< short int, float >::type
float type
Definition: promote.h:64
rheolef::promote::type
promote_not_specialized_for_this_case< T1, T2 > type
Definition: promote.h:30
rheolef::promote< unsigned long, char >::type
unsigned long type
Definition: promote.h:110
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::promote< short int, double >::type
double type
Definition: promote.h:65
rheolef::promote< unsigned char, short int >::type
int type
Definition: promote.h:47
rheolef::promote< int, short int >::type
int type
Definition: promote.h:79
rheolef::promote< float, long double >::type
long double type
Definition: promote.h:131
rheolef::promote< unsigned int, double >::type
double type
Definition: promote.h:97
rheolef::promote< long, short int >::type
long type
Definition: promote.h:101
rheolef::promote< unsigned long, long >::type
unsigned long type
Definition: promote.h:116
rheolef::promote_not_specialized_for_this_case
Definition: promote.h:26
rheolef::promote< long, int >::type
long type
Definition: promote.h:103
rheolef::promote< unsigned int, short int >::type
unsigned int type
Definition: promote.h:90
rheolef::promote< int, long >::type
long type
Definition: promote.h:83
rheolef::promote< int, unsigned int >::type
unsigned int type
Definition: promote.h:82
rheolef::promote< float, short int >::type
float type
Definition: promote.h:123
rheolef::promote< int, short unsigned int >::type
unsigned int type
Definition: promote.h:80
rheolef::promote< double, float >::type
double type
Definition: promote.h:140
rheolef::promote< char, int >::type
int type
Definition: promote.h:38
rheolef::promote< float, double >::type
double type
Definition: promote.h:130
rheolef::promote< float, char >::type
float type
Definition: promote.h:121
rheolef::promote< short unsigned int, short unsigned int >::type
unsigned int type
Definition: promote.h:69
rheolef::promote< unsigned char, unsigned char >::type
int type
Definition: promote.h:46
rheolef::promote< long double, short unsigned int >::type
long double type
Definition: promote.h:146
rheolef::promote< long double, short int >::type
long double type
Definition: promote.h:145
rheolef::promote< unsigned long, double >::type
double type
Definition: promote.h:119
rheolef::promote< unsigned long, short int >::type
unsigned long type
Definition: promote.h:112
rheolef::promote< double, unsigned long >::type
double type
Definition: promote.h:139
rheolef::promote< unsigned long, unsigned long >::type
unsigned long type
Definition: promote.h:117
rheolef::promote< char, long double >::type
long double type
Definition: promote.h:44
rheolef::promote< short unsigned int, long double >::type
long double type
Definition: promote.h:76
rheolef::promote< unsigned int, int >::type
unsigned int type
Definition: promote.h:92
rheolef::promote< char, short unsigned int >::type
unsigned int type
Definition: promote.h:37
rheolef::promote< long double, unsigned int >::type
long double type
Definition: promote.h:148
rheolef::promote< long double, float >::type
long double type
Definition: promote.h:151
rheolef::promote< unsigned int, long >::type
long type
Definition: promote.h:94
rheolef::promote< double, long >::type
double type
Definition: promote.h:138
rheolef::promote< long double, unsigned char >::type
long double type
Definition: promote.h:144
rheolef::promote
Definition: promote.h:29
rheolef::promote< unsigned long, int >::type
unsigned long type
Definition: promote.h:114
rheolef::promote< char, unsigned char >::type
int type
Definition: promote.h:35
rheolef::promote< short unsigned int, unsigned long >::type
unsigned long type
Definition: promote.h:73
rheolef::promote< unsigned int, unsigned char >::type
unsigned int type
Definition: promote.h:89
rheolef::promote< long double, unsigned long >::type
long double type
Definition: promote.h:150
rheolef::promote< unsigned char, short unsigned int >::type
unsigned int type
Definition: promote.h:48
rheolef::promote< float, unsigned long >::type
float type
Definition: promote.h:128
rheolef::promote< unsigned char, int >::type
int type
Definition: promote.h:49
rheolef::promote< long, unsigned long >::type
unsigned long type
Definition: promote.h:106
rheolef::promote< float, short unsigned int >::type
float type
Definition: promote.h:124
rheolef::promote< long double, int >::type
long double type
Definition: promote.h:147
rheolef::promote< float, unsigned char >::type
float type
Definition: promote.h:122
rheolef::promote< long, float >::type
float type
Definition: promote.h:107
rheolef::promote< short int, long >::type
long type
Definition: promote.h:62
rheolef::promote< short unsigned int, long >::type
long type
Definition: promote.h:72
rheolef::promote< char, unsigned long >::type
unsigned long type
Definition: promote.h:41