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