mpl/if.hpp
Go to the documentation of this file.
1 
2 #ifndef BOOST_MPL_IF_HPP_INCLUDED
3 #define BOOST_MPL_IF_HPP_INCLUDED
4 
5 // Copyright Aleksey Gurtovoy 2000-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$
14 // $Date$
15 // $Revision$
16 
24 
25 namespace boost { namespace mpl {
26 
27 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
28 
29 template<
30  bool C
31  , typename T1
32  , typename T2
33  >
34 struct if_c
35 {
36  typedef T1 type;
37 };
38 
39 template<
40  typename T1
41  , typename T2
42  >
43 struct if_c<false,T1,T2>
44 {
45  typedef T2 type;
46 };
47 
48 // agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars
49 // (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959
50 template<
51  typename BOOST_MPL_AUX_NA_PARAM(T1)
52  , typename BOOST_MPL_AUX_NA_PARAM(T2)
53  , typename BOOST_MPL_AUX_NA_PARAM(T3)
54  >
55 struct if_
56 {
57  private:
58  // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC
59  typedef if_c<
60 #if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS)
62 #else
64 #endif
65  , T2
66  , T3
68 
69  public:
70  typedef typename almost_type_::type type;
71 
72  BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))
73 };
74 
75 #else
76 
77 // no partial class template specialization
78 
79 namespace aux {
80 
81 template< bool C >
82 struct if_impl
83 {
84  template< typename T1, typename T2 > struct result_
85  {
86  typedef T1 type;
87  };
88 };
89 
90 template<>
91 struct if_impl<false>
92 {
93  template< typename T1, typename T2 > struct result_
94  {
95  typedef T2 type;
96  };
97 };
98 
99 } // namespace aux
100 
101 template<
102  bool C_
103  , typename T1
104  , typename T2
105  >
106 struct if_c
107 {
108  typedef typename aux::if_impl< C_ >
109  ::template result_<T1,T2>::type type;
110 };
111 
112 // (almost) copy & paste in order to save one more
113 // recursively nested template instantiation to user
114 template<
115  typename BOOST_MPL_AUX_NA_PARAM(C_)
116  , typename BOOST_MPL_AUX_NA_PARAM(T1)
117  , typename BOOST_MPL_AUX_NA_PARAM(T2)
118  >
119 struct if_
120 {
121  enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value };
122 
123  typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) >
124  ::template result_<T1,T2>::type type;
125 
126  BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2))
127 };
128 
129 #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
130 
132 
133 }}
134 
135 #endif // BOOST_MPL_IF_HPP_INCLUDED
if_c< , T2, T3 > almost_type_
Definition: mpl/if.hpp:67
#define BOOST_MPL_AUX_VALUE_WKND(C)
Definition: value_wknd.hpp:57
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
#define BOOST_MPL_AUX_NA_SPEC(i, name)
Definition: na_spec.hpp:161
GLfloat value
#define BOOST_MPL_AUX_MSVC_VALUE_WKND(C)
Definition: value_wknd.hpp:58
#define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params)
#define BOOST_MPL_AUX_NA_PARAM(param)
Definition: na_spec.hpp:152
#define BOOST_MPL_AUX_STATIC_CAST(T, expr)
Definition: static_cast.hpp:24
GLenum type
almost_type_::type type
Definition: mpl/if.hpp:70


librealsense2
Author(s): Sergey Dorodnicov , Doron Hirshberg , Mark Horn , Reagan Lopez , Itay Carpis
autogenerated on Mon May 3 2021 02:47:16