1 2 #ifndef BOOST_MPL_AUX_NA_HPP_INCLUDED 3 #define BOOST_MPL_AUX_NA_HPP_INCLUDED 4 5 // Copyright Aleksey Gurtovoy 2001-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: na.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ 14 // $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $ 15 // $Revision: 49267 $ 16 17 #include <boost/mpl/bool.hpp> 18 #include <boost/mpl/aux_/na_fwd.hpp> 19 #include <boost/mpl/aux_/config/msvc.hpp> 20 #include <boost/mpl/aux_/config/ctps.hpp> 21 22 namespace boost { namespace mpl { 23 24 template< typename T > 25 struct is_na 26 : false_ 27 { 28 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) 29 using false_::value; 30 #endif 31 }; 32 33 template<> 34 struct is_na<na> 35 : true_ 36 { 37 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) 38 using true_::value; 39 #endif 40 }; 41 42 template< typename T > 43 struct is_not_na 44 : true_ 45 { 46 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) 47 using true_::value; 48 #endif 49 }; 50 51 template<> 52 struct is_not_na<na> 53 : false_ 54 { 55 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) 56 using false_::value; 57 #endif 58 }; 59 60 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) 61 template< typename T, typename U > struct if_na 62 { 63 typedef T type; 64 }; 65 66 template< typename U > struct if_na<na,U> 67 { 68 typedef U type; 69 }; 70 #else 71 template< typename T > struct if_na_impl 72 { 73 template< typename U > struct apply 74 { 75 typedef T type; 76 }; 77 }; 78 79 template<> struct if_na_impl<na> 80 { 81 template< typename U > struct apply 82 { 83 typedef U type; 84 }; 85 }; 86 87 template< typename T, typename U > struct if_na 88 : if_na_impl<T>::template apply<U> 89 { 90 }; 91 #endif 92 93 }} 94 95 #endif // BOOST_MPL_AUX_NA_HPP_INCLUDED 96