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