New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
is_pointer.hpp in vendors/XIOS/current/extern/boost/include/boost/type_traits – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/type_traits/is_pointer.hpp @ 3408

Last change on this file since 3408 was 3408, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

  • Property svn:keywords set to Id
File size: 5.0 KB
Line 
1
2//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
3//      Howard Hinnant and John Maddock 2000.
4//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
5
6//  Use, modification and distribution are subject to the Boost Software License,
7//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8//  http://www.boost.org/LICENSE_1_0.txt).
9//
10//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
11
12//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same,
13//    is_member_pointer based on the Simulated Partial Specialization work
14//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or
15//    http://groups.yahoo.com/group/boost/message/5441
16//    Some workarounds in here use ideas suggested from "Generic<Programming>:
17//    Mappings between Types and Values"
18//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
19
20
21#ifndef BOOST_TT_IS_POINTER_HPP_INCLUDED
22#define BOOST_TT_IS_POINTER_HPP_INCLUDED
23
24#include <boost/type_traits/is_member_pointer.hpp>
25#include <boost/type_traits/detail/ice_and.hpp>
26#include <boost/type_traits/detail/ice_not.hpp>
27#include <boost/type_traits/config.hpp>
28#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
29#include <boost/type_traits/remove_cv.hpp>
30#endif
31
32#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
33#   include <boost/type_traits/is_reference.hpp>
34#   include <boost/type_traits/is_array.hpp>
35#   include <boost/type_traits/detail/is_function_ptr_tester.hpp>
36#   include <boost/type_traits/detail/false_result.hpp>
37#   include <boost/type_traits/detail/ice_or.hpp>
38#endif
39
40// should be the last #include
41#include <boost/type_traits/detail/bool_trait_def.hpp>
42
43namespace boost {
44
45#if defined( __CODEGEARC__ )
46BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,__is_pointer(T))
47#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
48
49namespace detail {
50
51template< typename T > struct is_pointer_helper
52{
53    BOOST_STATIC_CONSTANT(bool, value = false);
54};
55
56#   define TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(helper,sp,result) \
57template< typename T > struct helper<sp> \
58{ \
59    BOOST_STATIC_CONSTANT(bool, value = result); \
60}; \
61/**/
62
63TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T*,true)
64
65#   undef TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC
66
67template< typename T >
68struct is_pointer_impl
69{
70#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
71    BOOST_STATIC_CONSTANT(bool, value =
72        (::boost::type_traits::ice_and<
73              ::boost::detail::is_pointer_helper<T>::value
74            , ::boost::type_traits::ice_not<
75                ::boost::is_member_pointer<T>::value
76                >::value
77            >::value)
78        );
79#else
80    BOOST_STATIC_CONSTANT(bool, value =
81        (::boost::type_traits::ice_and<
82        ::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value
83            , ::boost::type_traits::ice_not<
84                ::boost::is_member_pointer<T>::value
85                >::value
86            >::value)
87        );
88#endif
89};
90
91} // namespace detail
92
93BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)
94
95#if defined(__BORLANDC__) && !defined(__COMO__) && (__BORLANDC__ < 0x600)
96BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T&,false)
97BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const,false)
98BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& volatile,false)
99BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const volatile,false)
100#endif
101
102#else // no partial template specialization
103
104namespace detail {
105
106struct pointer_helper
107{
108    pointer_helper(const volatile void*);
109};
110
111yes_type BOOST_TT_DECL is_pointer_tester(pointer_helper);
112no_type BOOST_TT_DECL is_pointer_tester(...);
113
114template <bool>
115struct is_pointer_select
116    : ::boost::type_traits::false_result
117{
118};
119
120template <>
121struct is_pointer_select<false>
122{
123    template <typename T> struct result_
124    {
125        static T& make_t();
126        BOOST_STATIC_CONSTANT(bool, value =
127                (::boost::type_traits::ice_or<
128                    (1 == sizeof(is_pointer_tester(make_t()))),
129                    (1 == sizeof(type_traits::is_function_ptr_tester(make_t())))
130                >::value));
131    };
132};
133
134template <typename T>
135struct is_pointer_impl
136    : is_pointer_select<
137          ::boost::type_traits::ice_or<
138              ::boost::is_reference<T>::value
139            , ::boost::is_array<T>::value
140            >::value
141        >::template result_<T>
142{
143};
144
145BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void,false)
146#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
147BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const,false)
148BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void volatile,false)
149BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const volatile,false)
150#endif
151
152} // namespace detail
153
154BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)
155
156#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
157
158} // namespace boost
159
160#include <boost/type_traits/detail/bool_trait_undef.hpp>
161
162#endif // BOOST_TT_IS_POINTER_HPP_INCLUDED
Note: See TracBrowser for help on using the repository browser.