[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]
vigra/promote_traits.hxx | ![]() |
00001 /************************************************************************/ 00002 /* */ 00003 /* Copyright 1998-2008 by Ullrich Koethe */ 00004 /* */ 00005 /* This file is part of the VIGRA computer vision library. */ 00006 /* The VIGRA Website is */ 00007 /* http://hci.iwr.uni-heidelberg.de/vigra/ */ 00008 /* Please direct questions, bug reports, and contributions to */ 00009 /* ullrich.koethe@iwr.uni-heidelberg.de or */ 00010 /* vigra@informatik.uni-hamburg.de */ 00011 /* */ 00012 /* Permission is hereby granted, free of charge, to any person */ 00013 /* obtaining a copy of this software and associated documentation */ 00014 /* files (the "Software"), to deal in the Software without */ 00015 /* restriction, including without limitation the rights to use, */ 00016 /* copy, modify, merge, publish, distribute, sublicense, and/or */ 00017 /* sell copies of the Software, and to permit persons to whom the */ 00018 /* Software is furnished to do so, subject to the following */ 00019 /* conditions: */ 00020 /* */ 00021 /* The above copyright notice and this permission notice shall be */ 00022 /* included in all copies or substantial portions of the */ 00023 /* Software. */ 00024 /* */ 00025 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND */ 00026 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES */ 00027 /* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND */ 00028 /* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT */ 00029 /* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, */ 00030 /* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING */ 00031 /* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR */ 00032 /* OTHER DEALINGS IN THE SOFTWARE. */ 00033 /* */ 00034 /************************************************************************/ 00035 00036 00037 #ifndef VIGRA_PROMOTETRAITS_HXX 00038 #define VIGRA_PROMOTETRAITS_HXX 00039 00040 // this file was autogenerated from promote_traits.hxx.py - DO NOT EDIT 00041 00042 template <> 00043 struct PromoteTraits<bool, bool> : public detail::PromoteType<bool, bool> 00044 { 00045 typedef detail::PromoteType<bool, bool>::Promote Promote; 00046 using detail::PromoteType<bool, bool>::toPromote; 00047 }; 00048 00049 template <> 00050 struct PromoteTraits<bool, signed char> : public detail::PromoteType<bool, signed char> 00051 { 00052 typedef detail::PromoteType<bool, signed char>::Promote Promote; 00053 using detail::PromoteType<bool, signed char>::toPromote; 00054 }; 00055 00056 template <> 00057 struct PromoteTraits<bool, unsigned char> : public detail::PromoteType<bool, unsigned char> 00058 { 00059 typedef detail::PromoteType<bool, unsigned char>::Promote Promote; 00060 using detail::PromoteType<bool, unsigned char>::toPromote; 00061 }; 00062 00063 template <> 00064 struct PromoteTraits<bool, short> : public detail::PromoteType<bool, short> 00065 { 00066 typedef detail::PromoteType<bool, short>::Promote Promote; 00067 using detail::PromoteType<bool, short>::toPromote; 00068 }; 00069 00070 template <> 00071 struct PromoteTraits<bool, unsigned short> : public detail::PromoteType<bool, unsigned short> 00072 { 00073 typedef detail::PromoteType<bool, unsigned short>::Promote Promote; 00074 using detail::PromoteType<bool, unsigned short>::toPromote; 00075 }; 00076 00077 template <> 00078 struct PromoteTraits<bool, int> : public detail::PromoteType<bool, int> 00079 { 00080 typedef detail::PromoteType<bool, int>::Promote Promote; 00081 using detail::PromoteType<bool, int>::toPromote; 00082 }; 00083 00084 template <> 00085 struct PromoteTraits<bool, unsigned int> : public detail::PromoteType<bool, unsigned int> 00086 { 00087 typedef detail::PromoteType<bool, unsigned int>::Promote Promote; 00088 using detail::PromoteType<bool, unsigned int>::toPromote; 00089 }; 00090 00091 template <> 00092 struct PromoteTraits<bool, long> : public detail::PromoteType<bool, long> 00093 { 00094 typedef detail::PromoteType<bool, long>::Promote Promote; 00095 using detail::PromoteType<bool, long>::toPromote; 00096 }; 00097 00098 template <> 00099 struct PromoteTraits<bool, unsigned long> : public detail::PromoteType<bool, unsigned long> 00100 { 00101 typedef detail::PromoteType<bool, unsigned long>::Promote Promote; 00102 using detail::PromoteType<bool, unsigned long>::toPromote; 00103 }; 00104 00105 template <> 00106 struct PromoteTraits<bool, float> : public detail::PromoteType<bool, float> 00107 { 00108 typedef detail::PromoteType<bool, float>::Promote Promote; 00109 using detail::PromoteType<bool, float>::toPromote; 00110 }; 00111 00112 template <> 00113 struct PromoteTraits<bool, double> : public detail::PromoteType<bool, double> 00114 { 00115 typedef detail::PromoteType<bool, double>::Promote Promote; 00116 using detail::PromoteType<bool, double>::toPromote; 00117 }; 00118 00119 template <> 00120 struct PromoteTraits<bool, long double> : public detail::PromoteType<bool, long double> 00121 { 00122 typedef detail::PromoteType<bool, long double>::Promote Promote; 00123 using detail::PromoteType<bool, long double>::toPromote; 00124 }; 00125 00126 #ifdef LLONG_MAX 00127 template <> 00128 struct PromoteTraits<bool, long long> : public detail::PromoteType<bool, long long> 00129 { 00130 typedef detail::PromoteType<bool, long long>::Promote Promote; 00131 using detail::PromoteType<bool, long long>::toPromote; 00132 }; 00133 #endif // LLONG_MAX 00134 00135 #ifdef LLONG_MAX 00136 template <> 00137 struct PromoteTraits<bool, unsigned long long> : public detail::PromoteType<bool, unsigned long long> 00138 { 00139 typedef detail::PromoteType<bool, unsigned long long>::Promote Promote; 00140 using detail::PromoteType<bool, unsigned long long>::toPromote; 00141 }; 00142 #endif // LLONG_MAX 00143 00144 template <> 00145 struct PromoteTraits<signed char, signed char> : public detail::PromoteType<signed char, signed char> 00146 { 00147 typedef detail::PromoteType<signed char, signed char>::Promote Promote; 00148 using detail::PromoteType<signed char, signed char>::toPromote; 00149 }; 00150 00151 template <> 00152 struct PromoteTraits<signed char, bool> : public detail::PromoteType<signed char, bool> 00153 { 00154 typedef detail::PromoteType<signed char, bool>::Promote Promote; 00155 using detail::PromoteType<signed char, bool>::toPromote; 00156 }; 00157 00158 template <> 00159 struct PromoteTraits<signed char, unsigned char> : public detail::PromoteType<signed char, unsigned char> 00160 { 00161 typedef detail::PromoteType<signed char, unsigned char>::Promote Promote; 00162 using detail::PromoteType<signed char, unsigned char>::toPromote; 00163 }; 00164 00165 template <> 00166 struct PromoteTraits<signed char, short> : public detail::PromoteType<signed char, short> 00167 { 00168 typedef detail::PromoteType<signed char, short>::Promote Promote; 00169 using detail::PromoteType<signed char, short>::toPromote; 00170 }; 00171 00172 template <> 00173 struct PromoteTraits<signed char, unsigned short> : public detail::PromoteType<signed char, unsigned short> 00174 { 00175 typedef detail::PromoteType<signed char, unsigned short>::Promote Promote; 00176 using detail::PromoteType<signed char, unsigned short>::toPromote; 00177 }; 00178 00179 template <> 00180 struct PromoteTraits<signed char, int> : public detail::PromoteType<signed char, int> 00181 { 00182 typedef detail::PromoteType<signed char, int>::Promote Promote; 00183 using detail::PromoteType<signed char, int>::toPromote; 00184 }; 00185 00186 template <> 00187 struct PromoteTraits<signed char, unsigned int> : public detail::PromoteType<signed char, unsigned int> 00188 { 00189 typedef detail::PromoteType<signed char, unsigned int>::Promote Promote; 00190 using detail::PromoteType<signed char, unsigned int>::toPromote; 00191 }; 00192 00193 template <> 00194 struct PromoteTraits<signed char, long> : public detail::PromoteType<signed char, long> 00195 { 00196 typedef detail::PromoteType<signed char, long>::Promote Promote; 00197 using detail::PromoteType<signed char, long>::toPromote; 00198 }; 00199 00200 template <> 00201 struct PromoteTraits<signed char, unsigned long> : public detail::PromoteType<signed char, unsigned long> 00202 { 00203 typedef detail::PromoteType<signed char, unsigned long>::Promote Promote; 00204 using detail::PromoteType<signed char, unsigned long>::toPromote; 00205 }; 00206 00207 template <> 00208 struct PromoteTraits<signed char, float> : public detail::PromoteType<signed char, float> 00209 { 00210 typedef detail::PromoteType<signed char, float>::Promote Promote; 00211 using detail::PromoteType<signed char, float>::toPromote; 00212 }; 00213 00214 template <> 00215 struct PromoteTraits<signed char, double> : public detail::PromoteType<signed char, double> 00216 { 00217 typedef detail::PromoteType<signed char, double>::Promote Promote; 00218 using detail::PromoteType<signed char, double>::toPromote; 00219 }; 00220 00221 template <> 00222 struct PromoteTraits<signed char, long double> : public detail::PromoteType<signed char, long double> 00223 { 00224 typedef detail::PromoteType<signed char, long double>::Promote Promote; 00225 using detail::PromoteType<signed char, long double>::toPromote; 00226 }; 00227 00228 #ifdef LLONG_MAX 00229 template <> 00230 struct PromoteTraits<signed char, long long> : public detail::PromoteType<signed char, long long> 00231 { 00232 typedef detail::PromoteType<signed char, long long>::Promote Promote; 00233 using detail::PromoteType<signed char, long long>::toPromote; 00234 }; 00235 #endif // LLONG_MAX 00236 00237 #ifdef LLONG_MAX 00238 template <> 00239 struct PromoteTraits<signed char, unsigned long long> : public detail::PromoteType<signed char, unsigned long long> 00240 { 00241 typedef detail::PromoteType<signed char, unsigned long long>::Promote Promote; 00242 using detail::PromoteType<signed char, unsigned long long>::toPromote; 00243 }; 00244 #endif // LLONG_MAX 00245 00246 template <> 00247 struct PromoteTraits<unsigned char, unsigned char> : public detail::PromoteType<unsigned char, unsigned char> 00248 { 00249 typedef detail::PromoteType<unsigned char, unsigned char>::Promote Promote; 00250 using detail::PromoteType<unsigned char, unsigned char>::toPromote; 00251 }; 00252 00253 template <> 00254 struct PromoteTraits<unsigned char, bool> : public detail::PromoteType<unsigned char, bool> 00255 { 00256 typedef detail::PromoteType<unsigned char, bool>::Promote Promote; 00257 using detail::PromoteType<unsigned char, bool>::toPromote; 00258 }; 00259 00260 template <> 00261 struct PromoteTraits<unsigned char, signed char> : public detail::PromoteType<unsigned char, signed char> 00262 { 00263 typedef detail::PromoteType<unsigned char, signed char>::Promote Promote; 00264 using detail::PromoteType<unsigned char, signed char>::toPromote; 00265 }; 00266 00267 template <> 00268 struct PromoteTraits<unsigned char, short> : public detail::PromoteType<unsigned char, short> 00269 { 00270 typedef detail::PromoteType<unsigned char, short>::Promote Promote; 00271 using detail::PromoteType<unsigned char, short>::toPromote; 00272 }; 00273 00274 template <> 00275 struct PromoteTraits<unsigned char, unsigned short> : public detail::PromoteType<unsigned char, unsigned short> 00276 { 00277 typedef detail::PromoteType<unsigned char, unsigned short>::Promote Promote; 00278 using detail::PromoteType<unsigned char, unsigned short>::toPromote; 00279 }; 00280 00281 template <> 00282 struct PromoteTraits<unsigned char, int> : public detail::PromoteType<unsigned char, int> 00283 { 00284 typedef detail::PromoteType<unsigned char, int>::Promote Promote; 00285 using detail::PromoteType<unsigned char, int>::toPromote; 00286 }; 00287 00288 template <> 00289 struct PromoteTraits<unsigned char, unsigned int> : public detail::PromoteType<unsigned char, unsigned int> 00290 { 00291 typedef detail::PromoteType<unsigned char, unsigned int>::Promote Promote; 00292 using detail::PromoteType<unsigned char, unsigned int>::toPromote; 00293 }; 00294 00295 template <> 00296 struct PromoteTraits<unsigned char, long> : public detail::PromoteType<unsigned char, long> 00297 { 00298 typedef detail::PromoteType<unsigned char, long>::Promote Promote; 00299 using detail::PromoteType<unsigned char, long>::toPromote; 00300 }; 00301 00302 template <> 00303 struct PromoteTraits<unsigned char, unsigned long> : public detail::PromoteType<unsigned char, unsigned long> 00304 { 00305 typedef detail::PromoteType<unsigned char, unsigned long>::Promote Promote; 00306 using detail::PromoteType<unsigned char, unsigned long>::toPromote; 00307 }; 00308 00309 template <> 00310 struct PromoteTraits<unsigned char, float> : public detail::PromoteType<unsigned char, float> 00311 { 00312 typedef detail::PromoteType<unsigned char, float>::Promote Promote; 00313 using detail::PromoteType<unsigned char, float>::toPromote; 00314 }; 00315 00316 template <> 00317 struct PromoteTraits<unsigned char, double> : public detail::PromoteType<unsigned char, double> 00318 { 00319 typedef detail::PromoteType<unsigned char, double>::Promote Promote; 00320 using detail::PromoteType<unsigned char, double>::toPromote; 00321 }; 00322 00323 template <> 00324 struct PromoteTraits<unsigned char, long double> : public detail::PromoteType<unsigned char, long double> 00325 { 00326 typedef detail::PromoteType<unsigned char, long double>::Promote Promote; 00327 using detail::PromoteType<unsigned char, long double>::toPromote; 00328 }; 00329 00330 #ifdef LLONG_MAX 00331 template <> 00332 struct PromoteTraits<unsigned char, long long> : public detail::PromoteType<unsigned char, long long> 00333 { 00334 typedef detail::PromoteType<unsigned char, long long>::Promote Promote; 00335 using detail::PromoteType<unsigned char, long long>::toPromote; 00336 }; 00337 #endif // LLONG_MAX 00338 00339 #ifdef LLONG_MAX 00340 template <> 00341 struct PromoteTraits<unsigned char, unsigned long long> : public detail::PromoteType<unsigned char, unsigned long long> 00342 { 00343 typedef detail::PromoteType<unsigned char, unsigned long long>::Promote Promote; 00344 using detail::PromoteType<unsigned char, unsigned long long>::toPromote; 00345 }; 00346 #endif // LLONG_MAX 00347 00348 template <> 00349 struct PromoteTraits<short, short> : public detail::PromoteType<short, short> 00350 { 00351 typedef detail::PromoteType<short, short>::Promote Promote; 00352 using detail::PromoteType<short, short>::toPromote; 00353 }; 00354 00355 template <> 00356 struct PromoteTraits<short, bool> : public detail::PromoteType<short, bool> 00357 { 00358 typedef detail::PromoteType<short, bool>::Promote Promote; 00359 using detail::PromoteType<short, bool>::toPromote; 00360 }; 00361 00362 template <> 00363 struct PromoteTraits<short, signed char> : public detail::PromoteType<short, signed char> 00364 { 00365 typedef detail::PromoteType<short, signed char>::Promote Promote; 00366 using detail::PromoteType<short, signed char>::toPromote; 00367 }; 00368 00369 template <> 00370 struct PromoteTraits<short, unsigned char> : public detail::PromoteType<short, unsigned char> 00371 { 00372 typedef detail::PromoteType<short, unsigned char>::Promote Promote; 00373 using detail::PromoteType<short, unsigned char>::toPromote; 00374 }; 00375 00376 template <> 00377 struct PromoteTraits<short, unsigned short> : public detail::PromoteType<short, unsigned short> 00378 { 00379 typedef detail::PromoteType<short, unsigned short>::Promote Promote; 00380 using detail::PromoteType<short, unsigned short>::toPromote; 00381 }; 00382 00383 template <> 00384 struct PromoteTraits<short, int> : public detail::PromoteType<short, int> 00385 { 00386 typedef detail::PromoteType<short, int>::Promote Promote; 00387 using detail::PromoteType<short, int>::toPromote; 00388 }; 00389 00390 template <> 00391 struct PromoteTraits<short, unsigned int> : public detail::PromoteType<short, unsigned int> 00392 { 00393 typedef detail::PromoteType<short, unsigned int>::Promote Promote; 00394 using detail::PromoteType<short, unsigned int>::toPromote; 00395 }; 00396 00397 template <> 00398 struct PromoteTraits<short, long> : public detail::PromoteType<short, long> 00399 { 00400 typedef detail::PromoteType<short, long>::Promote Promote; 00401 using detail::PromoteType<short, long>::toPromote; 00402 }; 00403 00404 template <> 00405 struct PromoteTraits<short, unsigned long> : public detail::PromoteType<short, unsigned long> 00406 { 00407 typedef detail::PromoteType<short, unsigned long>::Promote Promote; 00408 using detail::PromoteType<short, unsigned long>::toPromote; 00409 }; 00410 00411 template <> 00412 struct PromoteTraits<short, float> : public detail::PromoteType<short, float> 00413 { 00414 typedef detail::PromoteType<short, float>::Promote Promote; 00415 using detail::PromoteType<short, float>::toPromote; 00416 }; 00417 00418 template <> 00419 struct PromoteTraits<short, double> : public detail::PromoteType<short, double> 00420 { 00421 typedef detail::PromoteType<short, double>::Promote Promote; 00422 using detail::PromoteType<short, double>::toPromote; 00423 }; 00424 00425 template <> 00426 struct PromoteTraits<short, long double> : public detail::PromoteType<short, long double> 00427 { 00428 typedef detail::PromoteType<short, long double>::Promote Promote; 00429 using detail::PromoteType<short, long double>::toPromote; 00430 }; 00431 00432 #ifdef LLONG_MAX 00433 template <> 00434 struct PromoteTraits<short, long long> : public detail::PromoteType<short, long long> 00435 { 00436 typedef detail::PromoteType<short, long long>::Promote Promote; 00437 using detail::PromoteType<short, long long>::toPromote; 00438 }; 00439 #endif // LLONG_MAX 00440 00441 #ifdef LLONG_MAX 00442 template <> 00443 struct PromoteTraits<short, unsigned long long> : public detail::PromoteType<short, unsigned long long> 00444 { 00445 typedef detail::PromoteType<short, unsigned long long>::Promote Promote; 00446 using detail::PromoteType<short, unsigned long long>::toPromote; 00447 }; 00448 #endif // LLONG_MAX 00449 00450 template <> 00451 struct PromoteTraits<unsigned short, unsigned short> : public detail::PromoteType<unsigned short, unsigned short> 00452 { 00453 typedef detail::PromoteType<unsigned short, unsigned short>::Promote Promote; 00454 using detail::PromoteType<unsigned short, unsigned short>::toPromote; 00455 }; 00456 00457 template <> 00458 struct PromoteTraits<unsigned short, bool> : public detail::PromoteType<unsigned short, bool> 00459 { 00460 typedef detail::PromoteType<unsigned short, bool>::Promote Promote; 00461 using detail::PromoteType<unsigned short, bool>::toPromote; 00462 }; 00463 00464 template <> 00465 struct PromoteTraits<unsigned short, signed char> : public detail::PromoteType<unsigned short, signed char> 00466 { 00467 typedef detail::PromoteType<unsigned short, signed char>::Promote Promote; 00468 using detail::PromoteType<unsigned short, signed char>::toPromote; 00469 }; 00470 00471 template <> 00472 struct PromoteTraits<unsigned short, unsigned char> : public detail::PromoteType<unsigned short, unsigned char> 00473 { 00474 typedef detail::PromoteType<unsigned short, unsigned char>::Promote Promote; 00475 using detail::PromoteType<unsigned short, unsigned char>::toPromote; 00476 }; 00477 00478 template <> 00479 struct PromoteTraits<unsigned short, short> : public detail::PromoteType<unsigned short, short> 00480 { 00481 typedef detail::PromoteType<unsigned short, short>::Promote Promote; 00482 using detail::PromoteType<unsigned short, short>::toPromote; 00483 }; 00484 00485 template <> 00486 struct PromoteTraits<unsigned short, int> : public detail::PromoteType<unsigned short, int> 00487 { 00488 typedef detail::PromoteType<unsigned short, int>::Promote Promote; 00489 using detail::PromoteType<unsigned short, int>::toPromote; 00490 }; 00491 00492 template <> 00493 struct PromoteTraits<unsigned short, unsigned int> : public detail::PromoteType<unsigned short, unsigned int> 00494 { 00495 typedef detail::PromoteType<unsigned short, unsigned int>::Promote Promote; 00496 using detail::PromoteType<unsigned short, unsigned int>::toPromote; 00497 }; 00498 00499 template <> 00500 struct PromoteTraits<unsigned short, long> : public detail::PromoteType<unsigned short, long> 00501 { 00502 typedef detail::PromoteType<unsigned short, long>::Promote Promote; 00503 using detail::PromoteType<unsigned short, long>::toPromote; 00504 }; 00505 00506 template <> 00507 struct PromoteTraits<unsigned short, unsigned long> : public detail::PromoteType<unsigned short, unsigned long> 00508 { 00509 typedef detail::PromoteType<unsigned short, unsigned long>::Promote Promote; 00510 using detail::PromoteType<unsigned short, unsigned long>::toPromote; 00511 }; 00512 00513 template <> 00514 struct PromoteTraits<unsigned short, float> : public detail::PromoteType<unsigned short, float> 00515 { 00516 typedef detail::PromoteType<unsigned short, float>::Promote Promote; 00517 using detail::PromoteType<unsigned short, float>::toPromote; 00518 }; 00519 00520 template <> 00521 struct PromoteTraits<unsigned short, double> : public detail::PromoteType<unsigned short, double> 00522 { 00523 typedef detail::PromoteType<unsigned short, double>::Promote Promote; 00524 using detail::PromoteType<unsigned short, double>::toPromote; 00525 }; 00526 00527 template <> 00528 struct PromoteTraits<unsigned short, long double> : public detail::PromoteType<unsigned short, long double> 00529 { 00530 typedef detail::PromoteType<unsigned short, long double>::Promote Promote; 00531 using detail::PromoteType<unsigned short, long double>::toPromote; 00532 }; 00533 00534 #ifdef LLONG_MAX 00535 template <> 00536 struct PromoteTraits<unsigned short, long long> : public detail::PromoteType<unsigned short, long long> 00537 { 00538 typedef detail::PromoteType<unsigned short, long long>::Promote Promote; 00539 using detail::PromoteType<unsigned short, long long>::toPromote; 00540 }; 00541 #endif // LLONG_MAX 00542 00543 #ifdef LLONG_MAX 00544 template <> 00545 struct PromoteTraits<unsigned short, unsigned long long> : public detail::PromoteType<unsigned short, unsigned long long> 00546 { 00547 typedef detail::PromoteType<unsigned short, unsigned long long>::Promote Promote; 00548 using detail::PromoteType<unsigned short, unsigned long long>::toPromote; 00549 }; 00550 #endif // LLONG_MAX 00551 00552 template <> 00553 struct PromoteTraits<int, int> : public detail::PromoteType<int, int> 00554 { 00555 typedef detail::PromoteType<int, int>::Promote Promote; 00556 using detail::PromoteType<int, int>::toPromote; 00557 }; 00558 00559 template <> 00560 struct PromoteTraits<int, bool> : public detail::PromoteType<int, bool> 00561 { 00562 typedef detail::PromoteType<int, bool>::Promote Promote; 00563 using detail::PromoteType<int, bool>::toPromote; 00564 }; 00565 00566 template <> 00567 struct PromoteTraits<int, signed char> : public detail::PromoteType<int, signed char> 00568 { 00569 typedef detail::PromoteType<int, signed char>::Promote Promote; 00570 using detail::PromoteType<int, signed char>::toPromote; 00571 }; 00572 00573 template <> 00574 struct PromoteTraits<int, unsigned char> : public detail::PromoteType<int, unsigned char> 00575 { 00576 typedef detail::PromoteType<int, unsigned char>::Promote Promote; 00577 using detail::PromoteType<int, unsigned char>::toPromote; 00578 }; 00579 00580 template <> 00581 struct PromoteTraits<int, short> : public detail::PromoteType<int, short> 00582 { 00583 typedef detail::PromoteType<int, short>::Promote Promote; 00584 using detail::PromoteType<int, short>::toPromote; 00585 }; 00586 00587 template <> 00588 struct PromoteTraits<int, unsigned short> : public detail::PromoteType<int, unsigned short> 00589 { 00590 typedef detail::PromoteType<int, unsigned short>::Promote Promote; 00591 using detail::PromoteType<int, unsigned short>::toPromote; 00592 }; 00593 00594 template <> 00595 struct PromoteTraits<int, unsigned int> : public detail::PromoteType<int, unsigned int> 00596 { 00597 typedef detail::PromoteType<int, unsigned int>::Promote Promote; 00598 using detail::PromoteType<int, unsigned int>::toPromote; 00599 }; 00600 00601 template <> 00602 struct PromoteTraits<int, long> : public detail::PromoteType<int, long> 00603 { 00604 typedef detail::PromoteType<int, long>::Promote Promote; 00605 using detail::PromoteType<int, long>::toPromote; 00606 }; 00607 00608 template <> 00609 struct PromoteTraits<int, unsigned long> : public detail::PromoteType<int, unsigned long> 00610 { 00611 typedef detail::PromoteType<int, unsigned long>::Promote Promote; 00612 using detail::PromoteType<int, unsigned long>::toPromote; 00613 }; 00614 00615 template <> 00616 struct PromoteTraits<int, float> : public detail::PromoteType<int, float> 00617 { 00618 typedef detail::PromoteType<int, float>::Promote Promote; 00619 using detail::PromoteType<int, float>::toPromote; 00620 }; 00621 00622 template <> 00623 struct PromoteTraits<int, double> : public detail::PromoteType<int, double> 00624 { 00625 typedef detail::PromoteType<int, double>::Promote Promote; 00626 using detail::PromoteType<int, double>::toPromote; 00627 }; 00628 00629 template <> 00630 struct PromoteTraits<int, long double> : public detail::PromoteType<int, long double> 00631 { 00632 typedef detail::PromoteType<int, long double>::Promote Promote; 00633 using detail::PromoteType<int, long double>::toPromote; 00634 }; 00635 00636 #ifdef LLONG_MAX 00637 template <> 00638 struct PromoteTraits<int, long long> : public detail::PromoteType<int, long long> 00639 { 00640 typedef detail::PromoteType<int, long long>::Promote Promote; 00641 using detail::PromoteType<int, long long>::toPromote; 00642 }; 00643 #endif // LLONG_MAX 00644 00645 #ifdef LLONG_MAX 00646 template <> 00647 struct PromoteTraits<int, unsigned long long> : public detail::PromoteType<int, unsigned long long> 00648 { 00649 typedef detail::PromoteType<int, unsigned long long>::Promote Promote; 00650 using detail::PromoteType<int, unsigned long long>::toPromote; 00651 }; 00652 #endif // LLONG_MAX 00653 00654 template <> 00655 struct PromoteTraits<unsigned int, unsigned int> : public detail::PromoteType<unsigned int, unsigned int> 00656 { 00657 typedef detail::PromoteType<unsigned int, unsigned int>::Promote Promote; 00658 using detail::PromoteType<unsigned int, unsigned int>::toPromote; 00659 }; 00660 00661 template <> 00662 struct PromoteTraits<unsigned int, bool> : public detail::PromoteType<unsigned int, bool> 00663 { 00664 typedef detail::PromoteType<unsigned int, bool>::Promote Promote; 00665 using detail::PromoteType<unsigned int, bool>::toPromote; 00666 }; 00667 00668 template <> 00669 struct PromoteTraits<unsigned int, signed char> : public detail::PromoteType<unsigned int, signed char> 00670 { 00671 typedef detail::PromoteType<unsigned int, signed char>::Promote Promote; 00672 using detail::PromoteType<unsigned int, signed char>::toPromote; 00673 }; 00674 00675 template <> 00676 struct PromoteTraits<unsigned int, unsigned char> : public detail::PromoteType<unsigned int, unsigned char> 00677 { 00678 typedef detail::PromoteType<unsigned int, unsigned char>::Promote Promote; 00679 using detail::PromoteType<unsigned int, unsigned char>::toPromote; 00680 }; 00681 00682 template <> 00683 struct PromoteTraits<unsigned int, short> : public detail::PromoteType<unsigned int, short> 00684 { 00685 typedef detail::PromoteType<unsigned int, short>::Promote Promote; 00686 using detail::PromoteType<unsigned int, short>::toPromote; 00687 }; 00688 00689 template <> 00690 struct PromoteTraits<unsigned int, unsigned short> : public detail::PromoteType<unsigned int, unsigned short> 00691 { 00692 typedef detail::PromoteType<unsigned int, unsigned short>::Promote Promote; 00693 using detail::PromoteType<unsigned int, unsigned short>::toPromote; 00694 }; 00695 00696 template <> 00697 struct PromoteTraits<unsigned int, int> : public detail::PromoteType<unsigned int, int> 00698 { 00699 typedef detail::PromoteType<unsigned int, int>::Promote Promote; 00700 using detail::PromoteType<unsigned int, int>::toPromote; 00701 }; 00702 00703 template <> 00704 struct PromoteTraits<unsigned int, long> : public detail::PromoteType<unsigned int, long> 00705 { 00706 typedef detail::PromoteType<unsigned int, long>::Promote Promote; 00707 using detail::PromoteType<unsigned int, long>::toPromote; 00708 }; 00709 00710 template <> 00711 struct PromoteTraits<unsigned int, unsigned long> : public detail::PromoteType<unsigned int, unsigned long> 00712 { 00713 typedef detail::PromoteType<unsigned int, unsigned long>::Promote Promote; 00714 using detail::PromoteType<unsigned int, unsigned long>::toPromote; 00715 }; 00716 00717 template <> 00718 struct PromoteTraits<unsigned int, float> : public detail::PromoteType<unsigned int, float> 00719 { 00720 typedef detail::PromoteType<unsigned int, float>::Promote Promote; 00721 using detail::PromoteType<unsigned int, float>::toPromote; 00722 }; 00723 00724 template <> 00725 struct PromoteTraits<unsigned int, double> : public detail::PromoteType<unsigned int, double> 00726 { 00727 typedef detail::PromoteType<unsigned int, double>::Promote Promote; 00728 using detail::PromoteType<unsigned int, double>::toPromote; 00729 }; 00730 00731 template <> 00732 struct PromoteTraits<unsigned int, long double> : public detail::PromoteType<unsigned int, long double> 00733 { 00734 typedef detail::PromoteType<unsigned int, long double>::Promote Promote; 00735 using detail::PromoteType<unsigned int, long double>::toPromote; 00736 }; 00737 00738 #ifdef LLONG_MAX 00739 template <> 00740 struct PromoteTraits<unsigned int, long long> : public detail::PromoteType<unsigned int, long long> 00741 { 00742 typedef detail::PromoteType<unsigned int, long long>::Promote Promote; 00743 using detail::PromoteType<unsigned int, long long>::toPromote; 00744 }; 00745 #endif // LLONG_MAX 00746 00747 #ifdef LLONG_MAX 00748 template <> 00749 struct PromoteTraits<unsigned int, unsigned long long> : public detail::PromoteType<unsigned int, unsigned long long> 00750 { 00751 typedef detail::PromoteType<unsigned int, unsigned long long>::Promote Promote; 00752 using detail::PromoteType<unsigned int, unsigned long long>::toPromote; 00753 }; 00754 #endif // LLONG_MAX 00755 00756 template <> 00757 struct PromoteTraits<long, long> : public detail::PromoteType<long, long> 00758 { 00759 typedef detail::PromoteType<long, long>::Promote Promote; 00760 using detail::PromoteType<long, long>::toPromote; 00761 }; 00762 00763 template <> 00764 struct PromoteTraits<long, bool> : public detail::PromoteType<long, bool> 00765 { 00766 typedef detail::PromoteType<long, bool>::Promote Promote; 00767 using detail::PromoteType<long, bool>::toPromote; 00768 }; 00769 00770 template <> 00771 struct PromoteTraits<long, signed char> : public detail::PromoteType<long, signed char> 00772 { 00773 typedef detail::PromoteType<long, signed char>::Promote Promote; 00774 using detail::PromoteType<long, signed char>::toPromote; 00775 }; 00776 00777 template <> 00778 struct PromoteTraits<long, unsigned char> : public detail::PromoteType<long, unsigned char> 00779 { 00780 typedef detail::PromoteType<long, unsigned char>::Promote Promote; 00781 using detail::PromoteType<long, unsigned char>::toPromote; 00782 }; 00783 00784 template <> 00785 struct PromoteTraits<long, short> : public detail::PromoteType<long, short> 00786 { 00787 typedef detail::PromoteType<long, short>::Promote Promote; 00788 using detail::PromoteType<long, short>::toPromote; 00789 }; 00790 00791 template <> 00792 struct PromoteTraits<long, unsigned short> : public detail::PromoteType<long, unsigned short> 00793 { 00794 typedef detail::PromoteType<long, unsigned short>::Promote Promote; 00795 using detail::PromoteType<long, unsigned short>::toPromote; 00796 }; 00797 00798 template <> 00799 struct PromoteTraits<long, int> : public detail::PromoteType<long, int> 00800 { 00801 typedef detail::PromoteType<long, int>::Promote Promote; 00802 using detail::PromoteType<long, int>::toPromote; 00803 }; 00804 00805 template <> 00806 struct PromoteTraits<long, unsigned int> : public detail::PromoteType<long, unsigned int> 00807 { 00808 typedef detail::PromoteType<long, unsigned int>::Promote Promote; 00809 using detail::PromoteType<long, unsigned int>::toPromote; 00810 }; 00811 00812 template <> 00813 struct PromoteTraits<long, unsigned long> : public detail::PromoteType<long, unsigned long> 00814 { 00815 typedef detail::PromoteType<long, unsigned long>::Promote Promote; 00816 using detail::PromoteType<long, unsigned long>::toPromote; 00817 }; 00818 00819 template <> 00820 struct PromoteTraits<long, float> : public detail::PromoteType<long, float> 00821 { 00822 typedef detail::PromoteType<long, float>::Promote Promote; 00823 using detail::PromoteType<long, float>::toPromote; 00824 }; 00825 00826 template <> 00827 struct PromoteTraits<long, double> : public detail::PromoteType<long, double> 00828 { 00829 typedef detail::PromoteType<long, double>::Promote Promote; 00830 using detail::PromoteType<long, double>::toPromote; 00831 }; 00832 00833 template <> 00834 struct PromoteTraits<long, long double> : public detail::PromoteType<long, long double> 00835 { 00836 typedef detail::PromoteType<long, long double>::Promote Promote; 00837 using detail::PromoteType<long, long double>::toPromote; 00838 }; 00839 00840 #ifdef LLONG_MAX 00841 template <> 00842 struct PromoteTraits<long, long long> : public detail::PromoteType<long, long long> 00843 { 00844 typedef detail::PromoteType<long, long long>::Promote Promote; 00845 using detail::PromoteType<long, long long>::toPromote; 00846 }; 00847 #endif // LLONG_MAX 00848 00849 #ifdef LLONG_MAX 00850 template <> 00851 struct PromoteTraits<long, unsigned long long> : public detail::PromoteType<long, unsigned long long> 00852 { 00853 typedef detail::PromoteType<long, unsigned long long>::Promote Promote; 00854 using detail::PromoteType<long, unsigned long long>::toPromote; 00855 }; 00856 #endif // LLONG_MAX 00857 00858 template <> 00859 struct PromoteTraits<unsigned long, unsigned long> : public detail::PromoteType<unsigned long, unsigned long> 00860 { 00861 typedef detail::PromoteType<unsigned long, unsigned long>::Promote Promote; 00862 using detail::PromoteType<unsigned long, unsigned long>::toPromote; 00863 }; 00864 00865 template <> 00866 struct PromoteTraits<unsigned long, bool> : public detail::PromoteType<unsigned long, bool> 00867 { 00868 typedef detail::PromoteType<unsigned long, bool>::Promote Promote; 00869 using detail::PromoteType<unsigned long, bool>::toPromote; 00870 }; 00871 00872 template <> 00873 struct PromoteTraits<unsigned long, signed char> : public detail::PromoteType<unsigned long, signed char> 00874 { 00875 typedef detail::PromoteType<unsigned long, signed char>::Promote Promote; 00876 using detail::PromoteType<unsigned long, signed char>::toPromote; 00877 }; 00878 00879 template <> 00880 struct PromoteTraits<unsigned long, unsigned char> : public detail::PromoteType<unsigned long, unsigned char> 00881 { 00882 typedef detail::PromoteType<unsigned long, unsigned char>::Promote Promote; 00883 using detail::PromoteType<unsigned long, unsigned char>::toPromote; 00884 }; 00885 00886 template <> 00887 struct PromoteTraits<unsigned long, short> : public detail::PromoteType<unsigned long, short> 00888 { 00889 typedef detail::PromoteType<unsigned long, short>::Promote Promote; 00890 using detail::PromoteType<unsigned long, short>::toPromote; 00891 }; 00892 00893 template <> 00894 struct PromoteTraits<unsigned long, unsigned short> : public detail::PromoteType<unsigned long, unsigned short> 00895 { 00896 typedef detail::PromoteType<unsigned long, unsigned short>::Promote Promote; 00897 using detail::PromoteType<unsigned long, unsigned short>::toPromote; 00898 }; 00899 00900 template <> 00901 struct PromoteTraits<unsigned long, int> : public detail::PromoteType<unsigned long, int> 00902 { 00903 typedef detail::PromoteType<unsigned long, int>::Promote Promote; 00904 using detail::PromoteType<unsigned long, int>::toPromote; 00905 }; 00906 00907 template <> 00908 struct PromoteTraits<unsigned long, unsigned int> : public detail::PromoteType<unsigned long, unsigned int> 00909 { 00910 typedef detail::PromoteType<unsigned long, unsigned int>::Promote Promote; 00911 using detail::PromoteType<unsigned long, unsigned int>::toPromote; 00912 }; 00913 00914 template <> 00915 struct PromoteTraits<unsigned long, long> : public detail::PromoteType<unsigned long, long> 00916 { 00917 typedef detail::PromoteType<unsigned long, long>::Promote Promote; 00918 using detail::PromoteType<unsigned long, long>::toPromote; 00919 }; 00920 00921 template <> 00922 struct PromoteTraits<unsigned long, float> : public detail::PromoteType<unsigned long, float> 00923 { 00924 typedef detail::PromoteType<unsigned long, float>::Promote Promote; 00925 using detail::PromoteType<unsigned long, float>::toPromote; 00926 }; 00927 00928 template <> 00929 struct PromoteTraits<unsigned long, double> : public detail::PromoteType<unsigned long, double> 00930 { 00931 typedef detail::PromoteType<unsigned long, double>::Promote Promote; 00932 using detail::PromoteType<unsigned long, double>::toPromote; 00933 }; 00934 00935 template <> 00936 struct PromoteTraits<unsigned long, long double> : public detail::PromoteType<unsigned long, long double> 00937 { 00938 typedef detail::PromoteType<unsigned long, long double>::Promote Promote; 00939 using detail::PromoteType<unsigned long, long double>::toPromote; 00940 }; 00941 00942 #ifdef LLONG_MAX 00943 template <> 00944 struct PromoteTraits<unsigned long, long long> : public detail::PromoteType<unsigned long, long long> 00945 { 00946 typedef detail::PromoteType<unsigned long, long long>::Promote Promote; 00947 using detail::PromoteType<unsigned long, long long>::toPromote; 00948 }; 00949 #endif // LLONG_MAX 00950 00951 #ifdef LLONG_MAX 00952 template <> 00953 struct PromoteTraits<unsigned long, unsigned long long> : public detail::PromoteType<unsigned long, unsigned long long> 00954 { 00955 typedef detail::PromoteType<unsigned long, unsigned long long>::Promote Promote; 00956 using detail::PromoteType<unsigned long, unsigned long long>::toPromote; 00957 }; 00958 #endif // LLONG_MAX 00959 00960 template <> 00961 struct PromoteTraits<float, float> : public detail::PromoteType<float, float> 00962 { 00963 typedef detail::PromoteType<float, float>::Promote Promote; 00964 using detail::PromoteType<float, float>::toPromote; 00965 }; 00966 00967 template <> 00968 struct PromoteTraits<float, bool> : public detail::PromoteType<float, bool> 00969 { 00970 typedef detail::PromoteType<float, bool>::Promote Promote; 00971 using detail::PromoteType<float, bool>::toPromote; 00972 }; 00973 00974 template <> 00975 struct PromoteTraits<float, signed char> : public detail::PromoteType<float, signed char> 00976 { 00977 typedef detail::PromoteType<float, signed char>::Promote Promote; 00978 using detail::PromoteType<float, signed char>::toPromote; 00979 }; 00980 00981 template <> 00982 struct PromoteTraits<float, unsigned char> : public detail::PromoteType<float, unsigned char> 00983 { 00984 typedef detail::PromoteType<float, unsigned char>::Promote Promote; 00985 using detail::PromoteType<float, unsigned char>::toPromote; 00986 }; 00987 00988 template <> 00989 struct PromoteTraits<float, short> : public detail::PromoteType<float, short> 00990 { 00991 typedef detail::PromoteType<float, short>::Promote Promote; 00992 using detail::PromoteType<float, short>::toPromote; 00993 }; 00994 00995 template <> 00996 struct PromoteTraits<float, unsigned short> : public detail::PromoteType<float, unsigned short> 00997 { 00998 typedef detail::PromoteType<float, unsigned short>::Promote Promote; 00999 using detail::PromoteType<float, unsigned short>::toPromote; 01000 }; 01001 01002 template <> 01003 struct PromoteTraits<float, int> : public detail::PromoteType<float, int> 01004 { 01005 typedef detail::PromoteType<float, int>::Promote Promote; 01006 using detail::PromoteType<float, int>::toPromote; 01007 }; 01008 01009 template <> 01010 struct PromoteTraits<float, unsigned int> : public detail::PromoteType<float, unsigned int> 01011 { 01012 typedef detail::PromoteType<float, unsigned int>::Promote Promote; 01013 using detail::PromoteType<float, unsigned int>::toPromote; 01014 }; 01015 01016 template <> 01017 struct PromoteTraits<float, long> : public detail::PromoteType<float, long> 01018 { 01019 typedef detail::PromoteType<float, long>::Promote Promote; 01020 using detail::PromoteType<float, long>::toPromote; 01021 }; 01022 01023 template <> 01024 struct PromoteTraits<float, unsigned long> : public detail::PromoteType<float, unsigned long> 01025 { 01026 typedef detail::PromoteType<float, unsigned long>::Promote Promote; 01027 using detail::PromoteType<float, unsigned long>::toPromote; 01028 }; 01029 01030 template <> 01031 struct PromoteTraits<float, double> : public detail::PromoteType<float, double> 01032 { 01033 typedef detail::PromoteType<float, double>::Promote Promote; 01034 using detail::PromoteType<float, double>::toPromote; 01035 }; 01036 01037 template <> 01038 struct PromoteTraits<float, long double> : public detail::PromoteType<float, long double> 01039 { 01040 typedef detail::PromoteType<float, long double>::Promote Promote; 01041 using detail::PromoteType<float, long double>::toPromote; 01042 }; 01043 01044 #ifdef LLONG_MAX 01045 template <> 01046 struct PromoteTraits<float, long long> : public detail::PromoteType<float, long long> 01047 { 01048 typedef detail::PromoteType<float, long long>::Promote Promote; 01049 using detail::PromoteType<float, long long>::toPromote; 01050 }; 01051 #endif // LLONG_MAX 01052 01053 #ifdef LLONG_MAX 01054 template <> 01055 struct PromoteTraits<float, unsigned long long> : public detail::PromoteType<float, unsigned long long> 01056 { 01057 typedef detail::PromoteType<float, unsigned long long>::Promote Promote; 01058 using detail::PromoteType<float, unsigned long long>::toPromote; 01059 }; 01060 #endif // LLONG_MAX 01061 01062 template <> 01063 struct PromoteTraits<double, double> : public detail::PromoteType<double, double> 01064 { 01065 typedef detail::PromoteType<double, double>::Promote Promote; 01066 using detail::PromoteType<double, double>::toPromote; 01067 }; 01068 01069 template <> 01070 struct PromoteTraits<double, bool> : public detail::PromoteType<double, bool> 01071 { 01072 typedef detail::PromoteType<double, bool>::Promote Promote; 01073 using detail::PromoteType<double, bool>::toPromote; 01074 }; 01075 01076 template <> 01077 struct PromoteTraits<double, signed char> : public detail::PromoteType<double, signed char> 01078 { 01079 typedef detail::PromoteType<double, signed char>::Promote Promote; 01080 using detail::PromoteType<double, signed char>::toPromote; 01081 }; 01082 01083 template <> 01084 struct PromoteTraits<double, unsigned char> : public detail::PromoteType<double, unsigned char> 01085 { 01086 typedef detail::PromoteType<double, unsigned char>::Promote Promote; 01087 using detail::PromoteType<double, unsigned char>::toPromote; 01088 }; 01089 01090 template <> 01091 struct PromoteTraits<double, short> : public detail::PromoteType<double, short> 01092 { 01093 typedef detail::PromoteType<double, short>::Promote Promote; 01094 using detail::PromoteType<double, short>::toPromote; 01095 }; 01096 01097 template <> 01098 struct PromoteTraits<double, unsigned short> : public detail::PromoteType<double, unsigned short> 01099 { 01100 typedef detail::PromoteType<double, unsigned short>::Promote Promote; 01101 using detail::PromoteType<double, unsigned short>::toPromote; 01102 }; 01103 01104 template <> 01105 struct PromoteTraits<double, int> : public detail::PromoteType<double, int> 01106 { 01107 typedef detail::PromoteType<double, int>::Promote Promote; 01108 using detail::PromoteType<double, int>::toPromote; 01109 }; 01110 01111 template <> 01112 struct PromoteTraits<double, unsigned int> : public detail::PromoteType<double, unsigned int> 01113 { 01114 typedef detail::PromoteType<double, unsigned int>::Promote Promote; 01115 using detail::PromoteType<double, unsigned int>::toPromote; 01116 }; 01117 01118 template <> 01119 struct PromoteTraits<double, long> : public detail::PromoteType<double, long> 01120 { 01121 typedef detail::PromoteType<double, long>::Promote Promote; 01122 using detail::PromoteType<double, long>::toPromote; 01123 }; 01124 01125 template <> 01126 struct PromoteTraits<double, unsigned long> : public detail::PromoteType<double, unsigned long> 01127 { 01128 typedef detail::PromoteType<double, unsigned long>::Promote Promote; 01129 using detail::PromoteType<double, unsigned long>::toPromote; 01130 }; 01131 01132 template <> 01133 struct PromoteTraits<double, float> : public detail::PromoteType<double, float> 01134 { 01135 typedef detail::PromoteType<double, float>::Promote Promote; 01136 using detail::PromoteType<double, float>::toPromote; 01137 }; 01138 01139 template <> 01140 struct PromoteTraits<double, long double> : public detail::PromoteType<double, long double> 01141 { 01142 typedef detail::PromoteType<double, long double>::Promote Promote; 01143 using detail::PromoteType<double, long double>::toPromote; 01144 }; 01145 01146 #ifdef LLONG_MAX 01147 template <> 01148 struct PromoteTraits<double, long long> : public detail::PromoteType<double, long long> 01149 { 01150 typedef detail::PromoteType<double, long long>::Promote Promote; 01151 using detail::PromoteType<double, long long>::toPromote; 01152 }; 01153 #endif // LLONG_MAX 01154 01155 #ifdef LLONG_MAX 01156 template <> 01157 struct PromoteTraits<double, unsigned long long> : public detail::PromoteType<double, unsigned long long> 01158 { 01159 typedef detail::PromoteType<double, unsigned long long>::Promote Promote; 01160 using detail::PromoteType<double, unsigned long long>::toPromote; 01161 }; 01162 #endif // LLONG_MAX 01163 01164 template <> 01165 struct PromoteTraits<long double, long double> : public detail::PromoteType<long double, long double> 01166 { 01167 typedef detail::PromoteType<long double, long double>::Promote Promote; 01168 using detail::PromoteType<long double, long double>::toPromote; 01169 }; 01170 01171 template <> 01172 struct PromoteTraits<long double, bool> : public detail::PromoteType<long double, bool> 01173 { 01174 typedef detail::PromoteType<long double, bool>::Promote Promote; 01175 using detail::PromoteType<long double, bool>::toPromote; 01176 }; 01177 01178 template <> 01179 struct PromoteTraits<long double, signed char> : public detail::PromoteType<long double, signed char> 01180 { 01181 typedef detail::PromoteType<long double, signed char>::Promote Promote; 01182 using detail::PromoteType<long double, signed char>::toPromote; 01183 }; 01184 01185 template <> 01186 struct PromoteTraits<long double, unsigned char> : public detail::PromoteType<long double, unsigned char> 01187 { 01188 typedef detail::PromoteType<long double, unsigned char>::Promote Promote; 01189 using detail::PromoteType<long double, unsigned char>::toPromote; 01190 }; 01191 01192 template <> 01193 struct PromoteTraits<long double, short> : public detail::PromoteType<long double, short> 01194 { 01195 typedef detail::PromoteType<long double, short>::Promote Promote; 01196 using detail::PromoteType<long double, short>::toPromote; 01197 }; 01198 01199 template <> 01200 struct PromoteTraits<long double, unsigned short> : public detail::PromoteType<long double, unsigned short> 01201 { 01202 typedef detail::PromoteType<long double, unsigned short>::Promote Promote; 01203 using detail::PromoteType<long double, unsigned short>::toPromote; 01204 }; 01205 01206 template <> 01207 struct PromoteTraits<long double, int> : public detail::PromoteType<long double, int> 01208 { 01209 typedef detail::PromoteType<long double, int>::Promote Promote; 01210 using detail::PromoteType<long double, int>::toPromote; 01211 }; 01212 01213 template <> 01214 struct PromoteTraits<long double, unsigned int> : public detail::PromoteType<long double, unsigned int> 01215 { 01216 typedef detail::PromoteType<long double, unsigned int>::Promote Promote; 01217 using detail::PromoteType<long double, unsigned int>::toPromote; 01218 }; 01219 01220 template <> 01221 struct PromoteTraits<long double, long> : public detail::PromoteType<long double, long> 01222 { 01223 typedef detail::PromoteType<long double, long>::Promote Promote; 01224 using detail::PromoteType<long double, long>::toPromote; 01225 }; 01226 01227 template <> 01228 struct PromoteTraits<long double, unsigned long> : public detail::PromoteType<long double, unsigned long> 01229 { 01230 typedef detail::PromoteType<long double, unsigned long>::Promote Promote; 01231 using detail::PromoteType<long double, unsigned long>::toPromote; 01232 }; 01233 01234 template <> 01235 struct PromoteTraits<long double, float> : public detail::PromoteType<long double, float> 01236 { 01237 typedef detail::PromoteType<long double, float>::Promote Promote; 01238 using detail::PromoteType<long double, float>::toPromote; 01239 }; 01240 01241 template <> 01242 struct PromoteTraits<long double, double> : public detail::PromoteType<long double, double> 01243 { 01244 typedef detail::PromoteType<long double, double>::Promote Promote; 01245 using detail::PromoteType<long double, double>::toPromote; 01246 }; 01247 01248 #ifdef LLONG_MAX 01249 template <> 01250 struct PromoteTraits<long double, long long> : public detail::PromoteType<long double, long long> 01251 { 01252 typedef detail::PromoteType<long double, long long>::Promote Promote; 01253 using detail::PromoteType<long double, long long>::toPromote; 01254 }; 01255 #endif // LLONG_MAX 01256 01257 #ifdef LLONG_MAX 01258 template <> 01259 struct PromoteTraits<long double, unsigned long long> : public detail::PromoteType<long double, unsigned long long> 01260 { 01261 typedef detail::PromoteType<long double, unsigned long long>::Promote Promote; 01262 using detail::PromoteType<long double, unsigned long long>::toPromote; 01263 }; 01264 #endif // LLONG_MAX 01265 01266 #ifdef LLONG_MAX 01267 template <> 01268 struct PromoteTraits<long long, long long> : public detail::PromoteType<long long, long long> 01269 { 01270 typedef detail::PromoteType<long long, long long>::Promote Promote; 01271 using detail::PromoteType<long long, long long>::toPromote; 01272 }; 01273 #endif // LLONG_MAX 01274 01275 #ifdef LLONG_MAX 01276 template <> 01277 struct PromoteTraits<long long, bool> : public detail::PromoteType<long long, bool> 01278 { 01279 typedef detail::PromoteType<long long, bool>::Promote Promote; 01280 using detail::PromoteType<long long, bool>::toPromote; 01281 }; 01282 #endif // LLONG_MAX 01283 01284 #ifdef LLONG_MAX 01285 template <> 01286 struct PromoteTraits<long long, signed char> : public detail::PromoteType<long long, signed char> 01287 { 01288 typedef detail::PromoteType<long long, signed char>::Promote Promote; 01289 using detail::PromoteType<long long, signed char>::toPromote; 01290 }; 01291 #endif // LLONG_MAX 01292 01293 #ifdef LLONG_MAX 01294 template <> 01295 struct PromoteTraits<long long, unsigned char> : public detail::PromoteType<long long, unsigned char> 01296 { 01297 typedef detail::PromoteType<long long, unsigned char>::Promote Promote; 01298 using detail::PromoteType<long long, unsigned char>::toPromote; 01299 }; 01300 #endif // LLONG_MAX 01301 01302 #ifdef LLONG_MAX 01303 template <> 01304 struct PromoteTraits<long long, short> : public detail::PromoteType<long long, short> 01305 { 01306 typedef detail::PromoteType<long long, short>::Promote Promote; 01307 using detail::PromoteType<long long, short>::toPromote; 01308 }; 01309 #endif // LLONG_MAX 01310 01311 #ifdef LLONG_MAX 01312 template <> 01313 struct PromoteTraits<long long, unsigned short> : public detail::PromoteType<long long, unsigned short> 01314 { 01315 typedef detail::PromoteType<long long, unsigned short>::Promote Promote; 01316 using detail::PromoteType<long long, unsigned short>::toPromote; 01317 }; 01318 #endif // LLONG_MAX 01319 01320 #ifdef LLONG_MAX 01321 template <> 01322 struct PromoteTraits<long long, int> : public detail::PromoteType<long long, int> 01323 { 01324 typedef detail::PromoteType<long long, int>::Promote Promote; 01325 using detail::PromoteType<long long, int>::toPromote; 01326 }; 01327 #endif // LLONG_MAX 01328 01329 #ifdef LLONG_MAX 01330 template <> 01331 struct PromoteTraits<long long, unsigned int> : public detail::PromoteType<long long, unsigned int> 01332 { 01333 typedef detail::PromoteType<long long, unsigned int>::Promote Promote; 01334 using detail::PromoteType<long long, unsigned int>::toPromote; 01335 }; 01336 #endif // LLONG_MAX 01337 01338 #ifdef LLONG_MAX 01339 template <> 01340 struct PromoteTraits<long long, long> : public detail::PromoteType<long long, long> 01341 { 01342 typedef detail::PromoteType<long long, long>::Promote Promote; 01343 using detail::PromoteType<long long, long>::toPromote; 01344 }; 01345 #endif // LLONG_MAX 01346 01347 #ifdef LLONG_MAX 01348 template <> 01349 struct PromoteTraits<long long, unsigned long> : public detail::PromoteType<long long, unsigned long> 01350 { 01351 typedef detail::PromoteType<long long, unsigned long>::Promote Promote; 01352 using detail::PromoteType<long long, unsigned long>::toPromote; 01353 }; 01354 #endif // LLONG_MAX 01355 01356 #ifdef LLONG_MAX 01357 template <> 01358 struct PromoteTraits<long long, float> : public detail::PromoteType<long long, float> 01359 { 01360 typedef detail::PromoteType<long long, float>::Promote Promote; 01361 using detail::PromoteType<long long, float>::toPromote; 01362 }; 01363 #endif // LLONG_MAX 01364 01365 #ifdef LLONG_MAX 01366 template <> 01367 struct PromoteTraits<long long, double> : public detail::PromoteType<long long, double> 01368 { 01369 typedef detail::PromoteType<long long, double>::Promote Promote; 01370 using detail::PromoteType<long long, double>::toPromote; 01371 }; 01372 #endif // LLONG_MAX 01373 01374 #ifdef LLONG_MAX 01375 template <> 01376 struct PromoteTraits<long long, long double> : public detail::PromoteType<long long, long double> 01377 { 01378 typedef detail::PromoteType<long long, long double>::Promote Promote; 01379 using detail::PromoteType<long long, long double>::toPromote; 01380 }; 01381 #endif // LLONG_MAX 01382 01383 #ifdef LLONG_MAX 01384 template <> 01385 struct PromoteTraits<long long, unsigned long long> : public detail::PromoteType<long long, unsigned long long> 01386 { 01387 typedef detail::PromoteType<long long, unsigned long long>::Promote Promote; 01388 using detail::PromoteType<long long, unsigned long long>::toPromote; 01389 }; 01390 #endif // LLONG_MAX 01391 01392 #ifdef LLONG_MAX 01393 template <> 01394 struct PromoteTraits<unsigned long long, unsigned long long> : public detail::PromoteType<unsigned long long, unsigned long long> 01395 { 01396 typedef detail::PromoteType<unsigned long long, unsigned long long>::Promote Promote; 01397 using detail::PromoteType<unsigned long long, unsigned long long>::toPromote; 01398 }; 01399 #endif // LLONG_MAX 01400 01401 #ifdef LLONG_MAX 01402 template <> 01403 struct PromoteTraits<unsigned long long, bool> : public detail::PromoteType<unsigned long long, bool> 01404 { 01405 typedef detail::PromoteType<unsigned long long, bool>::Promote Promote; 01406 using detail::PromoteType<unsigned long long, bool>::toPromote; 01407 }; 01408 #endif // LLONG_MAX 01409 01410 #ifdef LLONG_MAX 01411 template <> 01412 struct PromoteTraits<unsigned long long, signed char> : public detail::PromoteType<unsigned long long, signed char> 01413 { 01414 typedef detail::PromoteType<unsigned long long, signed char>::Promote Promote; 01415 using detail::PromoteType<unsigned long long, signed char>::toPromote; 01416 }; 01417 #endif // LLONG_MAX 01418 01419 #ifdef LLONG_MAX 01420 template <> 01421 struct PromoteTraits<unsigned long long, unsigned char> : public detail::PromoteType<unsigned long long, unsigned char> 01422 { 01423 typedef detail::PromoteType<unsigned long long, unsigned char>::Promote Promote; 01424 using detail::PromoteType<unsigned long long, unsigned char>::toPromote; 01425 }; 01426 #endif // LLONG_MAX 01427 01428 #ifdef LLONG_MAX 01429 template <> 01430 struct PromoteTraits<unsigned long long, short> : public detail::PromoteType<unsigned long long, short> 01431 { 01432 typedef detail::PromoteType<unsigned long long, short>::Promote Promote; 01433 using detail::PromoteType<unsigned long long, short>::toPromote; 01434 }; 01435 #endif // LLONG_MAX 01436 01437 #ifdef LLONG_MAX 01438 template <> 01439 struct PromoteTraits<unsigned long long, unsigned short> : public detail::PromoteType<unsigned long long, unsigned short> 01440 { 01441 typedef detail::PromoteType<unsigned long long, unsigned short>::Promote Promote; 01442 using detail::PromoteType<unsigned long long, unsigned short>::toPromote; 01443 }; 01444 #endif // LLONG_MAX 01445 01446 #ifdef LLONG_MAX 01447 template <> 01448 struct PromoteTraits<unsigned long long, int> : public detail::PromoteType<unsigned long long, int> 01449 { 01450 typedef detail::PromoteType<unsigned long long, int>::Promote Promote; 01451 using detail::PromoteType<unsigned long long, int>::toPromote; 01452 }; 01453 #endif // LLONG_MAX 01454 01455 #ifdef LLONG_MAX 01456 template <> 01457 struct PromoteTraits<unsigned long long, unsigned int> : public detail::PromoteType<unsigned long long, unsigned int> 01458 { 01459 typedef detail::PromoteType<unsigned long long, unsigned int>::Promote Promote; 01460 using detail::PromoteType<unsigned long long, unsigned int>::toPromote; 01461 }; 01462 #endif // LLONG_MAX 01463 01464 #ifdef LLONG_MAX 01465 template <> 01466 struct PromoteTraits<unsigned long long, long> : public detail::PromoteType<unsigned long long, long> 01467 { 01468 typedef detail::PromoteType<unsigned long long, long>::Promote Promote; 01469 using detail::PromoteType<unsigned long long, long>::toPromote; 01470 }; 01471 #endif // LLONG_MAX 01472 01473 #ifdef LLONG_MAX 01474 template <> 01475 struct PromoteTraits<unsigned long long, unsigned long> : public detail::PromoteType<unsigned long long, unsigned long> 01476 { 01477 typedef detail::PromoteType<unsigned long long, unsigned long>::Promote Promote; 01478 using detail::PromoteType<unsigned long long, unsigned long>::toPromote; 01479 }; 01480 #endif // LLONG_MAX 01481 01482 #ifdef LLONG_MAX 01483 template <> 01484 struct PromoteTraits<unsigned long long, float> : public detail::PromoteType<unsigned long long, float> 01485 { 01486 typedef detail::PromoteType<unsigned long long, float>::Promote Promote; 01487 using detail::PromoteType<unsigned long long, float>::toPromote; 01488 }; 01489 #endif // LLONG_MAX 01490 01491 #ifdef LLONG_MAX 01492 template <> 01493 struct PromoteTraits<unsigned long long, double> : public detail::PromoteType<unsigned long long, double> 01494 { 01495 typedef detail::PromoteType<unsigned long long, double>::Promote Promote; 01496 using detail::PromoteType<unsigned long long, double>::toPromote; 01497 }; 01498 #endif // LLONG_MAX 01499 01500 #ifdef LLONG_MAX 01501 template <> 01502 struct PromoteTraits<unsigned long long, long double> : public detail::PromoteType<unsigned long long, long double> 01503 { 01504 typedef detail::PromoteType<unsigned long long, long double>::Promote Promote; 01505 using detail::PromoteType<unsigned long long, long double>::toPromote; 01506 }; 01507 #endif // LLONG_MAX 01508 01509 #ifdef LLONG_MAX 01510 template <> 01511 struct PromoteTraits<unsigned long long, long long> : public detail::PromoteType<unsigned long long, long long> 01512 { 01513 typedef detail::PromoteType<unsigned long long, long long>::Promote Promote; 01514 using detail::PromoteType<unsigned long long, long long>::toPromote; 01515 }; 01516 #endif // LLONG_MAX 01517 01518 01519 01520 #endif // VIGRA_PROMOTETRAITS_HXX
© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) |
html generated using doxygen and Python
|