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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 53struct trait 54 { 55 static const value = unspecified; 56 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner class/struct of EnclosingType, otherwise false. 85 86LookFor<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 96struct has_class_'name' 97 { 98 static const value = unspecified; 99 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner class/struct of EnclosingType, otherwise false. 128 129has_class_MyType<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> 142struct trait 143 { 144 static const value = unspecified; 145 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> 163struct has_data_'name' 164 { 165 static const value = unspecified; 166 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 187struct trait 188 { 189 static const value = unspecified; 190 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner enum of EnclosingType, otherwise false. 219 220LookFor<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 230struct has_enum_'name' 231 { 232 static const value = unspecified; 233 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner enum of EnclosingType, otherwise false. 262 263has_class_MyType<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> 276struct trait 277 { 278 static const value = unspecified; 279 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> 300struct has_function_'name' 301 { 302 static const value = unspecified; 303 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> 328struct trait 329 { 330 static const value = unspecified; 331 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> 355struct has_function_template_'name' 356 { 357 static const value = unspecified; 358 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_ET,class BOOST_TTI_TP_TYPE> 384struct trait 385 { 386 static const value = unspecified; 387 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_ET,class BOOST_TTI_TP_TYPE> 405struct has_member_data_'name' 406 { 407 static const value = unspecified; 408 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> 429struct trait 430 { 431 static const value = unspecified; 432 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> 457struct has_member_function_'name' 458 { 459 static const value = unspecified; 460 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> 489struct trait 490 { 491 static const value = unspecified; 492 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> 521struct has_member_function_template_'name' 522 { 523 static const value = unspecified; 524 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> 555struct trait 556 { 557 static const value = unspecified; 558 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> 578struct has_static_member_data_'name' 579 { 580 static const value = unspecified; 581 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> 604struct trait 605 { 606 static const value = unspecified; 607 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> 630struct has_static_member_function_'name' 631 { 632 static const value = unspecified; 633 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> 660struct trait 661 { 662 static const value = unspecified; 663 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> 691struct has_static_member_function_template_'name' 692 { 693 static const value = unspecified; 694 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T> 724struct trait 725 { 726 static const value = unspecified; 727 typedef mpl::bool_<true-or-false> 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<MyClass>::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<class> 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<class> class) 756 757 or 758 759 BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,(3,(class,int,template<class> class))) // Non-variadic macro form 760 761 MyMeta<MyClass>::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<class BOOST_TTI_TP_T> 767struct has_template_'name' 768 { 769 static const value = unspecified; 770 typedef mpl::bool_<true-or-false> 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<MyClass>::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<class> class U' nested within the class 'MyClass'. 796 797 BOOST_TTI_HAS_TEMPLATE(MyTemplate,class,int,template<class> class) 798 799 or 800 801 BOOST_TTI_HAS_TEMPLATE(MyTemplate,(3,(class,int,template<class> class))) // Non-variadic macro form 802 803 has_template_MyTemplate<MyClass>::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 812struct trait 813 { 814 static const value = unspecified; 815 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner type of EnclosingType, otherwise false. 844 845LookFor<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 855struct has_type_'name' 856 { 857 static const value = unspecified; 858 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner type of EnclosingType, otherwise false. 887 888has_type_MyType<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 901struct trait 902 { 903 static const value = unspecified; 904 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner union of EnclosingType, otherwise false. 933 934LookFor<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> 944struct has_union_'name' 945 { 946 static const value = unspecified; 947 typedef mpl::bool_<true-or-false> 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<EnclosingType>::value is true if MyType is an inner union of EnclosingType, otherwise false. 975 976has_class_MyType<EnclosingType,ALambdaExpression>::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<EnclosingType,boost::is_same<_,SomeOtherType> >::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_< boost::is_same< BOOST_TTI_METAFUNCTION::type, BOOST_TTI_METAFUNCTION::boost_tti_marker_type > ></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<class BOOST_TTI_METAFUNCTION> 992struct valid_member_metafunction 993 { 994 static const value = unspecified; 995 typedef mpl::bool_<true-or-false> 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_< boost::is_same< BOOST_TTI_TP_T, BOOST_TTI_TP_MARKER_TYPE > ></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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype> 1008struct valid_member_type 1009 { 1010 static const value = unspecified; 1011 typedef mpl::bool_<true-or-false> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype> 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<class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype> 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>