]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // (c) Copyright Fernando Luis Cacciola Carballal 2000-2004 |
2 | // Use, modification, and distribution is subject to the Boost Software | |
3 | // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
4 | // http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
6 | // See library home page at http://www.boost.org/libs/numeric/conversion | |
7 | // | |
8 | // Contact the author at: fernando_cacciola@hotmail.com | |
9 | // | |
10 | // | |
11 | // Revision History | |
12 | // | |
13 | // 19 Nov 2001 Syntatic changes as suggested by Darin Adler (Fernando Cacciola) | |
14 | // 08 Nov 2001 Fixes to accommodate MSVC (Fernando Cacciola) | |
15 | // 04 Nov 2001 Fixes to accommodate gcc2.92 (Fernando Cacciola) | |
16 | // 30 Oct 2001 Some fixes suggested by Daryle Walker (Fernando Cacciola) | |
17 | // 25 Oct 2001 Initial boostification (Fernando Cacciola) | |
18 | // 23 Jan 2004 Inital add to cvs (post review)s | |
19 | // 22 Jun 2011 Added support for specializing cast policies via numeric_cast_traits (Brandon Kohn). | |
20 | // | |
21 | #ifndef BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP | |
22 | #define BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP | |
23 | ||
24 | #include <boost/detail/workaround.hpp> | |
25 | ||
26 | #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582)) | |
27 | ||
28 | # include<boost/numeric/conversion/detail/old_numeric_cast.hpp> | |
29 | ||
30 | #else | |
31 | ||
32 | #include <boost/type.hpp> | |
33 | #include <boost/numeric/conversion/converter.hpp> | |
34 | #include <boost/numeric/conversion/numeric_cast_traits.hpp> | |
35 | ||
36 | namespace boost | |
37 | { | |
38 | template <typename Target, typename Source> | |
39 | inline Target numeric_cast( Source arg ) | |
40 | { | |
41 | typedef numeric::conversion_traits<Target, Source> conv_traits; | |
42 | typedef numeric::numeric_cast_traits<Target, Source> cast_traits; | |
43 | typedef boost::numeric::converter | |
44 | < | |
45 | Target, | |
46 | Source, | |
47 | conv_traits, | |
48 | typename cast_traits::overflow_policy, | |
49 | typename cast_traits::rounding_policy, | |
50 | boost::numeric::raw_converter< conv_traits >, | |
51 | typename cast_traits::range_checking_policy | |
52 | > converter; | |
53 | return converter::convert(arg); | |
54 | } | |
55 | ||
56 | using numeric::bad_numeric_cast; | |
57 | } // namespace boost | |
58 | ||
59 | #endif | |
60 | ||
61 | #endif |