Fixes for VS 2008
[dyninst.git] / external / boost / mpl / aux_ / na.hpp
1 \r
2 #ifndef BOOST_MPL_AUX_NA_HPP_INCLUDED\r
3 #define BOOST_MPL_AUX_NA_HPP_INCLUDED\r
4 \r
5 // Copyright Aleksey Gurtovoy 2001-2004\r
6 //\r
7 // Distributed under the Boost Software License, Version 1.0. \r
8 // (See accompanying file LICENSE_1_0.txt or copy at \r
9 // http://www.boost.org/LICENSE_1_0.txt)\r
10 //\r
11 // See http://www.boost.org/libs/mpl for documentation.\r
12 \r
13 // $Id: na.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\r
14 // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $\r
15 // $Revision: 49267 $\r
16 \r
17 #include <boost/mpl/bool.hpp>\r
18 #include <boost/mpl/aux_/na_fwd.hpp>\r
19 #include <boost/mpl/aux_/config/msvc.hpp>\r
20 #include <boost/mpl/aux_/config/ctps.hpp>\r
21 \r
22 namespace boost { namespace mpl {\r
23 \r
24 template< typename T >\r
25 struct is_na\r
26     : false_\r
27 {\r
28 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\r
29     using false_::value;\r
30 #endif\r
31 };\r
32 \r
33 template<>\r
34 struct is_na<na>\r
35     : true_\r
36 {\r
37 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\r
38     using true_::value;\r
39 #endif\r
40 };\r
41 \r
42 template< typename T >\r
43 struct is_not_na\r
44     : true_\r
45 {\r
46 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\r
47     using true_::value;\r
48 #endif\r
49 };\r
50 \r
51 template<>\r
52 struct is_not_na<na>\r
53     : false_\r
54 {\r
55 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\r
56     using false_::value;\r
57 #endif\r
58 };\r
59 \r
60 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
61 template< typename T, typename U > struct if_na\r
62 {\r
63     typedef T type;\r
64 };\r
65 \r
66 template< typename U > struct if_na<na,U>\r
67 {\r
68     typedef U type;\r
69 };\r
70 #else\r
71 template< typename T > struct if_na_impl\r
72 {\r
73     template< typename U > struct apply\r
74     {\r
75         typedef T type;\r
76     };\r
77 };\r
78 \r
79 template<> struct if_na_impl<na>\r
80 {\r
81     template< typename U > struct apply\r
82     {\r
83         typedef U type;\r
84     };\r
85 };\r
86 \r
87 template< typename T, typename U > struct if_na\r
88     : if_na_impl<T>::template apply<U>\r
89 {\r
90 };\r
91 #endif\r
92 \r
93 }}\r
94 \r
95 #endif // BOOST_MPL_AUX_NA_HPP_INCLUDED\r