1 2 #ifndef BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED 3 #define BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED 4 5 // Copyright Aleksey Gurtovoy 2003-2004 6 // 7 // Distributed under the Boost Software License, Version 1.0. 8 // (See accompanying file LICENSE_1_0.txt or copy at 9 // http://www.boost.org/LICENSE_1_0.txt) 10 // 11 // See http://www.boost.org/libs/mpl for documentation. 12 13 // $Id$ 14 // $Date$ 15 // $Revision$ 16 17 #include <boost/mpl/numeric_cast.hpp> 18 #include <boost/mpl/apply_wrap.hpp> 19 #include <boost/mpl/aux_/config/forwarding.hpp> 20 21 namespace boost { namespace mpl { namespace aux { 22 23 template< 24 typename F 25 , typename Tag1 26 , typename Tag2 27 > 28 struct cast1st_impl 29 { 30 template< typename N1, typename N2 > struct apply 31 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) 32 : apply_wrap2< 33 F 34 , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type 35 , N2 36 > 37 { 38 #else 39 { 40 typedef typename apply_wrap2< 41 F 42 , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type 43 , N2 44 >::type type; 45 #endif 46 }; 47 }; 48 49 template< 50 typename F 51 , typename Tag1 52 , typename Tag2 53 > 54 struct cast2nd_impl 55 { 56 template< typename N1, typename N2 > struct apply 57 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) 58 : apply_wrap2< 59 F 60 , N1 61 , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type 62 > 63 { 64 #else 65 { 66 typedef typename apply_wrap2< 67 F 68 , N1 69 , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type 70 >::type type; 71 #endif 72 }; 73 }; 74 75 }}} 76 77 #endif // BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED 78