numeric_cast_traits_common.hpp 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741
  1. //
  2. //! Copyright (c) 2011-2012
  3. //! Brandon Kohn
  4. //
  5. // Distributed under the Boost Software License, Version 1.0. (See
  6. // accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. //
  9. namespace boost { namespace numeric {
  10. template <>
  11. struct numeric_cast_traits
  12. <
  13. char
  14. , char
  15. >
  16. {
  17. typedef def_overflow_handler overflow_policy;
  18. typedef UseInternalRangeChecker range_checking_policy;
  19. typedef Trunc<char> rounding_policy;
  20. };
  21. template <>
  22. struct numeric_cast_traits
  23. <
  24. char
  25. , signed char
  26. >
  27. {
  28. typedef def_overflow_handler overflow_policy;
  29. typedef UseInternalRangeChecker range_checking_policy;
  30. typedef Trunc<signed char> rounding_policy;
  31. };
  32. template <>
  33. struct numeric_cast_traits
  34. <
  35. char
  36. , unsigned char
  37. >
  38. {
  39. typedef def_overflow_handler overflow_policy;
  40. typedef UseInternalRangeChecker range_checking_policy;
  41. typedef Trunc<unsigned char> rounding_policy;
  42. };
  43. template <>
  44. struct numeric_cast_traits
  45. <
  46. char
  47. , short
  48. >
  49. {
  50. typedef def_overflow_handler overflow_policy;
  51. typedef UseInternalRangeChecker range_checking_policy;
  52. typedef Trunc<short> rounding_policy;
  53. };
  54. template <>
  55. struct numeric_cast_traits
  56. <
  57. char
  58. , unsigned short
  59. >
  60. {
  61. typedef def_overflow_handler overflow_policy;
  62. typedef UseInternalRangeChecker range_checking_policy;
  63. typedef Trunc<unsigned short> rounding_policy;
  64. };
  65. template <>
  66. struct numeric_cast_traits
  67. <
  68. char
  69. , int
  70. >
  71. {
  72. typedef def_overflow_handler overflow_policy;
  73. typedef UseInternalRangeChecker range_checking_policy;
  74. typedef Trunc<int> rounding_policy;
  75. };
  76. template <>
  77. struct numeric_cast_traits
  78. <
  79. char
  80. , unsigned int
  81. >
  82. {
  83. typedef def_overflow_handler overflow_policy;
  84. typedef UseInternalRangeChecker range_checking_policy;
  85. typedef Trunc<unsigned int> rounding_policy;
  86. };
  87. template <>
  88. struct numeric_cast_traits
  89. <
  90. char
  91. , long
  92. >
  93. {
  94. typedef def_overflow_handler overflow_policy;
  95. typedef UseInternalRangeChecker range_checking_policy;
  96. typedef Trunc<long> rounding_policy;
  97. };
  98. template <>
  99. struct numeric_cast_traits
  100. <
  101. char
  102. , unsigned long
  103. >
  104. {
  105. typedef def_overflow_handler overflow_policy;
  106. typedef UseInternalRangeChecker range_checking_policy;
  107. typedef Trunc<unsigned long> rounding_policy;
  108. };
  109. template <>
  110. struct numeric_cast_traits
  111. <
  112. char
  113. , float
  114. >
  115. {
  116. typedef def_overflow_handler overflow_policy;
  117. typedef UseInternalRangeChecker range_checking_policy;
  118. typedef Trunc<float> rounding_policy;
  119. };
  120. template <>
  121. struct numeric_cast_traits
  122. <
  123. char
  124. , double
  125. >
  126. {
  127. typedef def_overflow_handler overflow_policy;
  128. typedef UseInternalRangeChecker range_checking_policy;
  129. typedef Trunc<double> rounding_policy;
  130. };
  131. template <>
  132. struct numeric_cast_traits
  133. <
  134. char
  135. , long double
  136. >
  137. {
  138. typedef def_overflow_handler overflow_policy;
  139. typedef UseInternalRangeChecker range_checking_policy;
  140. typedef Trunc<long double> rounding_policy;
  141. };
  142. template <>
  143. struct numeric_cast_traits
  144. <
  145. signed char
  146. , char
  147. >
  148. {
  149. typedef def_overflow_handler overflow_policy;
  150. typedef UseInternalRangeChecker range_checking_policy;
  151. typedef Trunc<char> rounding_policy;
  152. };
  153. template <>
  154. struct numeric_cast_traits
  155. <
  156. signed char
  157. , signed char
  158. >
  159. {
  160. typedef def_overflow_handler overflow_policy;
  161. typedef UseInternalRangeChecker range_checking_policy;
  162. typedef Trunc<signed char> rounding_policy;
  163. };
  164. template <>
  165. struct numeric_cast_traits
  166. <
  167. signed char
  168. , unsigned char
  169. >
  170. {
  171. typedef def_overflow_handler overflow_policy;
  172. typedef UseInternalRangeChecker range_checking_policy;
  173. typedef Trunc<unsigned char> rounding_policy;
  174. };
  175. template <>
  176. struct numeric_cast_traits
  177. <
  178. signed char
  179. , short
  180. >
  181. {
  182. typedef def_overflow_handler overflow_policy;
  183. typedef UseInternalRangeChecker range_checking_policy;
  184. typedef Trunc<short> rounding_policy;
  185. };
  186. template <>
  187. struct numeric_cast_traits
  188. <
  189. signed char
  190. , unsigned short
  191. >
  192. {
  193. typedef def_overflow_handler overflow_policy;
  194. typedef UseInternalRangeChecker range_checking_policy;
  195. typedef Trunc<unsigned short> rounding_policy;
  196. };
  197. template <>
  198. struct numeric_cast_traits
  199. <
  200. signed char
  201. , int
  202. >
  203. {
  204. typedef def_overflow_handler overflow_policy;
  205. typedef UseInternalRangeChecker range_checking_policy;
  206. typedef Trunc<int> rounding_policy;
  207. };
  208. template <>
  209. struct numeric_cast_traits
  210. <
  211. signed char
  212. , unsigned int
  213. >
  214. {
  215. typedef def_overflow_handler overflow_policy;
  216. typedef UseInternalRangeChecker range_checking_policy;
  217. typedef Trunc<unsigned int> rounding_policy;
  218. };
  219. template <>
  220. struct numeric_cast_traits
  221. <
  222. signed char
  223. , long
  224. >
  225. {
  226. typedef def_overflow_handler overflow_policy;
  227. typedef UseInternalRangeChecker range_checking_policy;
  228. typedef Trunc<long> rounding_policy;
  229. };
  230. template <>
  231. struct numeric_cast_traits
  232. <
  233. signed char
  234. , unsigned long
  235. >
  236. {
  237. typedef def_overflow_handler overflow_policy;
  238. typedef UseInternalRangeChecker range_checking_policy;
  239. typedef Trunc<unsigned long> rounding_policy;
  240. };
  241. template <>
  242. struct numeric_cast_traits
  243. <
  244. signed char
  245. , float
  246. >
  247. {
  248. typedef def_overflow_handler overflow_policy;
  249. typedef UseInternalRangeChecker range_checking_policy;
  250. typedef Trunc<float> rounding_policy;
  251. };
  252. template <>
  253. struct numeric_cast_traits
  254. <
  255. signed char
  256. , double
  257. >
  258. {
  259. typedef def_overflow_handler overflow_policy;
  260. typedef UseInternalRangeChecker range_checking_policy;
  261. typedef Trunc<double> rounding_policy;
  262. };
  263. template <>
  264. struct numeric_cast_traits
  265. <
  266. signed char
  267. , long double
  268. >
  269. {
  270. typedef def_overflow_handler overflow_policy;
  271. typedef UseInternalRangeChecker range_checking_policy;
  272. typedef Trunc<long double> rounding_policy;
  273. };
  274. template <>
  275. struct numeric_cast_traits
  276. <
  277. unsigned char
  278. , char
  279. >
  280. {
  281. typedef def_overflow_handler overflow_policy;
  282. typedef UseInternalRangeChecker range_checking_policy;
  283. typedef Trunc<char> rounding_policy;
  284. };
  285. template <>
  286. struct numeric_cast_traits
  287. <
  288. unsigned char
  289. , signed char
  290. >
  291. {
  292. typedef def_overflow_handler overflow_policy;
  293. typedef UseInternalRangeChecker range_checking_policy;
  294. typedef Trunc<signed char> rounding_policy;
  295. };
  296. template <>
  297. struct numeric_cast_traits
  298. <
  299. unsigned char
  300. , unsigned char
  301. >
  302. {
  303. typedef def_overflow_handler overflow_policy;
  304. typedef UseInternalRangeChecker range_checking_policy;
  305. typedef Trunc<unsigned char> rounding_policy;
  306. };
  307. template <>
  308. struct numeric_cast_traits
  309. <
  310. unsigned char
  311. , short
  312. >
  313. {
  314. typedef def_overflow_handler overflow_policy;
  315. typedef UseInternalRangeChecker range_checking_policy;
  316. typedef Trunc<short> rounding_policy;
  317. };
  318. template <>
  319. struct numeric_cast_traits
  320. <
  321. unsigned char
  322. , unsigned short
  323. >
  324. {
  325. typedef def_overflow_handler overflow_policy;
  326. typedef UseInternalRangeChecker range_checking_policy;
  327. typedef Trunc<unsigned short> rounding_policy;
  328. };
  329. template <>
  330. struct numeric_cast_traits
  331. <
  332. unsigned char
  333. , int
  334. >
  335. {
  336. typedef def_overflow_handler overflow_policy;
  337. typedef UseInternalRangeChecker range_checking_policy;
  338. typedef Trunc<int> rounding_policy;
  339. };
  340. template <>
  341. struct numeric_cast_traits
  342. <
  343. unsigned char
  344. , unsigned int
  345. >
  346. {
  347. typedef def_overflow_handler overflow_policy;
  348. typedef UseInternalRangeChecker range_checking_policy;
  349. typedef Trunc<unsigned int> rounding_policy;
  350. };
  351. template <>
  352. struct numeric_cast_traits
  353. <
  354. unsigned char
  355. , long
  356. >
  357. {
  358. typedef def_overflow_handler overflow_policy;
  359. typedef UseInternalRangeChecker range_checking_policy;
  360. typedef Trunc<long> rounding_policy;
  361. };
  362. template <>
  363. struct numeric_cast_traits
  364. <
  365. unsigned char
  366. , unsigned long
  367. >
  368. {
  369. typedef def_overflow_handler overflow_policy;
  370. typedef UseInternalRangeChecker range_checking_policy;
  371. typedef Trunc<unsigned long> rounding_policy;
  372. };
  373. template <>
  374. struct numeric_cast_traits
  375. <
  376. unsigned char
  377. , float
  378. >
  379. {
  380. typedef def_overflow_handler overflow_policy;
  381. typedef UseInternalRangeChecker range_checking_policy;
  382. typedef Trunc<float> rounding_policy;
  383. };
  384. template <>
  385. struct numeric_cast_traits
  386. <
  387. unsigned char
  388. , double
  389. >
  390. {
  391. typedef def_overflow_handler overflow_policy;
  392. typedef UseInternalRangeChecker range_checking_policy;
  393. typedef Trunc<double> rounding_policy;
  394. };
  395. template <>
  396. struct numeric_cast_traits
  397. <
  398. unsigned char
  399. , long double
  400. >
  401. {
  402. typedef def_overflow_handler overflow_policy;
  403. typedef UseInternalRangeChecker range_checking_policy;
  404. typedef Trunc<long double> rounding_policy;
  405. };
  406. template <>
  407. struct numeric_cast_traits
  408. <
  409. short
  410. , char
  411. >
  412. {
  413. typedef def_overflow_handler overflow_policy;
  414. typedef UseInternalRangeChecker range_checking_policy;
  415. typedef Trunc<char> rounding_policy;
  416. };
  417. template <>
  418. struct numeric_cast_traits
  419. <
  420. short
  421. , signed char
  422. >
  423. {
  424. typedef def_overflow_handler overflow_policy;
  425. typedef UseInternalRangeChecker range_checking_policy;
  426. typedef Trunc<signed char> rounding_policy;
  427. };
  428. template <>
  429. struct numeric_cast_traits
  430. <
  431. short
  432. , unsigned char
  433. >
  434. {
  435. typedef def_overflow_handler overflow_policy;
  436. typedef UseInternalRangeChecker range_checking_policy;
  437. typedef Trunc<unsigned char> rounding_policy;
  438. };
  439. template <>
  440. struct numeric_cast_traits
  441. <
  442. short
  443. , short
  444. >
  445. {
  446. typedef def_overflow_handler overflow_policy;
  447. typedef UseInternalRangeChecker range_checking_policy;
  448. typedef Trunc<short> rounding_policy;
  449. };
  450. template <>
  451. struct numeric_cast_traits
  452. <
  453. short
  454. , unsigned short
  455. >
  456. {
  457. typedef def_overflow_handler overflow_policy;
  458. typedef UseInternalRangeChecker range_checking_policy;
  459. typedef Trunc<unsigned short> rounding_policy;
  460. };
  461. template <>
  462. struct numeric_cast_traits
  463. <
  464. short
  465. , int
  466. >
  467. {
  468. typedef def_overflow_handler overflow_policy;
  469. typedef UseInternalRangeChecker range_checking_policy;
  470. typedef Trunc<int> rounding_policy;
  471. };
  472. template <>
  473. struct numeric_cast_traits
  474. <
  475. short
  476. , unsigned int
  477. >
  478. {
  479. typedef def_overflow_handler overflow_policy;
  480. typedef UseInternalRangeChecker range_checking_policy;
  481. typedef Trunc<unsigned int> rounding_policy;
  482. };
  483. template <>
  484. struct numeric_cast_traits
  485. <
  486. short
  487. , long
  488. >
  489. {
  490. typedef def_overflow_handler overflow_policy;
  491. typedef UseInternalRangeChecker range_checking_policy;
  492. typedef Trunc<long> rounding_policy;
  493. };
  494. template <>
  495. struct numeric_cast_traits
  496. <
  497. short
  498. , unsigned long
  499. >
  500. {
  501. typedef def_overflow_handler overflow_policy;
  502. typedef UseInternalRangeChecker range_checking_policy;
  503. typedef Trunc<unsigned long> rounding_policy;
  504. };
  505. template <>
  506. struct numeric_cast_traits
  507. <
  508. short
  509. , float
  510. >
  511. {
  512. typedef def_overflow_handler overflow_policy;
  513. typedef UseInternalRangeChecker range_checking_policy;
  514. typedef Trunc<float> rounding_policy;
  515. };
  516. template <>
  517. struct numeric_cast_traits
  518. <
  519. short
  520. , double
  521. >
  522. {
  523. typedef def_overflow_handler overflow_policy;
  524. typedef UseInternalRangeChecker range_checking_policy;
  525. typedef Trunc<double> rounding_policy;
  526. };
  527. template <>
  528. struct numeric_cast_traits
  529. <
  530. short
  531. , long double
  532. >
  533. {
  534. typedef def_overflow_handler overflow_policy;
  535. typedef UseInternalRangeChecker range_checking_policy;
  536. typedef Trunc<long double> rounding_policy;
  537. };
  538. template <>
  539. struct numeric_cast_traits
  540. <
  541. unsigned short
  542. , char
  543. >
  544. {
  545. typedef def_overflow_handler overflow_policy;
  546. typedef UseInternalRangeChecker range_checking_policy;
  547. typedef Trunc<char> rounding_policy;
  548. };
  549. template <>
  550. struct numeric_cast_traits
  551. <
  552. unsigned short
  553. , signed char
  554. >
  555. {
  556. typedef def_overflow_handler overflow_policy;
  557. typedef UseInternalRangeChecker range_checking_policy;
  558. typedef Trunc<signed char> rounding_policy;
  559. };
  560. template <>
  561. struct numeric_cast_traits
  562. <
  563. unsigned short
  564. , unsigned char
  565. >
  566. {
  567. typedef def_overflow_handler overflow_policy;
  568. typedef UseInternalRangeChecker range_checking_policy;
  569. typedef Trunc<unsigned char> rounding_policy;
  570. };
  571. template <>
  572. struct numeric_cast_traits
  573. <
  574. unsigned short
  575. , short
  576. >
  577. {
  578. typedef def_overflow_handler overflow_policy;
  579. typedef UseInternalRangeChecker range_checking_policy;
  580. typedef Trunc<short> rounding_policy;
  581. };
  582. template <>
  583. struct numeric_cast_traits
  584. <
  585. unsigned short
  586. , unsigned short
  587. >
  588. {
  589. typedef def_overflow_handler overflow_policy;
  590. typedef UseInternalRangeChecker range_checking_policy;
  591. typedef Trunc<unsigned short> rounding_policy;
  592. };
  593. template <>
  594. struct numeric_cast_traits
  595. <
  596. unsigned short
  597. , int
  598. >
  599. {
  600. typedef def_overflow_handler overflow_policy;
  601. typedef UseInternalRangeChecker range_checking_policy;
  602. typedef Trunc<int> rounding_policy;
  603. };
  604. template <>
  605. struct numeric_cast_traits
  606. <
  607. unsigned short
  608. , unsigned int
  609. >
  610. {
  611. typedef def_overflow_handler overflow_policy;
  612. typedef UseInternalRangeChecker range_checking_policy;
  613. typedef Trunc<unsigned int> rounding_policy;
  614. };
  615. template <>
  616. struct numeric_cast_traits
  617. <
  618. unsigned short
  619. , long
  620. >
  621. {
  622. typedef def_overflow_handler overflow_policy;
  623. typedef UseInternalRangeChecker range_checking_policy;
  624. typedef Trunc<long> rounding_policy;
  625. };
  626. template <>
  627. struct numeric_cast_traits
  628. <
  629. unsigned short
  630. , unsigned long
  631. >
  632. {
  633. typedef def_overflow_handler overflow_policy;
  634. typedef UseInternalRangeChecker range_checking_policy;
  635. typedef Trunc<unsigned long> rounding_policy;
  636. };
  637. template <>
  638. struct numeric_cast_traits
  639. <
  640. unsigned short
  641. , float
  642. >
  643. {
  644. typedef def_overflow_handler overflow_policy;
  645. typedef UseInternalRangeChecker range_checking_policy;
  646. typedef Trunc<float> rounding_policy;
  647. };
  648. template <>
  649. struct numeric_cast_traits
  650. <
  651. unsigned short
  652. , double
  653. >
  654. {
  655. typedef def_overflow_handler overflow_policy;
  656. typedef UseInternalRangeChecker range_checking_policy;
  657. typedef Trunc<double> rounding_policy;
  658. };
  659. template <>
  660. struct numeric_cast_traits
  661. <
  662. unsigned short
  663. , long double
  664. >
  665. {
  666. typedef def_overflow_handler overflow_policy;
  667. typedef UseInternalRangeChecker range_checking_policy;
  668. typedef Trunc<long double> rounding_policy;
  669. };
  670. template <>
  671. struct numeric_cast_traits
  672. <
  673. int
  674. , char
  675. >
  676. {
  677. typedef def_overflow_handler overflow_policy;
  678. typedef UseInternalRangeChecker range_checking_policy;
  679. typedef Trunc<char> rounding_policy;
  680. };
  681. template <>
  682. struct numeric_cast_traits
  683. <
  684. int
  685. , signed char
  686. >
  687. {
  688. typedef def_overflow_handler overflow_policy;
  689. typedef UseInternalRangeChecker range_checking_policy;
  690. typedef Trunc<signed char> rounding_policy;
  691. };
  692. template <>
  693. struct numeric_cast_traits
  694. <
  695. int
  696. , unsigned char
  697. >
  698. {
  699. typedef def_overflow_handler overflow_policy;
  700. typedef UseInternalRangeChecker range_checking_policy;
  701. typedef Trunc<unsigned char> rounding_policy;
  702. };
  703. template <>
  704. struct numeric_cast_traits
  705. <
  706. int
  707. , short
  708. >
  709. {
  710. typedef def_overflow_handler overflow_policy;
  711. typedef UseInternalRangeChecker range_checking_policy;
  712. typedef Trunc<short> rounding_policy;
  713. };
  714. template <>
  715. struct numeric_cast_traits
  716. <
  717. int
  718. , unsigned short
  719. >
  720. {
  721. typedef def_overflow_handler overflow_policy;
  722. typedef UseInternalRangeChecker range_checking_policy;
  723. typedef Trunc<unsigned short> rounding_policy;
  724. };
  725. template <>
  726. struct numeric_cast_traits
  727. <
  728. int
  729. , int
  730. >
  731. {
  732. typedef def_overflow_handler overflow_policy;
  733. typedef UseInternalRangeChecker range_checking_policy;
  734. typedef Trunc<int> rounding_policy;
  735. };
  736. template <>
  737. struct numeric_cast_traits
  738. <
  739. int
  740. , unsigned int
  741. >
  742. {
  743. typedef def_overflow_handler overflow_policy;
  744. typedef UseInternalRangeChecker range_checking_policy;
  745. typedef Trunc<unsigned int> rounding_policy;
  746. };
  747. template <>
  748. struct numeric_cast_traits
  749. <
  750. int
  751. , long
  752. >
  753. {
  754. typedef def_overflow_handler overflow_policy;
  755. typedef UseInternalRangeChecker range_checking_policy;
  756. typedef Trunc<long> rounding_policy;
  757. };
  758. template <>
  759. struct numeric_cast_traits
  760. <
  761. int
  762. , unsigned long
  763. >
  764. {
  765. typedef def_overflow_handler overflow_policy;
  766. typedef UseInternalRangeChecker range_checking_policy;
  767. typedef Trunc<unsigned long> rounding_policy;
  768. };
  769. template <>
  770. struct numeric_cast_traits
  771. <
  772. int
  773. , float
  774. >
  775. {
  776. typedef def_overflow_handler overflow_policy;
  777. typedef UseInternalRangeChecker range_checking_policy;
  778. typedef Trunc<float> rounding_policy;
  779. };
  780. template <>
  781. struct numeric_cast_traits
  782. <
  783. int
  784. , double
  785. >
  786. {
  787. typedef def_overflow_handler overflow_policy;
  788. typedef UseInternalRangeChecker range_checking_policy;
  789. typedef Trunc<double> rounding_policy;
  790. };
  791. template <>
  792. struct numeric_cast_traits
  793. <
  794. int
  795. , long double
  796. >
  797. {
  798. typedef def_overflow_handler overflow_policy;
  799. typedef UseInternalRangeChecker range_checking_policy;
  800. typedef Trunc<long double> rounding_policy;
  801. };
  802. template <>
  803. struct numeric_cast_traits
  804. <
  805. unsigned int
  806. , char
  807. >
  808. {
  809. typedef def_overflow_handler overflow_policy;
  810. typedef UseInternalRangeChecker range_checking_policy;
  811. typedef Trunc<char> rounding_policy;
  812. };
  813. template <>
  814. struct numeric_cast_traits
  815. <
  816. unsigned int
  817. , signed char
  818. >
  819. {
  820. typedef def_overflow_handler overflow_policy;
  821. typedef UseInternalRangeChecker range_checking_policy;
  822. typedef Trunc<signed char> rounding_policy;
  823. };
  824. template <>
  825. struct numeric_cast_traits
  826. <
  827. unsigned int
  828. , unsigned char
  829. >
  830. {
  831. typedef def_overflow_handler overflow_policy;
  832. typedef UseInternalRangeChecker range_checking_policy;
  833. typedef Trunc<unsigned char> rounding_policy;
  834. };
  835. template <>
  836. struct numeric_cast_traits
  837. <
  838. unsigned int
  839. , short
  840. >
  841. {
  842. typedef def_overflow_handler overflow_policy;
  843. typedef UseInternalRangeChecker range_checking_policy;
  844. typedef Trunc<short> rounding_policy;
  845. };
  846. template <>
  847. struct numeric_cast_traits
  848. <
  849. unsigned int
  850. , unsigned short
  851. >
  852. {
  853. typedef def_overflow_handler overflow_policy;
  854. typedef UseInternalRangeChecker range_checking_policy;
  855. typedef Trunc<unsigned short> rounding_policy;
  856. };
  857. template <>
  858. struct numeric_cast_traits
  859. <
  860. unsigned int
  861. , int
  862. >
  863. {
  864. typedef def_overflow_handler overflow_policy;
  865. typedef UseInternalRangeChecker range_checking_policy;
  866. typedef Trunc<int> rounding_policy;
  867. };
  868. template <>
  869. struct numeric_cast_traits
  870. <
  871. unsigned int
  872. , unsigned int
  873. >
  874. {
  875. typedef def_overflow_handler overflow_policy;
  876. typedef UseInternalRangeChecker range_checking_policy;
  877. typedef Trunc<unsigned int> rounding_policy;
  878. };
  879. template <>
  880. struct numeric_cast_traits
  881. <
  882. unsigned int
  883. , long
  884. >
  885. {
  886. typedef def_overflow_handler overflow_policy;
  887. typedef UseInternalRangeChecker range_checking_policy;
  888. typedef Trunc<long> rounding_policy;
  889. };
  890. template <>
  891. struct numeric_cast_traits
  892. <
  893. unsigned int
  894. , unsigned long
  895. >
  896. {
  897. typedef def_overflow_handler overflow_policy;
  898. typedef UseInternalRangeChecker range_checking_policy;
  899. typedef Trunc<unsigned long> rounding_policy;
  900. };
  901. template <>
  902. struct numeric_cast_traits
  903. <
  904. unsigned int
  905. , float
  906. >
  907. {
  908. typedef def_overflow_handler overflow_policy;
  909. typedef UseInternalRangeChecker range_checking_policy;
  910. typedef Trunc<float> rounding_policy;
  911. };
  912. template <>
  913. struct numeric_cast_traits
  914. <
  915. unsigned int
  916. , double
  917. >
  918. {
  919. typedef def_overflow_handler overflow_policy;
  920. typedef UseInternalRangeChecker range_checking_policy;
  921. typedef Trunc<double> rounding_policy;
  922. };
  923. template <>
  924. struct numeric_cast_traits
  925. <
  926. unsigned int
  927. , long double
  928. >
  929. {
  930. typedef def_overflow_handler overflow_policy;
  931. typedef UseInternalRangeChecker range_checking_policy;
  932. typedef Trunc<long double> rounding_policy;
  933. };
  934. template <>
  935. struct numeric_cast_traits
  936. <
  937. long
  938. , char
  939. >
  940. {
  941. typedef def_overflow_handler overflow_policy;
  942. typedef UseInternalRangeChecker range_checking_policy;
  943. typedef Trunc<char> rounding_policy;
  944. };
  945. template <>
  946. struct numeric_cast_traits
  947. <
  948. long
  949. , signed char
  950. >
  951. {
  952. typedef def_overflow_handler overflow_policy;
  953. typedef UseInternalRangeChecker range_checking_policy;
  954. typedef Trunc<signed char> rounding_policy;
  955. };
  956. template <>
  957. struct numeric_cast_traits
  958. <
  959. long
  960. , unsigned char
  961. >
  962. {
  963. typedef def_overflow_handler overflow_policy;
  964. typedef UseInternalRangeChecker range_checking_policy;
  965. typedef Trunc<unsigned char> rounding_policy;
  966. };
  967. template <>
  968. struct numeric_cast_traits
  969. <
  970. long
  971. , short
  972. >
  973. {
  974. typedef def_overflow_handler overflow_policy;
  975. typedef UseInternalRangeChecker range_checking_policy;
  976. typedef Trunc<short> rounding_policy;
  977. };
  978. template <>
  979. struct numeric_cast_traits
  980. <
  981. long
  982. , unsigned short
  983. >
  984. {
  985. typedef def_overflow_handler overflow_policy;
  986. typedef UseInternalRangeChecker range_checking_policy;
  987. typedef Trunc<unsigned short> rounding_policy;
  988. };
  989. template <>
  990. struct numeric_cast_traits
  991. <
  992. long
  993. , int
  994. >
  995. {
  996. typedef def_overflow_handler overflow_policy;
  997. typedef UseInternalRangeChecker range_checking_policy;
  998. typedef Trunc<int> rounding_policy;
  999. };
  1000. template <>
  1001. struct numeric_cast_traits
  1002. <
  1003. long
  1004. , unsigned int
  1005. >
  1006. {
  1007. typedef def_overflow_handler overflow_policy;
  1008. typedef UseInternalRangeChecker range_checking_policy;
  1009. typedef Trunc<unsigned int> rounding_policy;
  1010. };
  1011. template <>
  1012. struct numeric_cast_traits
  1013. <
  1014. long
  1015. , long
  1016. >
  1017. {
  1018. typedef def_overflow_handler overflow_policy;
  1019. typedef UseInternalRangeChecker range_checking_policy;
  1020. typedef Trunc<long> rounding_policy;
  1021. };
  1022. template <>
  1023. struct numeric_cast_traits
  1024. <
  1025. long
  1026. , unsigned long
  1027. >
  1028. {
  1029. typedef def_overflow_handler overflow_policy;
  1030. typedef UseInternalRangeChecker range_checking_policy;
  1031. typedef Trunc<unsigned long> rounding_policy;
  1032. };
  1033. template <>
  1034. struct numeric_cast_traits
  1035. <
  1036. long
  1037. , float
  1038. >
  1039. {
  1040. typedef def_overflow_handler overflow_policy;
  1041. typedef UseInternalRangeChecker range_checking_policy;
  1042. typedef Trunc<float> rounding_policy;
  1043. };
  1044. template <>
  1045. struct numeric_cast_traits
  1046. <
  1047. long
  1048. , double
  1049. >
  1050. {
  1051. typedef def_overflow_handler overflow_policy;
  1052. typedef UseInternalRangeChecker range_checking_policy;
  1053. typedef Trunc<double> rounding_policy;
  1054. };
  1055. template <>
  1056. struct numeric_cast_traits
  1057. <
  1058. long
  1059. , long double
  1060. >
  1061. {
  1062. typedef def_overflow_handler overflow_policy;
  1063. typedef UseInternalRangeChecker range_checking_policy;
  1064. typedef Trunc<long double> rounding_policy;
  1065. };
  1066. template <>
  1067. struct numeric_cast_traits
  1068. <
  1069. unsigned long
  1070. , char
  1071. >
  1072. {
  1073. typedef def_overflow_handler overflow_policy;
  1074. typedef UseInternalRangeChecker range_checking_policy;
  1075. typedef Trunc<char> rounding_policy;
  1076. };
  1077. template <>
  1078. struct numeric_cast_traits
  1079. <
  1080. unsigned long
  1081. , signed char
  1082. >
  1083. {
  1084. typedef def_overflow_handler overflow_policy;
  1085. typedef UseInternalRangeChecker range_checking_policy;
  1086. typedef Trunc<signed char> rounding_policy;
  1087. };
  1088. template <>
  1089. struct numeric_cast_traits
  1090. <
  1091. unsigned long
  1092. , unsigned char
  1093. >
  1094. {
  1095. typedef def_overflow_handler overflow_policy;
  1096. typedef UseInternalRangeChecker range_checking_policy;
  1097. typedef Trunc<unsigned char> rounding_policy;
  1098. };
  1099. template <>
  1100. struct numeric_cast_traits
  1101. <
  1102. unsigned long
  1103. , short
  1104. >
  1105. {
  1106. typedef def_overflow_handler overflow_policy;
  1107. typedef UseInternalRangeChecker range_checking_policy;
  1108. typedef Trunc<short> rounding_policy;
  1109. };
  1110. template <>
  1111. struct numeric_cast_traits
  1112. <
  1113. unsigned long
  1114. , unsigned short
  1115. >
  1116. {
  1117. typedef def_overflow_handler overflow_policy;
  1118. typedef UseInternalRangeChecker range_checking_policy;
  1119. typedef Trunc<unsigned short> rounding_policy;
  1120. };
  1121. template <>
  1122. struct numeric_cast_traits
  1123. <
  1124. unsigned long
  1125. , int
  1126. >
  1127. {
  1128. typedef def_overflow_handler overflow_policy;
  1129. typedef UseInternalRangeChecker range_checking_policy;
  1130. typedef Trunc<int> rounding_policy;
  1131. };
  1132. template <>
  1133. struct numeric_cast_traits
  1134. <
  1135. unsigned long
  1136. , unsigned int
  1137. >
  1138. {
  1139. typedef def_overflow_handler overflow_policy;
  1140. typedef UseInternalRangeChecker range_checking_policy;
  1141. typedef Trunc<unsigned int> rounding_policy;
  1142. };
  1143. template <>
  1144. struct numeric_cast_traits
  1145. <
  1146. unsigned long
  1147. , long
  1148. >
  1149. {
  1150. typedef def_overflow_handler overflow_policy;
  1151. typedef UseInternalRangeChecker range_checking_policy;
  1152. typedef Trunc<long> rounding_policy;
  1153. };
  1154. template <>
  1155. struct numeric_cast_traits
  1156. <
  1157. unsigned long
  1158. , unsigned long
  1159. >
  1160. {
  1161. typedef def_overflow_handler overflow_policy;
  1162. typedef UseInternalRangeChecker range_checking_policy;
  1163. typedef Trunc<unsigned long> rounding_policy;
  1164. };
  1165. template <>
  1166. struct numeric_cast_traits
  1167. <
  1168. unsigned long
  1169. , float
  1170. >
  1171. {
  1172. typedef def_overflow_handler overflow_policy;
  1173. typedef UseInternalRangeChecker range_checking_policy;
  1174. typedef Trunc<float> rounding_policy;
  1175. };
  1176. template <>
  1177. struct numeric_cast_traits
  1178. <
  1179. unsigned long
  1180. , double
  1181. >
  1182. {
  1183. typedef def_overflow_handler overflow_policy;
  1184. typedef UseInternalRangeChecker range_checking_policy;
  1185. typedef Trunc<double> rounding_policy;
  1186. };
  1187. template <>
  1188. struct numeric_cast_traits
  1189. <
  1190. unsigned long
  1191. , long double
  1192. >
  1193. {
  1194. typedef def_overflow_handler overflow_policy;
  1195. typedef UseInternalRangeChecker range_checking_policy;
  1196. typedef Trunc<long double> rounding_policy;
  1197. };
  1198. template <>
  1199. struct numeric_cast_traits
  1200. <
  1201. float
  1202. , char
  1203. >
  1204. {
  1205. typedef def_overflow_handler overflow_policy;
  1206. typedef UseInternalRangeChecker range_checking_policy;
  1207. typedef Trunc<char> rounding_policy;
  1208. };
  1209. template <>
  1210. struct numeric_cast_traits
  1211. <
  1212. float
  1213. , signed char
  1214. >
  1215. {
  1216. typedef def_overflow_handler overflow_policy;
  1217. typedef UseInternalRangeChecker range_checking_policy;
  1218. typedef Trunc<signed char> rounding_policy;
  1219. };
  1220. template <>
  1221. struct numeric_cast_traits
  1222. <
  1223. float
  1224. , unsigned char
  1225. >
  1226. {
  1227. typedef def_overflow_handler overflow_policy;
  1228. typedef UseInternalRangeChecker range_checking_policy;
  1229. typedef Trunc<unsigned char> rounding_policy;
  1230. };
  1231. template <>
  1232. struct numeric_cast_traits
  1233. <
  1234. float
  1235. , short
  1236. >
  1237. {
  1238. typedef def_overflow_handler overflow_policy;
  1239. typedef UseInternalRangeChecker range_checking_policy;
  1240. typedef Trunc<short> rounding_policy;
  1241. };
  1242. template <>
  1243. struct numeric_cast_traits
  1244. <
  1245. float
  1246. , unsigned short
  1247. >
  1248. {
  1249. typedef def_overflow_handler overflow_policy;
  1250. typedef UseInternalRangeChecker range_checking_policy;
  1251. typedef Trunc<unsigned short> rounding_policy;
  1252. };
  1253. template <>
  1254. struct numeric_cast_traits
  1255. <
  1256. float
  1257. , int
  1258. >
  1259. {
  1260. typedef def_overflow_handler overflow_policy;
  1261. typedef UseInternalRangeChecker range_checking_policy;
  1262. typedef Trunc<int> rounding_policy;
  1263. };
  1264. template <>
  1265. struct numeric_cast_traits
  1266. <
  1267. float
  1268. , unsigned int
  1269. >
  1270. {
  1271. typedef def_overflow_handler overflow_policy;
  1272. typedef UseInternalRangeChecker range_checking_policy;
  1273. typedef Trunc<unsigned int> rounding_policy;
  1274. };
  1275. template <>
  1276. struct numeric_cast_traits
  1277. <
  1278. float
  1279. , long
  1280. >
  1281. {
  1282. typedef def_overflow_handler overflow_policy;
  1283. typedef UseInternalRangeChecker range_checking_policy;
  1284. typedef Trunc<long> rounding_policy;
  1285. };
  1286. template <>
  1287. struct numeric_cast_traits
  1288. <
  1289. float
  1290. , unsigned long
  1291. >
  1292. {
  1293. typedef def_overflow_handler overflow_policy;
  1294. typedef UseInternalRangeChecker range_checking_policy;
  1295. typedef Trunc<unsigned long> rounding_policy;
  1296. };
  1297. template <>
  1298. struct numeric_cast_traits
  1299. <
  1300. float
  1301. , float
  1302. >
  1303. {
  1304. typedef def_overflow_handler overflow_policy;
  1305. typedef UseInternalRangeChecker range_checking_policy;
  1306. typedef Trunc<float> rounding_policy;
  1307. };
  1308. template <>
  1309. struct numeric_cast_traits
  1310. <
  1311. float
  1312. , double
  1313. >
  1314. {
  1315. typedef def_overflow_handler overflow_policy;
  1316. typedef UseInternalRangeChecker range_checking_policy;
  1317. typedef Trunc<double> rounding_policy;
  1318. };
  1319. template <>
  1320. struct numeric_cast_traits
  1321. <
  1322. float
  1323. , long double
  1324. >
  1325. {
  1326. typedef def_overflow_handler overflow_policy;
  1327. typedef UseInternalRangeChecker range_checking_policy;
  1328. typedef Trunc<long double> rounding_policy;
  1329. };
  1330. template <>
  1331. struct numeric_cast_traits
  1332. <
  1333. double
  1334. , char
  1335. >
  1336. {
  1337. typedef def_overflow_handler overflow_policy;
  1338. typedef UseInternalRangeChecker range_checking_policy;
  1339. typedef Trunc<char> rounding_policy;
  1340. };
  1341. template <>
  1342. struct numeric_cast_traits
  1343. <
  1344. double
  1345. , signed char
  1346. >
  1347. {
  1348. typedef def_overflow_handler overflow_policy;
  1349. typedef UseInternalRangeChecker range_checking_policy;
  1350. typedef Trunc<signed char> rounding_policy;
  1351. };
  1352. template <>
  1353. struct numeric_cast_traits
  1354. <
  1355. double
  1356. , unsigned char
  1357. >
  1358. {
  1359. typedef def_overflow_handler overflow_policy;
  1360. typedef UseInternalRangeChecker range_checking_policy;
  1361. typedef Trunc<unsigned char> rounding_policy;
  1362. };
  1363. template <>
  1364. struct numeric_cast_traits
  1365. <
  1366. double
  1367. , short
  1368. >
  1369. {
  1370. typedef def_overflow_handler overflow_policy;
  1371. typedef UseInternalRangeChecker range_checking_policy;
  1372. typedef Trunc<short> rounding_policy;
  1373. };
  1374. template <>
  1375. struct numeric_cast_traits
  1376. <
  1377. double
  1378. , unsigned short
  1379. >
  1380. {
  1381. typedef def_overflow_handler overflow_policy;
  1382. typedef UseInternalRangeChecker range_checking_policy;
  1383. typedef Trunc<unsigned short> rounding_policy;
  1384. };
  1385. template <>
  1386. struct numeric_cast_traits
  1387. <
  1388. double
  1389. , int
  1390. >
  1391. {
  1392. typedef def_overflow_handler overflow_policy;
  1393. typedef UseInternalRangeChecker range_checking_policy;
  1394. typedef Trunc<int> rounding_policy;
  1395. };
  1396. template <>
  1397. struct numeric_cast_traits
  1398. <
  1399. double
  1400. , unsigned int
  1401. >
  1402. {
  1403. typedef def_overflow_handler overflow_policy;
  1404. typedef UseInternalRangeChecker range_checking_policy;
  1405. typedef Trunc<unsigned int> rounding_policy;
  1406. };
  1407. template <>
  1408. struct numeric_cast_traits
  1409. <
  1410. double
  1411. , long
  1412. >
  1413. {
  1414. typedef def_overflow_handler overflow_policy;
  1415. typedef UseInternalRangeChecker range_checking_policy;
  1416. typedef Trunc<long> rounding_policy;
  1417. };
  1418. template <>
  1419. struct numeric_cast_traits
  1420. <
  1421. double
  1422. , unsigned long
  1423. >
  1424. {
  1425. typedef def_overflow_handler overflow_policy;
  1426. typedef UseInternalRangeChecker range_checking_policy;
  1427. typedef Trunc<unsigned long> rounding_policy;
  1428. };
  1429. template <>
  1430. struct numeric_cast_traits
  1431. <
  1432. double
  1433. , float
  1434. >
  1435. {
  1436. typedef def_overflow_handler overflow_policy;
  1437. typedef UseInternalRangeChecker range_checking_policy;
  1438. typedef Trunc<float> rounding_policy;
  1439. };
  1440. template <>
  1441. struct numeric_cast_traits
  1442. <
  1443. double
  1444. , double
  1445. >
  1446. {
  1447. typedef def_overflow_handler overflow_policy;
  1448. typedef UseInternalRangeChecker range_checking_policy;
  1449. typedef Trunc<double> rounding_policy;
  1450. };
  1451. template <>
  1452. struct numeric_cast_traits
  1453. <
  1454. double
  1455. , long double
  1456. >
  1457. {
  1458. typedef def_overflow_handler overflow_policy;
  1459. typedef UseInternalRangeChecker range_checking_policy;
  1460. typedef Trunc<long double> rounding_policy;
  1461. };
  1462. template <>
  1463. struct numeric_cast_traits
  1464. <
  1465. long double
  1466. , char
  1467. >
  1468. {
  1469. typedef def_overflow_handler overflow_policy;
  1470. typedef UseInternalRangeChecker range_checking_policy;
  1471. typedef Trunc<char> rounding_policy;
  1472. };
  1473. template <>
  1474. struct numeric_cast_traits
  1475. <
  1476. long double
  1477. , signed char
  1478. >
  1479. {
  1480. typedef def_overflow_handler overflow_policy;
  1481. typedef UseInternalRangeChecker range_checking_policy;
  1482. typedef Trunc<signed char> rounding_policy;
  1483. };
  1484. template <>
  1485. struct numeric_cast_traits
  1486. <
  1487. long double
  1488. , unsigned char
  1489. >
  1490. {
  1491. typedef def_overflow_handler overflow_policy;
  1492. typedef UseInternalRangeChecker range_checking_policy;
  1493. typedef Trunc<unsigned char> rounding_policy;
  1494. };
  1495. template <>
  1496. struct numeric_cast_traits
  1497. <
  1498. long double
  1499. , short
  1500. >
  1501. {
  1502. typedef def_overflow_handler overflow_policy;
  1503. typedef UseInternalRangeChecker range_checking_policy;
  1504. typedef Trunc<short> rounding_policy;
  1505. };
  1506. template <>
  1507. struct numeric_cast_traits
  1508. <
  1509. long double
  1510. , unsigned short
  1511. >
  1512. {
  1513. typedef def_overflow_handler overflow_policy;
  1514. typedef UseInternalRangeChecker range_checking_policy;
  1515. typedef Trunc<unsigned short> rounding_policy;
  1516. };
  1517. template <>
  1518. struct numeric_cast_traits
  1519. <
  1520. long double
  1521. , int
  1522. >
  1523. {
  1524. typedef def_overflow_handler overflow_policy;
  1525. typedef UseInternalRangeChecker range_checking_policy;
  1526. typedef Trunc<int> rounding_policy;
  1527. };
  1528. template <>
  1529. struct numeric_cast_traits
  1530. <
  1531. long double
  1532. , unsigned int
  1533. >
  1534. {
  1535. typedef def_overflow_handler overflow_policy;
  1536. typedef UseInternalRangeChecker range_checking_policy;
  1537. typedef Trunc<unsigned int> rounding_policy;
  1538. };
  1539. template <>
  1540. struct numeric_cast_traits
  1541. <
  1542. long double
  1543. , long
  1544. >
  1545. {
  1546. typedef def_overflow_handler overflow_policy;
  1547. typedef UseInternalRangeChecker range_checking_policy;
  1548. typedef Trunc<long> rounding_policy;
  1549. };
  1550. template <>
  1551. struct numeric_cast_traits
  1552. <
  1553. long double
  1554. , unsigned long
  1555. >
  1556. {
  1557. typedef def_overflow_handler overflow_policy;
  1558. typedef UseInternalRangeChecker range_checking_policy;
  1559. typedef Trunc<unsigned long> rounding_policy;
  1560. };
  1561. template <>
  1562. struct numeric_cast_traits
  1563. <
  1564. long double
  1565. , float
  1566. >
  1567. {
  1568. typedef def_overflow_handler overflow_policy;
  1569. typedef UseInternalRangeChecker range_checking_policy;
  1570. typedef Trunc<float> rounding_policy;
  1571. };
  1572. template <>
  1573. struct numeric_cast_traits
  1574. <
  1575. long double
  1576. , double
  1577. >
  1578. {
  1579. typedef def_overflow_handler overflow_policy;
  1580. typedef UseInternalRangeChecker range_checking_policy;
  1581. typedef Trunc<double> rounding_policy;
  1582. };
  1583. template <>
  1584. struct numeric_cast_traits
  1585. <
  1586. long double
  1587. , long double
  1588. >
  1589. {
  1590. typedef def_overflow_handler overflow_policy;
  1591. typedef UseInternalRangeChecker range_checking_policy;
  1592. typedef Trunc<long double> rounding_policy;
  1593. };
  1594. }}