merge commit for serialization
[dyninst.git] / dynutil / h / dyn_detail / boost / type_traits / is_same.hpp
1 \r
2 //  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \r
3 //      Howard Hinnant and John Maddock 2000. \r
4 //  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\r
5 \r
6 //  Use, modification and distribution are subject to the Boost Software License,\r
7 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\r
8 //  http://www.boost.org/LICENSE_1_0.txt).\r
9 //\r
10 //  See http://www.boost.org/libs/type_traits for most recent version including documentation.\r
11 \r
12 //    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \r
13 //    is_member_pointer based on the Simulated Partial Specialization work \r
14 //    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \r
15 //    http://groups.yahoo.com/group/boost/message/5441 \r
16 //    Some workarounds in here use ideas suggested from "Generic<Programming>: \r
17 //    Mappings between Types and Values" \r
18 //    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\r
19 \r
20 \r
21 #ifndef DYN_DETAIL_BOOST_TT_IS_SAME_HPP_INCLUDED\r
22 #define DYN_DETAIL_BOOST_TT_IS_SAME_HPP_INCLUDED\r
23 \r
24 #include <dyn_detail/boost/type_traits/config.hpp>\r
25 #ifdef DYN_DETAIL_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
26 #error\r
27 #include <dyn_detail/boost/type_traits/detail/yes_no_type.hpp>\r
28 #include <dyn_detail/boost/type_traits/detail/ice_and.hpp>\r
29 #include <dyn_detail/boost/type_traits/is_reference.hpp>\r
30 #endif\r
31 // should be the last #include\r
32 #include <dyn_detail/boost/type_traits/detail/bool_trait_def.hpp>\r
33 \r
34 namespace dyn_detail {\r
35 namespace boost {\r
36 \r
37 #ifndef DYN_DETAIL_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
38 \r
39 DYN_DETAIL_BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,false)\r
40 DYN_DETAIL_BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T,T,true)\r
41 #if DYN_DETAIL_BOOST_WORKAROUND(__BORLANDC__, < 0x600)\r
42 // without this, Borland's compiler gives the wrong answer for\r
43 // references to arrays:\r
44 DYN_DETAIL_BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T&,T&,true)\r
45 #endif\r
46 \r
47 #else // DYN_DETAIL_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
48 \r
49 namespace detail {\r
50 \r
51 #ifdef DYN_DETAIL_BOOST_MSVC\r
52 // the following VC6 specific implementation is *NOT* legal\r
53 // C++, but has the advantage that it works for incomplete\r
54 // types.\r
55 \r
56 template< typename T1 >\r
57 struct is_same_part_1\r
58 {\r
59     template<typename T2>  struct part_2     { enum { value = false }; };\r
60     template<>             struct part_2<T1> { enum { value = true }; };\r
61 };\r
62 \r
63 template< typename T1, typename T2 >\r
64 struct is_same_impl\r
65 {\r
66     enum { value = detail::is_same_part_1<T1>::template part_2<T2>::value };\r
67 };\r
68 \r
69 #else // generic "no-partial-specialization" version\r
70 \r
71 template <typename T>\r
72 ::dyn_detail::boost::type_traits::yes_type\r
73 DYN_DETAIL_BOOST_TT_DECL is_same_tester(T*, T*);\r
74 \r
75 ::dyn_detail::boost::type_traits::no_type\r
76 DYN_DETAIL_BOOST_TT_DECL is_same_tester(...);\r
77 \r
78 template <typename T, typename U>\r
79 struct is_same_impl\r
80 {\r
81    static T t;\r
82    static U u;\r
83 \r
84    DYN_DETAIL_BOOST_STATIC_CONSTANT(bool, value =\r
85       (::dyn_detail::boost::type_traits::ice_and<\r
86          (sizeof(type_traits::yes_type) == sizeof(detail::is_same_tester(&t,&u))),\r
87          (::dyn_detail::boost::is_reference<T>::value == ::dyn_detail::boost::is_reference<U>::value),\r
88          (sizeof(T) == sizeof(U))\r
89         >::value));\r
90 };\r
91 \r
92 #endif // DYN_DETAIL_BOOST_MSVC\r
93 \r
94 } // namespace detail\r
95 \r
96 DYN_DETAIL_BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,(::dyn_detail::boost::detail::is_same_impl<T,U>::value))\r
97 \r
98 #endif // DYN_DETAIL_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
99 \r
100 } // namespace boost\r
101 } // namespace dyn_detail\r
102 \r
103 #include <dyn_detail/boost/type_traits/detail/bool_trait_undef.hpp>\r
104 \r
105 #endif  // DYN_DETAIL_BOOST_TT_IS_SAME_HPP_INCLUDED\r
106 \r