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.
bool_trait_def.hpp in vendors/XIOS/current/extern/boost/include/boost/type_traits/detail – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/type_traits/detail/bool_trait_def.hpp @ 3428

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

importing initial XIOS vendor drop

File size: 4.9 KB
Line 
1
2// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
3
4// Copyright Aleksey Gurtovoy 2002-2004
5//
6// Distributed under the Boost Software License, Version 1.0.
7// (See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt)
9
10// $Source$
11// $Date: 2006-07-12 07:10:22 -0400 (Wed, 12 Jul 2006) $
12// $Revision: 34511 $
13
14#include <boost/type_traits/detail/template_arity_spec.hpp>
15#include <boost/type_traits/integral_constant.hpp>
16#include <boost/mpl/bool.hpp>
17#include <boost/mpl/aux_/lambda_support.hpp>
18#include <boost/config.hpp>
19
20//
21// Unfortunately some libraries have started using this header without
22// cleaning up afterwards: so we'd better undef the macros just in case
23// they've been defined already....
24//
25#ifdef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
26#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
27#undef BOOST_TT_AUX_BOOL_C_BASE
28#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1
29#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2
30#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1
31#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2
32#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1
33#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2
34#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1
35#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2
36#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1
37#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2
38#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1
39#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1
40#endif
41
42#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x570)
43#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
44    typedef ::boost::integral_constant<bool,C> type; \
45    enum { value = type::value }; \
46    /**/
47#   define BOOST_TT_AUX_BOOL_C_BASE(C)
48
49#elif defined(BOOST_MSVC) && BOOST_MSVC < 1300
50
51#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
52    typedef ::boost::integral_constant<bool,C> base_; \
53    using base_::value; \
54    /**/
55
56#endif
57
58#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
59#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/
60#endif
61
62#ifndef BOOST_TT_AUX_BOOL_C_BASE
63#   define BOOST_TT_AUX_BOOL_C_BASE(C) : ::boost::integral_constant<bool,C>
64#endif
65
66
67#define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \
68template< typename T > struct trait \
69    BOOST_TT_AUX_BOOL_C_BASE(C) \
70{ \
71    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
72    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
73}; \
74\
75BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
76/**/
77
78
79#define BOOST_TT_AUX_BOOL_TRAIT_DEF2(trait,T1,T2,C) \
80template< typename T1, typename T2 > struct trait \
81    BOOST_TT_AUX_BOOL_C_BASE(C) \
82{ \
83    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
84    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,trait,(T1,T2)) \
85}; \
86\
87BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,trait) \
88/**/
89
90#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \
91template<> struct trait< sp > \
92    BOOST_TT_AUX_BOOL_C_BASE(C) \
93{ \
94    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
95    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(sp)) \
96}; \
97/**/
98
99#define BOOST_TT_AUX_BOOL_TRAIT_SPEC2(trait,sp1,sp2,C) \
100template<> struct trait< sp1,sp2 > \
101    BOOST_TT_AUX_BOOL_C_BASE(C) \
102{ \
103    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
104    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \
105}; \
106/**/
107
108#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(trait,sp,C) \
109template<> struct trait##_impl< sp > \
110{ \
111    BOOST_STATIC_CONSTANT(bool, value = (C)); \
112}; \
113/**/
114
115#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \
116template<> struct trait##_impl< sp1,sp2 > \
117{ \
118    BOOST_STATIC_CONSTANT(bool, value = (C)); \
119}; \
120/**/
121
122#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(param,trait,sp,C) \
123template< param > struct trait< sp > \
124    BOOST_TT_AUX_BOOL_C_BASE(C) \
125{ \
126    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
127}; \
128/**/
129
130#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,sp,C) \
131template< param1, param2 > struct trait< sp > \
132    BOOST_TT_AUX_BOOL_C_BASE(C) \
133{ \
134    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
135}; \
136/**/
137
138#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
139template< param > struct trait< sp1,sp2 > \
140    BOOST_TT_AUX_BOOL_C_BASE(C) \
141{ \
142    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
143    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \
144}; \
145/**/
146
147#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(param1,param2,trait,sp1,sp2,C) \
148template< param1, param2 > struct trait< sp1,sp2 > \
149    BOOST_TT_AUX_BOOL_C_BASE(C) \
150{ \
151    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
152}; \
153/**/
154
155#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
156template< param > struct trait##_impl< sp1,sp2 > \
157{ \
158    BOOST_STATIC_CONSTANT(bool, value = (C)); \
159}; \
160/**/
161
162#ifndef BOOST_NO_CV_SPECIALIZATIONS
163#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
164    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
165    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const,value) \
166    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp volatile,value) \
167    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const volatile,value) \
168    /**/
169#else
170#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
171    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
172    /**/
173#endif
Note: See TracBrowser for help on using the repository browser.