• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" standalone="yes"?>
2<library-reference id="reference"><title>Reference</title><header name="boost/tti/gen/has_class_gen.hpp">
3<macro name="BOOST_TTI_HAS_CLASS_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_CLASS. </purpose><description><para>name = the name of the class/struct.</para><para>returns = the generated macro metafunction name. </para></description></macro>
4</header>
5<header name="boost/tti/gen/has_data_gen.hpp">
6<macro name="BOOST_TTI_HAS_DATA_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_DATA. </purpose><description><para>name = the name of the data.</para><para>returns = the generated macro metafunction name. </para></description></macro>
7</header>
8<header name="boost/tti/gen/has_enum_gen.hpp">
9<macro name="BOOST_TTI_HAS_ENUM_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_ENUM. </purpose><description><para>name = the name of the enumeration.</para><para>returns = the generated macro metafunction name. </para></description></macro>
10</header>
11<header name="boost/tti/gen/has_function_gen.hpp">
12<macro name="BOOST_TTI_HAS_FUNCTION_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_FUNCTION. </purpose><description><para>name = the name of the function.</para><para>returns = the generated macro metafunction name. </para></description></macro>
13</header>
14<header name="boost/tti/gen/has_function_template_gen.hpp">
15<macro name="BOOST_TTI_HAS_FUNCTION_TEMPLATE_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_FUNCTION_TEMPLATE. </purpose><description><para>name = the name of the function template.</para><para>returns = the generated macro metafunction name. </para></description></macro>
16</header>
17<header name="boost/tti/gen/has_member_data_gen.hpp">
18<macro name="BOOST_TTI_HAS_MEMBER_DATA_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_MEMBER_DATA. </purpose><description><para>name = the name of the member data.</para><para>returns = the generated macro metafunction name. </para></description></macro>
19</header>
20<header name="boost/tti/gen/has_member_function_gen.hpp">
21<macro name="BOOST_TTI_HAS_MEMBER_FUNCTION_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_MEMBER_FUNCTION. </purpose><description><para>name = the name of the member function.</para><para>returns = the generated macro metafunction name. </para></description></macro>
22</header>
23<header name="boost/tti/gen/has_member_function_template_gen.hpp">
24<macro name="BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE. </purpose><description><para>name = the name of the member function template.</para><para>returns = the generated macro metafunction name. </para></description></macro>
25</header>
26<header name="boost/tti/gen/has_static_member_data_gen.hpp">
27<macro name="BOOST_TTI_HAS_STATIC_MEMBER_DATA_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_STATIC_MEMBER_DATA. </purpose><description><para>name = the name of the static member data.</para><para>returns = the generated macro metafunction name. </para></description></macro>
28</header>
29<header name="boost/tti/gen/has_static_member_function_gen.hpp">
30<macro name="BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION. </purpose><description><para>name = the name of the static member function.</para><para>returns = the generated macro metafunction name. </para></description></macro>
31</header>
32<header name="boost/tti/gen/has_static_member_function_template_gen.hpp">
33<macro name="BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE. </purpose><description><para>name = the name of the static member function template.</para><para>returns = the generated macro metafunction name. </para></description></macro>
34</header>
35<header name="boost/tti/gen/has_template_gen.hpp">
36<macro name="BOOST_TTI_HAS_TEMPLATE_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_TEMPLATE. </purpose><description><para>name = the name of the class template.</para><para>returns = the generated macro metafunction name. </para></description></macro>
37</header>
38<header name="boost/tti/gen/has_type_gen.hpp">
39<macro name="BOOST_TTI_HAS_TYPE_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_TYPE. </purpose><description><para>name = the name of the type.</para><para>returns = the generated macro metafunction name. </para></description></macro>
40</header>
41<header name="boost/tti/gen/has_union_gen.hpp">
42<macro name="BOOST_TTI_HAS_UNION_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_HAS_UNION. </purpose><description><para>name = the name of the union.</para><para>returns = the generated macro metafunction name. </para></description></macro>
43</header>
44<header name="boost/tti/gen/member_type_gen.hpp">
45<macro name="BOOST_TTI_MEMBER_TYPE_GEN" kind="functionlike"><macro-parameter name="name"/><purpose>Generates the macro metafunction name for BOOST_TTI_MEMBER_TYPE. </purpose><description><para>name = the name of the inner type.</para><para>returns = the generated macro metafunction name. </para></description></macro>
46</header>
47<header name="boost/tti/gen/namespace_gen.hpp">
48<macro name="BOOST_TTI_NAMESPACE"><purpose>Generates the name of the Boost TTI namespace. </purpose><description><para>returns = the generated name of the Boost TTI namespace. </para></description></macro>
49</header>
50<header name="boost/tti/has_class.hpp">
51<macro name="BOOST_TTI_TRAIT_HAS_CLASS" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner class/struct with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_CLASS is a macro which expands to a metafunction. The metafunction tests whether an inner class/struct with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner class/struct is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_CLASS(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
52 name = the name of the inner class/struct.</para><para>BOOST_TTI_TRAIT_HAS_CLASS generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
53struct trait
54  {
55  static const value = unspecified;
56  typedef mpl::bool_&lt;true-or-false&gt; type;
57  };
58
59The metafunction types and return:
60
61  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
62                   The enclosing type can be a class, struct, or union.
63
64  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
65                     If specified it is an MPL lambda expression which is invoked
66                     with the inner class/struct found and must return a constant boolean
67                     value.
68
69  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
70
71            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' class/struct
72            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
73
74            If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' class/struct exists
75            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
76            by BOOST_TTI_TP_U, invoked by passing the actual inner class/struct of 'name', returns
77            a 'value' of true; otherwise 'value' is false.
78
79            The action taken with BOOST_TTI_TP_U occurs only when the 'name' class/struct exists
80            within the enclosing type BOOST_TTI_TP_T.
81</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_TRAIT_HAS_CLASS(LookFor,MyType) generates the metafunction "LookFor" in the current scope
82to look for an inner class/struct called MyType.
83
84LookFor&lt;EnclosingType&gt;::value is true if MyType is an inner class/struct of EnclosingType, otherwise false.
85
86LookFor&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner class/struct of EnclosingType
87  and invoking ALambdaExpression with the inner class/struct returns a value of true, otherwise false.
88
89A popular use of the optional MPL lambda expression is to check whether the class/struct found is the same
90as another type, when the class/struct found is a typedef. In that case our example would be:
91
92LookFor&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner class/struct
93  of EnclosingType and is the same type as SomeOtherType.
94</programlisting> </para></description></macro>
95<macro name="BOOST_TTI_HAS_CLASS" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner class/struct with a particular name exists. </purpose><description><para>BOOST_TTI_HAS_CLASS is a macro which expands to a metafunction. The metafunction tests whether an inner class/struct with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner class/struct is true or not. The macro takes the form of BOOST_TTI_HAS_CLASS(name) where</para><para>name = the name of the inner class/struct.</para><para>BOOST_TTI_HAS_CLASS generates a metafunction called "has_class_'name'" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
96struct has_class_'name'
97  {
98  static const value = unspecified;
99  typedef mpl::bool_&lt;true-or-false&gt; type;
100  };
101
102The metafunction types and return:
103
104  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
105                   The enclosing type can be a class, struct, or union.
106
107  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
108                     If specified it is an MPL lambda expression which is invoked
109                     with the inner class/struct found and must return a constant boolean
110                     value.
111
112  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
113
114            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' class/struct
115            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
116
117            If BOOST_TTI_TP_U is specified, then 'value' is true if the 'name' class/struct exists
118            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
119            by BOOST_TTI_TP_U, invoked by passing the actual inner class/struct of 'name', returns
120            a 'value' of true; otherwise 'value' is false.
121
122            The action taken with BOOST_TTI_TP_U occurs only when the 'name' class/struct exists
123            within the enclosing type BOOST_TTI_TP_T.
124</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_HAS_CLASS(MyType) generates the metafunction "has_class_MyType" in the current scope
125to look for an inner class/struct called MyType.
126
127has_class_MyType&lt;EnclosingType&gt;::value is true if MyType is an inner class/struct of EnclosingType, otherwise false.
128
129has_class_MyType&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner class/struct of EnclosingType
130  and invoking ALambdaExpression with the inner class/struct returns a value of true, otherwise false.
131
132A popular use of the optional MPL lambda expression is to check whether the class/struct found is the same
133as another type, when the class/struct found is a typedef. In that case our example would be:
134
135has_class_MyType&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner class/struct
136  of EnclosingType and is the same type as SomeOtherType.
137</programlisting> </para></description></macro>
138</header>
139<header name="boost/tti/has_data.hpp">
140<macro name="BOOST_TTI_TRAIT_HAS_DATA" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether member data or static member data with a particular name and type exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_DATA is a macro which expands to a metafunction. The metafunction tests whether member data or static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_DATA(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
141 name = the name of the inner data.</para><para>BOOST_TTI_TRAIT_HAS_DATA generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE&gt;
142struct trait
143  {
144  static const value = unspecified;
145  typedef mpl::bool_&lt;true-or-false&gt; type;
146  };
147
148The metafunction types and return:
149
150  BOOST_TTI_TP_T    = the enclosing type in which to look for our 'name'
151                      The enclosing type can be a class, struct, or union.
152                      If the type is a union, static member data can only
153                      be found if the C++11 unrestricted union is implemented
154                      by the compiler being used, since prior to C++11 a union
155                      could not have static data members.
156
157  BOOST_TTI_TP_TYPE = The type of the member data or static member.
158
159  returns  = 'value' is true if the 'name' exists, with the correct data type,
160             otherwise 'value' is false.
161</programlisting> </para></description></macro>
162<macro name="BOOST_TTI_HAS_DATA" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether member data or static member data with a particular name and type exists. </purpose><description><para>BOOST_TTI_HAS_DATA is a macro which expands to a metafunction. The metafunction tests whether member data or static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_HAS_DATA(name) where</para><para>name = the name of the inner data.</para><para>BOOST_TTI_HAS_DATA generates a metafunction called "has_data_name" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE&gt;
163struct has_data_'name'
164  {
165  static const value = unspecified;
166  typedef mpl::bool_&lt;true-or-false&gt; type;
167  };
168
169The metafunction types and return:
170
171  BOOST_TTI_TP_T    = the enclosing type in which to look for our 'name'
172                      The enclosing type can be a class, struct, or union.
173                      If the type is a union, static member data can only
174                      be found if the C++11 unrestricted union is implemented
175                      by the compiler being used, since prior to C++11 a union
176                      could not have static data members.
177
178  BOOST_TTI_TP_TYPE = The type of the member data or static member.
179
180  returns  = 'value' is true if the 'name' exists, with the correct data type,
181             otherwise 'value' is false.
182</programlisting> </para></description></macro>
183</header>
184<header name="boost/tti/has_enum.hpp">
185<macro name="BOOST_TTI_TRAIT_HAS_ENUM" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner enum with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_ENUM is a macro which expands to a metafunction. The metafunction tests whether an inner enum with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner enum is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_ENUM(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
186 name = the name of the inner enum. The name can be that of an enum or, in C++11 on up, an enum class.</para><para>BOOST_TTI_TRAIT_HAS_ENUM generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
187struct trait
188  {
189  static const value = unspecified;
190  typedef mpl::bool_&lt;true-or-false&gt; type;
191  };
192
193The metafunction types and return:
194
195  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
196                   The enclosing type can be a class, struct, or union.
197
198  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
199                     If specified it is an MPL lambda expression which is invoked
200                     with the inner enum found and must return a constant boolean
201                     value.
202
203  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
204
205            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' enum
206            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
207
208            If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' enum exists
209            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
210            by BOOST_TTI_TP_U, invoked by passing the actual inner enum of 'name', returns
211            a 'value' of true; otherwise 'value' is false.
212
213            The action taken with BOOST_TTI_TP_U occurs only when the 'name' enum exists
214            within the enclosing type BOOST_TTI_TP_T.
215</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_TRAIT_HAS_ENUM(LookFor,MyType) generates the metafunction LookFor in the current scope
216to look for an inner enum called MyType.
217
218LookFor&lt;EnclosingType&gt;::value is true if MyType is an inner enum of EnclosingType, otherwise false.
219
220LookFor&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner enum of EnclosingType
221  and invoking ALambdaExpression with the inner enum returns a value of true, otherwise false.
222
223A popular use of the optional MPL lambda expression is to check whether the enum found is the same
224as another type, when the enum found is a typedef. In that case our example would be:
225
226LookFor&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner enum
227  of EnclosingType and is the same type as SomeOtherType.
228</programlisting> </para></description></macro>
229<macro name="BOOST_TTI_HAS_ENUM" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner enum with a particular name exists. </purpose><description><para>BOOST_TTI_HAS_ENUM is a macro which expands to a metafunction. The metafunction tests whether an inner enum with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner enum is true or not. The macro takes the form of BOOST_TTI_HAS_ENUM(name) where</para><para>name = the name of the inner enum. The name can be that of an enum or, in C++11 on up, an enum class.</para><para>BOOST_TTI_HAS_ENUM generates a metafunction called "has_enum_'name'" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
230struct has_enum_'name'
231  {
232  static const value = unspecified;
233  typedef mpl::bool_&lt;true-or-false&gt; type;
234  };
235
236The metafunction types and return:
237
238  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
239                   The enclosing type can be a class, struct, or union.
240
241  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
242                     If specified it is an MPL lambda expression which is invoked
243                     with the inner enum found and must return a constant boolean
244                     value.
245
246  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
247
248            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' enum
249            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
250
251            If BOOST_TTI_TP_U is specified, then 'value' is true if the 'name' enum exists
252            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
253            by BOOST_TTI_TP_U, invoked by passing the actual inner enum of 'name', returns
254            a 'value' of true; otherwise 'value' is false.
255
256            The action taken with BOOST_TTI_TP_U occurs only when the 'name' enum exists
257            within the enclosing type BOOST_TTI_TP_T.
258</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_HAS_ENUM(MyType) generates the metafunction has_enum_MyType in the current scope
259to look for an inner enum called MyType.
260
261has_enum_MyType&lt;EnclosingType&gt;::value is true if MyType is an inner enum of EnclosingType, otherwise false.
262
263has_class_MyType&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner enum of EnclosingType
264  and invoking ALambdaExpression with the inner enum returns a value of true, otherwise false.
265
266A popular use of the optional MPL lambda expression is to check whether the enum found is the same
267as another type, when the enum found is a typedef. In that case our example would be:
268
269has_enum_MyType&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner enum
270  of EnclosingType and is the same type as SomeOtherType.
271</programlisting> </para></description></macro>
272</header>
273<header name="boost/tti/has_function.hpp">
274<macro name="BOOST_TTI_TRAIT_HAS_FUNCTION" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a member function or a static member function with a particular name and signature exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function or a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_FUNCTION(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
275 name = the name of the inner member.</para><para>BOOST_TTI_TRAIT_HAS_FUNCTION generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG&gt;
276struct trait
277  {
278  static const value = unspecified;
279  typedef mpl::bool_&lt;true-or-false&gt; type;
280  };
281
282The metafunction types and return:
283
284  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
285                     The enclosing type can be a class, struct, or union.
286
287  BOOST_TTI_TP_R   = the return type of the function
288
289  BOOST_TTI_TP_FS  = (optional) the parameters of the function as a boost::mpl forward sequence
290            if function parameters are not empty.
291
292  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function
293            if the need for a tag exists.
294
295  returns = 'value' is true if the 'name' exists,
296            with the appropriate static member function type,
297            otherwise 'value' is false.
298</programlisting> </para></description></macro>
299<macro name="BOOST_TTI_HAS_FUNCTION" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a member function or a static member function with a particular name and signature exists. </purpose><description><para>BOOST_TTI_HAS_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function or a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_HAS_FUNCTION(name) where</para><para>name = the name of the inner member.</para><para>BOOST_TTI_HAS_FUNCTION generates a metafunction called "has_function_name" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG&gt;
300struct has_function_'name'
301  {
302  static const value = unspecified;
303  typedef mpl::bool_&lt;true-or-false&gt; type;
304  };
305
306The metafunction types and return:
307
308  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
309                     The enclosing type can be a class, struct, or union.
310
311  BOOST_TTI_TP_R   = the return type of the function
312
313  BOOST_TTI_TP_FS  = (optional) the parameters of the function as a boost::mpl forward sequence
314            if function parameters are not empty.
315
316  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function
317            if the need for a tag exists.
318
319  returns = 'value' is true if the 'name' exists,
320            with the appropriate function type,
321            otherwise 'value' is false.
322</programlisting> </para></description></macro>
323</header>
324<header name="boost/tti/has_function_template.hpp">
325<macro name="BOOST_TTI_TRAIT_HAS_FUNCTION_TEMPLATE" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner member function template or static member function template with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template or static member function template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_FUNCTION_TEMPLATE(trait,name,...) where</para><para>trait = the name of the metafunction <sbr/>
326 name = inner member function template or static member function template name <sbr/>
327 ... = variadic parameters.</para><para>The variadic parameter(s) are either:</para><para>A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.</para><para>or</para><para>A single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.</para><para>BOOST_TTI_TRAIT_HAS_FUNCTION_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG&gt;
328struct trait
329  {
330  static const value = unspecified;
331  typedef mpl::bool_&lt;true-or-false&gt; type;
332  };
333
334The metafunction types and return:
335
336  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
337                     The enclosing type can be a class, struct, or union.
338
339  BOOST_TTI_TP_R   = the return type of the function template
340                     in a single instantiation of the function template
341
342  BOOST_TTI_TP_FS  = (optional) the parameters of the function template as a boost::mpl forward sequence
343                     if the function template parameters are not empty. These parameters are a single
344                     instantiation of the function template.
345
346  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function template
347                     if a tag is needed.
348
349  returns = 'value' is true if the 'name' exists,
350            with the appropriate member function template or static member function template type,
351            otherwise 'value' is false.
352</programlisting> </para></description></macro>
353<macro name="BOOST_TTI_HAS_FUNCTION_TEMPLATE" kind="functionlike"><macro-parameter name="name"/><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner member function template or static member function template with a particular name exists. </purpose><description><para>BOOST_TTI__HAS_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template or static member function template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_FUNCTION_TEMPLATE(name,...) where</para><para>name = inner member function template or static member function template name <sbr/>
354 ... = variadic parameters.</para><para>The variadic parameter(s) are either:</para><para>A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.</para><para>or</para><para>A single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.</para><para>BOOST_TTI_HAS_FUNCTION_TEMPLATE generates a metafunction called "has_function_template_'name'" where 'name' is the first macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG&gt;
355struct has_function_template_'name'
356  {
357  static const value = unspecified;
358  typedef mpl::bool_&lt;true-or-false&gt; type;
359  };
360
361The metafunction types and return:
362
363  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
364                     The enclosing type can be a class, struct, or union.
365
366  BOOST_TTI_TP_R   = the return type of the function template
367                     in a single instantiation of the function template
368
369  BOOST_TTI_TP_FS  = (optional) the parameters of the function template as a boost::mpl forward sequence
370                     if the function template parameters are not empty. These parameters are a single
371                     instantiation of the function template.
372
373  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function template
374                     if a tag is needed.
375
376  returns = 'value' is true if the 'name' exists,
377            with the appropriate member function template or static member function template type,
378            otherwise 'value' is false.
379</programlisting> </para></description></macro>
380</header>
381<header name="boost/tti/has_member_data.hpp">
382<macro name="BOOST_TTI_TRAIT_HAS_MEMBER_DATA" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether member data with a particular name and type exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether member data with a particular name and type exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_MEMBER_DATA(trait,name) where</para><para>trait = the name of the metafunction. <sbr/>
383 name = the name of the inner member data.</para><para>BOOST_TTI_TRAIT_HAS_MEMBER_DATA generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_ET,class BOOST_TTI_TP_TYPE&gt;
384struct trait
385  {
386  static const value = unspecified;
387  typedef mpl::bool_&lt;true-or-false&gt; type;
388  };
389
390The metafunction types and return:
391
392  BOOST_TTI_TP_ET   = the enclosing type in which to look for our 'name'
393                      The enclosing type can be a class, struct, or union.
394                                           OR
395                      The type of the member data in the form of a pointer
396                      to member data.
397
398  BOOST_TTI_TP_TYPE = (optional) The type of the member data if the first
399                      parameter is the enclosing type.
400
401  returns  = 'value' is true if the 'name' exists, with the correct data type,
402             otherwise 'value' is false.
403</programlisting> </para></description></macro>
404<macro name="BOOST_TTI_HAS_MEMBER_DATA" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a member data with a particular name and type exists. </purpose><description><para>BOOST_TTI_HAS_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether member data with a particular name and type exists. The macro takes the form of BOOST_TTI_HAS_MEMBER_DATA(name) where</para><para>name = the name of the inner member.</para><para>BOOST_TTI_HAS_MEMBER_DATA generates a metafunction called "has_member_data_name" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_ET,class BOOST_TTI_TP_TYPE&gt;
405struct has_member_data_'name'
406  {
407  static const value = unspecified;
408  typedef mpl::bool_&lt;true-or-false&gt; type;
409  };
410
411The metafunction types and return:
412
413  BOOST_TTI_TP_ET   = the enclosing type in which to look for our 'name'.
414                      The enclosing type can be a class, struct, or union.
415                                           OR
416                      The type of the member data in the form of a pointer
417                      to member data.
418
419  BOOST_TTI_TP_TYPE = (optional) The type of the member data if the first
420                      parameter is the enclosing type.
421
422  returns  = 'value' is true if the 'name' exists, with the correct data type,
423             otherwise 'value' is false.
424</programlisting> </para></description></macro>
425</header>
426<header name="boost/tti/has_member_function.hpp">
427<macro name="BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a member function with a particular name and signature exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
428 name = the name of the inner member.</para><para>BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG&gt;
429struct trait
430  {
431  static const value = unspecified;
432  typedef mpl::bool_&lt;true-or-false&gt; type;
433  };
434
435The metafunction types and return:
436
437  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
438                     The enclosing type can be a class, struct, or union.
439                              OR
440                     a pointer to member function as a single type.
441
442  BOOST_TTI_TP_R   = (optional) the return type of the member function
443            if the first parameter is the enclosing type.
444
445  BOOST_TTI_TP_FS  = (optional) the parameters of the member function as a boost::mpl forward sequence
446            if the first parameter is the enclosing type and the member function parameters
447            are not empty.
448
449  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function
450            if the first parameter is the enclosing type and a tag is needed.
451
452  returns = 'value' is true if the 'name' exists,
453            with the appropriate member function type,
454            otherwise 'value' is false.
455</programlisting> </para></description></macro>
456<macro name="BOOST_TTI_HAS_MEMBER_FUNCTION" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a member function with a particular name and signature exists. </purpose><description><para>BOOST_TTI_HAS_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_HAS_MEMBER_FUNCTION(name) where</para><para>name = the name of the inner member.</para><para>BOOST_TTI_HAS_MEMBER_FUNCTION generates a metafunction called "has_member_function_name" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG&gt;
457struct has_member_function_'name'
458  {
459  static const value = unspecified;
460  typedef mpl::bool_&lt;true-or-false&gt; type;
461  };
462
463The metafunction types and return:
464
465  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
466                     The enclosing type can be a class, struct, or union.
467                              OR
468                     a pointer to member function as a single type.
469
470  BOOST_TTI_TP_R   = (optional) the return type of the member function
471            if the first parameter is the enclosing type.
472
473  BOOST_TTI_TP_FS  = (optional) the parameters of the member function as a boost::mpl forward sequence
474            if the first parameter is the enclosing type and the member function parameters
475            are not empty.
476
477  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function
478            if the first parameter is the enclosing type and a tag is needed.
479
480  returns = 'value' is true if the 'name' exists,
481            with the appropriate member function type,
482            otherwise 'value' is false.
483</programlisting> </para></description></macro>
484</header>
485<header name="boost/tti/has_member_function_template.hpp">
486<macro name="BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION_TEMPLATE" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner member function template with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION_TEMPLATE(trait,name,...) where</para><para>trait = the name of the metafunction <sbr/>
487 name = inner member function template name <sbr/>
488 ... = variadic parameters.</para><para>The variadic parameter(s) are either:</para><para>A sequence of valid instantiations for the member function template parameters ie. 'int,long,double' etc.</para><para>or</para><para>A single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.</para><para>BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG&gt;
489struct trait
490  {
491  static const value = unspecified;
492  typedef mpl::bool_&lt;true-or-false&gt; type;
493  };
494
495The metafunction types and return:
496
497  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
498                     The enclosing type can be a class, struct, or union.
499                              OR
500                     a pointer to member function as a single type
501                     which encapsulates a single instantiation of
502                     the member function template.
503
504  BOOST_TTI_TP_R   = (optional) the return type of the member function template
505            in a single instantiation of the member function template
506            if the first parameter is the enclosing type.
507
508  BOOST_TTI_TP_FS  = (optional) the parameters of the member function template as a boost::mpl forward sequence
509            if the first parameter is the enclosing type and the member function template parameters
510            are not empty. These parameters are a single instantiation of the member function template.
511
512  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function template
513            if the first parameter is the enclosing type and a tag is needed.
514
515  returns = 'value' is true if the 'name' exists,
516            with the appropriate member function template type,
517            otherwise 'value' is false.
518</programlisting> </para></description></macro>
519<macro name="BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE" kind="functionlike"><macro-parameter name="name"/><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner member function template with a particular name exists. </purpose><description><para>BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE(name,...) where</para><para>name = inner member function template name <sbr/>
520 ... = variadic parameters.</para><para>The variadic parameter(s) are either:</para><para>A sequence of valid instantiations for the member function template parameters ie. 'int,long,double' etc.</para><para>or</para><para>A single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.</para><para>BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "has_member_function_template_'name'" where 'name' is the first macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG&gt;
521struct has_member_function_template_'name'
522  {
523  static const value = unspecified;
524  typedef mpl::bool_&lt;true-or-false&gt; type;
525  };
526
527The metafunction types and return:
528
529  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
530                     The enclosing type can be a class, struct, or union.
531                              OR
532                     a pointer to member function as a single type
533                     which encapsulates a single instantiation of
534                     the member function template.
535
536  BOOST_TTI_TP_R   = (optional) the return type of the member function template
537            in a single instantiation of the member function template
538            if the first parameter is the enclosing type.
539
540  BOOST_TTI_TP_FS  = (optional) the parameters of the member function template as a boost::mpl forward sequence
541            if the first parameter is the enclosing type and the member function template parameters
542            are not empty. These parameters are a single instantiation of the member function template.
543
544  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function template
545            if the first parameter is the enclosing type and a tag is needed.
546
547  returns = 'value' is true if the 'name' exists,
548            with the appropriate member function template type,
549            otherwise 'value' is false.
550</programlisting> </para></description></macro>
551</header>
552<header name="boost/tti/has_static_member_data.hpp">
553<macro name="BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a static member data with a particular name and type exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
554 name = the name of the inner member.</para><para>BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE&gt;
555struct trait
556  {
557  static const value = unspecified;
558  typedef mpl::bool_&lt;true-or-false&gt; type;
559  };
560
561The metafunction types and return:
562
563  BOOST_TTI_TP_T    = the enclosing type.
564                      The enclosing type can be a class, struct, or union.
565                      If the type is a union, static member data can only
566                      be found if the C++11 unrestricted union is implemented
567                      by the compiler being used, since prior to C++11 a union
568                      could not have static data members.
569
570  BOOST_TTI_TP_TYPE = the type of the static member data.
571
572  returns = 'value' is true if the 'name' exists,
573            with the BOOST_TTI_TP_TYPE type,
574            within the enclosing BOOST_TTI_TP_T type,
575            otherwise 'value' is false.
576</programlisting> </para></description></macro>
577<macro name="BOOST_TTI_HAS_STATIC_MEMBER_DATA" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a static member data with a particular name and type exists. </purpose><description><para>BOOST_TTI_HAS_STATIC_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_HAS_STATIC_MEMBER_DATA(name) where</para><para>name = the name of the inner member.</para><para>BOOST_TTI_HAS_STATIC_MEMBER_DATA generates a metafunction called "has_static_member_data_name" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE&gt;
578struct has_static_member_data_'name'
579  {
580  static const value = unspecified;
581  typedef mpl::bool_&lt;true-or-false&gt; type;
582  };
583
584The metafunction types and return:
585
586  BOOST_TTI_TP_T    = the enclosing type.
587                      The enclosing type can be a class, struct, or union.
588                      If the type is a union, static member data can only
589                      be found if the C++11 unrestricted union is implemented
590                      by the compiler being used, since prior to C++11 a union
591                      could not have static data members.
592
593  BOOST_TTI_TP_TYPE = the type of the static member data.
594
595  returns = 'value' is true if the 'name' exists,
596            with the appropriate BOOST_TTI_TP_TYPE type,
597            within the enclosing BOOST_TTI_TP_T type,
598            otherwise 'value' is false.
599</programlisting> </para></description></macro>
600</header>
601<header name="boost/tti/has_static_member_function.hpp">
602<macro name="BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a static member function with a particular name and signature exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
603 name = the name of the inner member.</para><para>BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG&gt;
604struct trait
605  {
606  static const value = unspecified;
607  typedef mpl::bool_&lt;true-or-false&gt; type;
608  };
609
610The metafunction types and return:
611
612  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
613                     The enclosing type can be a class, struct, or union.
614
615  BOOST_TTI_TP_R   = the return type of the static member function
616                         OR
617            the signature of a function in the form of Return_Type ( Parameter_Types )
618
619  BOOST_TTI_TP_FS  = (optional) the parameters of the static member function as a boost::mpl forward sequence
620            if the second parameter is a return type and the function parameters exist.
621
622  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function
623            if the second parameter is a return type and the need for a tag exists.
624
625  returns = 'value' is true if the 'name' exists,
626            with the appropriate static member function type,
627            otherwise 'value' is false.
628</programlisting> </para></description></macro>
629<macro name="BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether a static member function with a particular name and signature exists. </purpose><description><para>BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION(name) where</para><para>name = the name of the inner member.</para><para>BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION generates a metafunction called "has_static_member_function_name" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG&gt;
630struct has_static_member_function_'name'
631  {
632  static const value = unspecified;
633  typedef mpl::bool_&lt;true-or-false&gt; type;
634  };
635
636The metafunction types and return:
637
638  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
639                     The enclosing type can be a class, struct, or union.
640
641  BOOST_TTI_TP_R   = the return type of the static member function
642                         OR
643            the signature of a function in the form of Return_Type ( Parameter_Types )
644
645  BOOST_TTI_TP_FS  = (optional) the parameters of the static member function as a boost::mpl forward sequence
646            if the second parameter is a return type and the function parameters exist.
647
648  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function
649            if the second parameter is a return type and the need for a tag exists.
650
651  returns = 'value' is true if the 'name' exists,
652            with the appropriate static member function type,
653            otherwise 'value' is false.
654</programlisting> </para></description></macro>
655</header>
656<header name="boost/tti/has_static_member_function_template.hpp">
657<macro name="BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner static member function template with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner static member function template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE(trait,name,...) where</para><para>trait = the name of the metafunction <sbr/>
658 name = inner static member function template name <sbr/>
659 ... = variadic parameters.</para><para>The variadic parameter(s) are either:</para><para>A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.</para><para>or</para><para>A single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.</para><para>BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG&gt;
660struct trait
661  {
662  static const value = unspecified;
663  typedef mpl::bool_&lt;true-or-false&gt; type;
664  };
665
666The metafunction types and return:
667
668  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
669                     The enclosing type can be a class, struct, or union.
670
671  BOOST_TTI_TP_R   = the return type of the static member function template
672                     in a single instantiation of the static member function template
673                              OR
674                     a pointer to function as a single type
675                     which encapsulates a single instantiation of
676                     the static member function template.
677
678  BOOST_TTI_TP_FS  = (optional) the parameters of the static member function template as a boost::mpl forward sequence
679                     if the second parameter is the enclosing type and the static member function template parameters
680                     are not empty. These parameters are a single instantiation of the static member function template.
681
682  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function template
683                     if the second parameter is the enclosing type and a tag is needed.
684
685  returns = 'value' is true if the 'name' exists,
686            with the appropriate static member function template type,
687            otherwise 'value' is false.
688</programlisting> </para></description></macro>
689<macro name="BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE" kind="functionlike"><macro-parameter name="name"/><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner static member function template with a particular name exists. </purpose><description><para>BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner static member function template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE(name,...) where</para><para>name = inner static member function template name <sbr/>
690 ... = variadic parameters.</para><para>The variadic parameter(s) are either:</para><para>A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.</para><para>or</para><para>A single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.</para><para>BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "has_static_member_function_template_'name'" where 'name' is the first macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG&gt;
691struct has_static_member_function_template_'name'
692  {
693  static const value = unspecified;
694  typedef mpl::bool_&lt;true-or-false&gt; type;
695  };
696
697The metafunction types and return:
698
699  BOOST_TTI_TP_T   = the enclosing type in which to look for our 'name'.
700                     The enclosing type can be a class, struct, or union.
701
702  BOOST_TTI_TP_R   = the return type of the static member function template
703                     in a single instantiation of the static member function template
704                              OR
705                     a pointer to function as a single type
706                     which encapsulates a single instantiation of
707                     the static member function template.
708
709  BOOST_TTI_TP_FS  = (optional) the parameters of the static member function template as a boost::mpl forward sequence
710                     if the second parameter is the enclosing type and the static member function template parameters
711                     are not empty. These parameters are a single instantiation of the static member function template.
712
713  BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function template
714                     if the second parameter is the enclosing type and a tag is needed.
715
716  returns = 'value' is true if the 'name' exists,
717            with the appropriate static member function template type,
718            otherwise 'value' is false.
719</programlisting> </para></description></macro>
720</header>
721<header name="boost/tti/has_template.hpp">
722<macro name="BOOST_TTI_TRAIT_HAS_TEMPLATE" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner class template with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner class template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_TEMPLATE(trait,...) where</para><para>trait = the name of the metafunction <sbr/>
723 ... = variadic parameters.</para><para>The first variadic parameter is the inner class template name.</para><para>Following variadic parameters are optional.</para><para>If no following variadic parameters exist, then the inner class template being introspected must be all template type parameters ( template parameters starting with <computeroutput>class</computeroutput> or <computeroutput>typename</computeroutput> ) and any number of template type parameters can occur.</para><para>If the second variadic parameter is BOOST_PP_NIL and no other variadic parameter is given, then just as in the previous case the inner class template being introspected must be all template type parameters ( template parameters starting with <computeroutput>class</computeroutput> or <computeroutput>typename</computeroutput> ) and any number of template type parameters can occur. This form is allowed in order to be consistent with using the non-variadic form of this macro.</para><para>If the second variadic parameter is a Boost preprocessor library array and no other variadic parameter is given, then the inner class template must have its template parameters matching the sequence in the tuple portion of the Boost PP array. This form is allowed in order to be consistent with using the non-variadic form of this macro.</para><para>Otherwise the inner class template must have its template parameters matching the sequence of the optional variadic parameters.</para><para>BOOST_TTI_TRAIT_HAS_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T&gt;
724struct trait
725  {
726  static const value = unspecified;
727  typedef mpl::bool_&lt;true-or-false&gt; type;
728  };
729
730The metafunction types and return:
731
732  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
733                   The enclosing type can be a class, struct, or union.
734
735  returns = 'value' is true if the 'name' template exists within the enclosing type,
736            otherwise 'value' is false.
737</programlisting></para><para>Examples:</para><para><programlisting language="c++">1) Search for an inner class template called 'MyTemplate', with all template type parameters,
738   nested within the class 'MyClass' using a metafunction name of 'MyMeta'.
739
740   BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate)
741
742   or
743
744   BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,BOOST_PP_NIL) // Non-variadic macro form
745
746   MyMeta&lt;MyClass&gt;::value
747
748   is a compile time boolean constant which is either 'true' or 'false'
749   if the nested template exists.
750
7512) Search for an inner class template called 'MyTemplate', with template parameters
752   of 'class T,int x,template&lt;class&gt; class U', nested within the class 'MyClass'
753   using a metafunction name of 'MyMeta'.
754
755   BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,class,int,template&lt;class&gt; class)
756
757   or
758
759   BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,(3,(class,int,template&lt;class&gt; class))) // Non-variadic macro form
760
761   MyMeta&lt;MyClass&gt;::value
762
763   is a compile time boolean constant which is either 'true' or 'false'
764   if the nested template exists.
765</programlisting> </para></description></macro>
766<macro name="BOOST_TTI_HAS_TEMPLATE" kind="functionlike"><macro-parameter name="..."/><purpose>A macro which expands to a metafunction which tests whether an inner class template with a particular name exists. </purpose><description><para>BOOST_TTI_HAS_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner class template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_TEMPLATE(...) where</para><para>... = variadic parameters.</para><para>The first variadic parameter is the inner class template name.</para><para>Following variadic parameters are optional.</para><para>If no following variadic parameters exist, then the inner class template being introspected must be all template type parameters ( template parameters starting with <computeroutput>class</computeroutput> or <computeroutput>typename</computeroutput> ) and any number of template type parameters can occur.</para><para>If the second variadic parameter is BOOST_PP_NIL and no other variadic parameter is given, then just as in the previous case the inner class template being introspected must be all template type parameters ( template parameters starting with <computeroutput>class</computeroutput> or <computeroutput>typename</computeroutput> ) and any number of template type parameters can occur. This form is allowed in order to be consistent with using the non-variadic form of this macro.</para><para>If the second variadic parameter is a Boost preprocessor library array and no other variadic parameter is given, then the inner class template must have its template parameters matching the sequence in the tuple portion of the Boost PP array. This form is allowed in order to be consistent with using the non-variadic form of this macro.</para><para>Otherwise the inner class template must have its template parameters matching the sequence of the optional variadic parameters.</para><para>BOOST_TTI_HAS_TEMPLATE generates a metafunction called "has_template_'name'" where 'name' is the first variadic parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T&gt;
767struct has_template_'name'
768  {
769  static const value = unspecified;
770  typedef mpl::bool_&lt;true-or-false&gt; type;
771  };
772
773The metafunction types and return:
774
775  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
776                   The enclosing type can be a class, struct, or union.
777
778  returns = 'value' is true if the 'name' template exists within the enclosing type,
779            otherwise 'value' is false.
780</programlisting></para><para>Examples:</para><para><programlisting language="c++">1) Search for an inner class template called 'MyTemplate', with all template type parameters,
781   nested within the class 'MyClass'.
782
783   BOOST_TTI_HAS_TEMPLATE(MyTemplate)
784
785   or
786
787   BOOST_TTI_HAS_TEMPLATE(MyTemplate,BOOST_PP_NIL) // Non-variadic macro form
788
789   has_template_MyTemplate&lt;MyClass&gt;::value
790
791   is a compile time boolean constant which is either 'true' or 'false'
792   if the nested template exists.
793
7942) Search for an inner class template called 'MyTemplate' with template parameters
795   of 'class T,int x,template&lt;class&gt; class U' nested within the class 'MyClass'.
796
797   BOOST_TTI_HAS_TEMPLATE(MyTemplate,class,int,template&lt;class&gt; class)
798
799   or
800
801   BOOST_TTI_HAS_TEMPLATE(MyTemplate,(3,(class,int,template&lt;class&gt; class))) // Non-variadic macro form
802
803   has_template_MyTemplate&lt;MyClass&gt;::value
804
805   is a compile time boolean constant which is either 'true' or 'false'
806   if the nested template exists.
807</programlisting> </para></description></macro>
808</header>
809<header name="boost/tti/has_type.hpp">
810<macro name="BOOST_TTI_TRAIT_HAS_TYPE" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner type with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner type is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_TYPE(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
811 name = the name of the inner type.</para><para>BOOST_TTI_TRAIT_HAS_TYPE generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
812struct trait
813  {
814  static const value = unspecified;
815  typedef mpl::bool_&lt;true-or-false&gt; type;
816  };
817
818The metafunction types and return:
819
820  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
821                   The enclosing type can be a class, struct, or union.
822
823  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
824                     If specified it is an MPL lambda expression which is invoked
825                     with the inner type found and must return a constant boolean
826                     value.
827
828  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
829
830            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' type
831            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
832
833            If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' type exists
834            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
835            by BOOST_TTI_TP_U, invoked by passing the actual inner type of 'name', returns
836            a 'value' of true; otherwise 'value' is false.
837
838            The action taken with BOOST_TTI_TP_U occurs only when the 'name' type exists
839            within the enclosing type BOOST_TTI_TP_T.
840</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_TRAIT_HAS_TYPE(LookFor,MyType) generates the metafunction LookFor in the current scope
841to look for an inner type called MyType.
842
843LookFor&lt;EnclosingType&gt;::value is true if MyType is an inner type of EnclosingType, otherwise false.
844
845LookFor&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner type of EnclosingType
846  and invoking ALambdaExpression with the inner type returns a value of true, otherwise false.
847
848A popular use of the optional MPL lambda expression is to check whether the type found is the same
849as another type, when the type found is a typedef. In that case our example would be:
850
851LookFor&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner type
852  of EnclosingType and is the same type as SomeOtherType.
853</programlisting> </para></description></macro>
854<macro name="BOOST_TTI_HAS_TYPE" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner type with a particular name exists. </purpose><description><para>BOOST_TTI_HAS_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner type is true or not. The macro takes the form of BOOST_TTI_HAS_TYPE(name) where</para><para>name = the name of the inner type.</para><para>BOOST_TTI_HAS_TYPE generates a metafunction called "has_type_'name'" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
855struct has_type_'name'
856  {
857  static const value = unspecified;
858  typedef mpl::bool_&lt;true-or-false&gt; type;
859  };
860
861The metafunction types and return:
862
863  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
864                   The enclosing type can be a class, struct, or union.
865
866  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
867                     If specified it is an MPL lambda expression which is invoked
868                     with the inner type found and must return a constant boolean
869                     value.
870
871  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
872
873            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' type
874            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
875
876            If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' type exists
877            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
878            by BOOST_TTI_TP_U, invoked by passing the actual inner type of 'name', returns
879            a 'value' of true; otherwise 'value' is false.
880
881            The action taken with BOOST_TTI_TP_U occurs only when the 'name' type exists
882            within the enclosing type BOOST_TTI_TP_T.
883</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_HAS_TYPE(MyType) generates the metafunction has_type_MyType in the current scope
884to look for an inner type called MyType.
885
886has_type_MyType&lt;EnclosingType&gt;::value is true if MyType is an inner type of EnclosingType, otherwise false.
887
888has_type_MyType&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner type of EnclosingType
889  and invoking ALambdaExpression with the inner type returns a value of true, otherwise false.
890
891A popular use of the optional MPL lambda expression is to check whether the type found is the same
892as another type, when the type found is a typedef. In that case our example would be:
893
894has_type_MyType&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner type
895  of EnclosingType and is the same type as SomeOtherType.
896</programlisting> </para></description></macro>
897</header>
898<header name="boost/tti/has_union.hpp">
899<macro name="BOOST_TTI_TRAIT_HAS_UNION" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner union with a particular name exists. </purpose><description><para>BOOST_TTI_TRAIT_HAS_UNION is a macro which expands to a metafunction. The metafunction tests whether an inner union with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner union is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_UNION(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
900 name = the name of the inner union.</para><para>BOOST_TTI_TRAIT_HAS_UNION generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
901struct trait
902  {
903  static const value = unspecified;
904  typedef mpl::bool_&lt;true-or-false&gt; type;
905  };
906
907The metafunction types and return:
908
909  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
910                   The enclosing type can be a class, struct, or union.
911
912  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
913                     If specified it is an MPL lambda expression which is invoked
914                     with the inner union found and must return a constant boolean
915                     value.
916
917  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
918
919            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' union
920            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
921
922            If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' union exists
923            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
924            by BOOST_TTI_TP_U, invoked by passing the actual inner union of 'name', returns
925            a 'value' of true; otherwise 'value' is false.
926
927            The action taken with BOOST_TTI_TP_U occurs only when the 'name' union exists
928            within the enclosing type BOOST_TTI_TP_T.
929</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_TRAIT_HAS_UNION(LookFor,MyType) generates the metafunction LookFor in the current scope
930to look for an inner union called MyType.
931
932LookFor&lt;EnclosingType&gt;::value is true if MyType is an inner union of EnclosingType, otherwise false.
933
934LookFor&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner union of EnclosingType
935  and invoking ALambdaExpression with the inner union returns a value of true, otherwise false.
936
937A popular use of the optional MPL lambda expression is to check whether the union found is the same
938as another type, when the union found is a typedef. In that case our example would be:
939
940LookFor&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner union
941  of EnclosingType and is the same type as SomeOtherType.
942</programlisting> </para></description></macro>
943<macro name="BOOST_TTI_HAS_UNION" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction which tests whether an inner union with a particular name exists. </purpose><description><para>BOOST_TTI_HAS_UNION is a macro which expands to a metafunction. The metafunction tests whether an inner union with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner union is true or not. The macro takes the form of BOOST_TTI_HAS_UNION(name) where</para><para>name = the name of the inner union.</para><para>BOOST_TTI_HAS_UNION generates a metafunction called "has_union_'name'" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_U&gt;
944struct has_union_'name'
945  {
946  static const value = unspecified;
947  typedef mpl::bool_&lt;true-or-false&gt; type;
948  };
949
950The metafunction types and return:
951
952  BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'.
953
954  BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type.
955                     If specified it is an MPL lambda expression which is invoked
956                     with the inner union found and must return a constant boolean
957                     value.
958
959  returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified.
960
961            If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' union
962            exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false.
963
964            If BOOST_TTI_TP_U is specified, then 'value' is true if the 'name' union exists
965            within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified
966            by BOOST_TTI_TP_U, invoked by passing the actual inner union of 'name', returns
967            a 'value' of true; otherwise 'value' is false.
968
969            The action taken with BOOST_TTI_TP_U occurs only when the 'name' union exists
970            within the enclosing type BOOST_TTI_TP_T.
971</programlisting></para><para>Example usage:</para><para><programlisting language="c++">BOOST_TTI_HAS_UNION(MyType) generates the metafunction has_union_MyType in the current scope
972to look for an inner union called MyType.
973
974has_union_MyType&lt;EnclosingType&gt;::value is true if MyType is an inner union of EnclosingType, otherwise false.
975
976has_class_MyType&lt;EnclosingType,ALambdaExpression&gt;::value is true if MyType is an inner union of EnclosingType
977  and invoking ALambdaExpression with the inner union returns a value of true, otherwise false.
978
979A popular use of the optional MPL lambda expression is to check whether the union found is the same
980as another type, when the union found is a typedef. In that case our example would be:
981
982has_union_MyType&lt;EnclosingType,boost::is_same&lt;_,SomeOtherType&gt; &gt;::value is true if MyType is an inner union
983  of EnclosingType and is the same type as SomeOtherType.
984</programlisting> </para></description></macro>
985</header>
986<header name="boost/tti/member_type.hpp">
987<namespace name="boost">
988<namespace name="tti">
989<struct name="valid_member_metafunction"><template>
990      <template-type-parameter name="BOOST_TTI_METAFUNCTION"/>
991    </template><inherit access="public">boost::mpl::not_&lt; boost::is_same&lt; BOOST_TTI_METAFUNCTION::type, BOOST_TTI_METAFUNCTION::boost_tti_marker_type &gt; &gt;</inherit><purpose>A metafunction which checks whether the invoked macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ) hold a valid type. </purpose><description><para>The metafunction '<classname alt="boost::tti::valid_member_metafunction">valid_member_metafunction</classname>', which is in the boost::tti namespace, takes the form of:</para><para><programlisting language="c++">template&lt;class BOOST_TTI_METAFUNCTION&gt;
992struct valid_member_metafunction
993  {
994  static const value = unspecified;
995  typedef mpl::bool_&lt;true-or-false&gt; type;
996  };
997
998The metafunction types and return:
999
1000  BOOST_TTI_METAFUNCTION = The invoked macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ).
1001
1002  returns          = 'value' is true if the nested type of the invoked metafunction is valid, otherwise 'value' is false.
1003                     A valid type means that the invoked metafunction's inner 'type' is not the marker type.
1004</programlisting> </para></description></struct><struct name="valid_member_type"><template>
1005      <template-type-parameter name="BOOST_TTI_TP_T"/>
1006      <template-type-parameter name="BOOST_TTI_TP_MARKER_TYPE"><default>BOOST_TTI_NAMESPACE::detail::notype</default></template-type-parameter>
1007    </template><inherit access="public">boost::mpl::not_&lt; boost::is_same&lt; BOOST_TTI_TP_T, BOOST_TTI_TP_MARKER_TYPE &gt; &gt;</inherit><purpose>A metafunction which checks whether the member 'type' returned from invoking the macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ) is a valid type. </purpose><description><para>The metafunction '<classname alt="boost::tti::valid_member_type">valid_member_type</classname>', which is in the boost::tti namespace, takes the form of:</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype&gt;
1008struct valid_member_type
1009  {
1010  static const value = unspecified;
1011  typedef mpl::bool_&lt;true-or-false&gt; type;
1012  };
1013
1014The metafunction types and return:
1015
1016  BOOST_TTI_TP_T           = returned inner 'type' from invoking the macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ).
1017
1018  BOOST_TTI_TP_MARKER_TYPE = (optional) a type to use as the marker type.
1019                             defaults to the internal boost::tti::detail::notype.
1020
1021  returns                  = 'value' is true if the type is valid, otherwise 'value' is false.
1022                             A valid type means that the returned inner 'type' is not the marker type.
1023</programlisting> </para></description></struct></namespace>
1024</namespace>
1025<macro name="BOOST_TTI_TRAIT_MEMBER_TYPE" kind="functionlike"><macro-parameter name="trait"/><macro-parameter name="name"/><purpose>A macro expands to a metafunction whose typedef 'type' is either the named type or a marker type. </purpose><description><para>BOOST_TTI_TRAIT_MEMBER_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists by returning the inner type or a marker type. The macro takes the form of BOOST_TTI_TRAIT_MEMBER_TYPE(trait,name) where</para><para>trait = the name of the metafunction <sbr/>
1026 name = the name of the inner type.</para><para>BOOST_TTI_TRAIT_MEMBER_TYPE generates a metafunction called "trait" where 'trait' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype&gt;
1027struct trait
1028  {
1029  typedef unspecified type;
1030  typedef BOOST_TTI_TP_MARKER_TYPE boost_tti_marker_type;
1031  };
1032
1033The metafunction types and return:
1034
1035  BOOST_TTI_TP_T           = the enclosing type.
1036                             The enclosing type can be a class, struct, or union.
1037
1038  BOOST_TTI_TP_MARKER_TYPE = (optional) a type to use as the marker type.
1039                             defaults to the internal boost::tti::detail::notype.
1040
1041  returns                  = 'type' is the inner type of 'name' if the inner type exists
1042                             within the enclosing type, else 'type' is a marker type.
1043                             if the end-user does not specify a marker type then
1044                             an internal boost::tti::detail::notype marker type,
1045                             which is empty, is used.
1046
1047  The metafunction also encapsulates the type of the marker type as
1048  a nested 'boost_tti_marker_type'.
1049</programlisting></para><para>The purpose of this macro is to encapsulate the 'name' type as the typedef 'type' of a metafunction, but only if it exists within the enclosing type. This allows for an evaluation of inner type existence, without generating a compiler error, which can be used by other metafunctions in this library. </para></description></macro>
1050<macro name="BOOST_TTI_MEMBER_TYPE" kind="functionlike"><macro-parameter name="name"/><purpose>A macro which expands to a metafunction whose typedef 'type' is either the named type or a marker type. </purpose><description><para>BOOST_TTI_MEMBER_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists by returning the inner type or a marker type. The macro takes the form of BOOST_TTI_MEMBER_TYPE(name) where</para><para>name = the name of the inner type.</para><para>BOOST_TTI_MEMBER_TYPE generates a metafunction called "member_type_name" where 'name' is the macro parameter.</para><para><programlisting language="c++">template&lt;class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype&gt;
1051struct member_type_'name'
1052  {
1053  typedef unspecified type;
1054  typedef BOOST_TTI_TP_MARKER_TYPE boost_tti_marker_type;
1055  };
1056
1057The metafunction types and return:
1058
1059  BOOST_TTI_TP_T           = the enclosing type.
1060                             The enclosing type can be a class, struct, or union.
1061
1062  BOOST_TTI_TP_MARKER_TYPE = (optional) a type to use as the marker type.
1063                             defaults to the internal boost::tti::detail::notype.
1064
1065  returns                  = 'type' is the inner type of 'name' if the inner type exists
1066                             within the enclosing type, else 'type' is a marker type.
1067                             if the end-user does not specify a marker type then
1068                             an internal boost::tti::detail::notype marker type is used.
1069
1070  The metafunction also encapsulates the type of the marker type as
1071  a nested 'boost_tti_marker_type'.
1072</programlisting></para><para>The purpose of this macro is to encapsulate the 'name' type as the typedef 'type' of a metafunction, but only if it exists within the enclosing type. This allows for an evaluation of inner type existence, without generating a compiler error, which can be used by other metafunctions in this library. </para></description></macro>
1073</header>
1074</library-reference>