]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mpl/doc/src/refmanual/inherit.rst
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / mpl / doc / src / refmanual / inherit.rst
1 .. Metafunctions/Miscellaneous//inherit |30
2
3 inherit
4 =======
5
6 Synopsis
7 --------
8
9 .. parsed-literal::
10
11 template<
12 typename T1, typename T2
13 >
14 struct inherit\ ``2``
15 {
16 typedef |unspecified| type;
17 };
18
19 |...|
20
21 template<
22 typename T1, typename T2,\ |...| typename T\ *n*
23 >
24 struct inherit\ *n*
25 {
26 typedef |unspecified| type;
27 };
28
29 template<
30 typename T1
31 , typename T2
32 |...|
33 , typename T\ *n* = |unspecified|
34 >
35 struct inherit
36 {
37 typedef |unspecified| type;
38 };
39
40
41 Description
42 -----------
43
44 Returns an unspecified class type publically derived from |T1...Tn|.
45 Guarantees that derivation from |empty_base| is always a no-op,
46 regardless of the position and number of |empty_base| classes in
47 |T1...Tn|.
48
49
50 Header
51 ------
52
53 .. parsed-literal::
54
55 #include <boost/mpl/inherit.hpp>
56
57
58 Model of
59 --------
60
61 |Metafunction|
62
63
64 Parameters
65 ----------
66
67 +---------------+-------------------+-----------------------------------+
68 | Parameter | Requirement | Description |
69 +===============+===================+===================================+
70 | |T1...Tn| | A class type | Classes to derived from. |
71 +---------------+-------------------+-----------------------------------+
72
73
74 Expression semantics
75 --------------------
76
77 For artibrary class types |t1...tn|:
78
79 .. parsed-literal::
80
81 typedef inherit2<t1,t2>::type r;
82
83 :Return type:
84 A class type.
85
86 :Precondition:
87 ``t1`` and ``t2`` are complete types.
88
89 :Semantics:
90 If both ``t1`` and ``t2`` are identical to ``empty_base``, equivalent to
91
92 .. parsed-literal::
93
94 typedef empty_base r;
95
96
97 otherwise, if ``t1`` is identical to ``empty_base``, equivalent to
98
99 .. parsed-literal::
100
101 typedef t2 r;
102
103
104 otherwise, if ``t2`` is identical to ``empty_base``, equivalent to
105
106 .. parsed-literal::
107
108 typedef t1 r;
109
110
111 otherwise equivalent to
112
113 .. parsed-literal::
114
115 struct r : t1, t2 {};
116
117 .. ...........................................................................
118
119 .. parsed-literal::
120
121 typedef inherit\ *n*\<t1,t2,\ |...|\ t\ *n*\ >::type r;
122
123 :Return type:
124 A class type.
125
126 :Precondition:
127 |t1...tn| are complete types.
128
129 :Semantics:
130 Equivalent to
131
132 .. parsed-literal::
133
134 struct r
135 : inherit\ ``2``\<
136 inherit\ *n-1*\<t1,t2,\ |...|\ t\ *n-1*\>::type
137 , t\ *n*
138 >
139 {
140 };
141
142
143 .. ...........................................................................
144
145
146 .. parsed-literal::
147
148 typedef inherit<t1,t2,\ |...|\ t\ *n*\ >::type r;
149
150 :Precondition:
151 |t1...tn| are complete types.
152
153 :Return type:
154 A class type.
155
156 :Semantics:
157 Equivalent to
158
159 .. parsed-literal::
160
161 typedef inherit\ *n*\<t1,t2,\ |...|\ t\ *n*\ >::type r;
162
163
164
165 Complexity
166 ----------
167
168 Amortized constant time.
169
170
171 Example
172 -------
173
174 .. parsed-literal::
175
176 struct udt1 { int n; };
177 struct udt2 {};
178
179 typedef inherit<udt1,udt2>::type r1;
180 typedef inherit<empty_base,udt1>::type r2;
181 typedef inherit<empty_base,udt1,empty_base,empty_base>::type r3;
182 typedef inherit<udt1,empty_base,udt2>::type r4;
183 typedef inherit<empty_base,empty_base>::type r5;
184
185 BOOST_MPL_ASSERT(( is_base_and_derived< udt1, r1> ));
186 BOOST_MPL_ASSERT(( is_base_and_derived< udt2, r1> ));
187 BOOST_MPL_ASSERT(( is_same< r2, udt1> ));
188 BOOST_MPL_ASSERT(( is_same< r3, udt1 > ));
189 BOOST_MPL_ASSERT(( is_base_and_derived< udt1, r4 > ));
190 BOOST_MPL_ASSERT(( is_base_and_derived< udt2, r4 > ));
191 BOOST_MPL_ASSERT(( is_same< r5, empty_base > ));
192
193
194 See also
195 --------
196
197 |Metafunctions|, |empty_base|, |inherit_linearly|, |identity|
198
199
200 .. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams
201 Distributed under the Boost Software License, Version 1.0. (See accompanying
202 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)