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

© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de)
Heidelberg Collaboratory for Image Processing, University of Heidelberg, Germany

html generated using doxygen and Python
VIGRA 1.6.0 (5 Nov 2009)