Line data Source code
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(__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 0 : 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 0 : return converter::convert(arg); 54 : } 55 : 56 : using numeric::bad_numeric_cast; 57 : } // namespace boost 58 : 59 : #endif 60 : 61 : #endif