3rdParty/boost/1.78.0/libs/mpl/doc/refmanual/has-xxx-template-named-def.html
| Prev Next | Back Along | Up Home | Full TOC | Front Page / Macros / Introspection / BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF |
#define[BOOST\_MPL\_HAS\_XXX\_TEMPLATE\_NAMED\_DEF](./has-xxx-template-named-def.html)(trait, name, default_) \_unspecified token sequence_\
/**/
Expands into the definition of a boolean Metafunction trait such that for any type x trait<x>::value == true if and only if x is a class type and has a nested template member x::template name with no more than BOOST_MPL_LIMIT_METAFUNCTION_ARITY parameters.
On deficient compilers not capable of performing the detection, trait<x>::value always returns a fallback value default_. A boolean configuration macro, BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE, is provided to signal or override the "deficient" status of a particular compiler. [Note: The fallback value can also be provided at the point of the metafunction invocation; see the Expression semantics section for details — end note]
#include <[boost/mpl/has\_xxx.hpp](../../../../boost/mpl/has_xxx.hpp)>
| Parameter | Requirement | Description |
|---|---|---|
| trait | A legal identifier token | A name of the metafunction to be generated. |
| name | A legal identifier token | A name of the member being detected. |
| default_ | An boolean constant | A fallback value for the deficient compilers. |
For any legal C++ identifiers trait and name, boolean constant expression c1, boolean Integral Constant c2, and arbitrary type x:
[BOOST\_MPL\_HAS\_XXX\_TEMPLATE\_NAMED\_DEF](./has-xxx-template-named-def.html)(trait, name, c1)
| Precondition: |
Appears at namespace scope.
| | Return type: |
None.
| | Semantics: |
Expands into an equivalent of the following class template definition
template<
typename X
, typename fallback = boost::mpl::[bool\_](./bool.html)<c1>
>
struct trait
{
//_unspecified_// ...
};
where trait is a boolean Metafunction with the following semantics:
typedef trait<x>::type r;
| Return type: | Integral Constant. | | Semantics: | If BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE is defined, r::value == c1; otherwise, r::value == true if and only if x is a class type that has a nested template member x::template name with no more than BOOST_MPL_LIMIT_METAFUNCTION_ARITY. |
typedef trait< x, c2 >::type r;
| Return type: |
| | Semantics: |
If BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE is defined, r::value == c2::value; otherwise, equivalent to
typedef trait<x>::type r;
|
|
[BOOST\_MPL\_HAS\_XXX\_TEMPLATE\_NAMED\_DEF](./has-xxx-template-named-def.html)(
has_xxx, xxx, false
)
struct test1 {};
struct test2 { void xxx(); };
struct test3 { int xxx; };
struct test4 { static int xxx(); };
struct test5 { typedef int xxx; };
struct test6 { struct xxx; };
struct test7 { typedef void (*xxx)(); };
struct test8 { typedef void (xxx)(); };
struct test9 { template< class T > struct xxx {}; };[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test1> ));[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test2> ));[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test3> ));[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test4> ));[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test5> ));[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test6> ));[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test7> ));[BOOST\_MPL\_ASSERT\_NOT](./assert-not.html)(( has_xxx<test8> ));
#if !defined([BOOST\_MPL\_CFG\_NO\_HAS\_XXX\_TEMPLATE](./cfg-no-has-xxx-template.html))[BOOST\_MPL\_ASSERT](./assert.html)(( has_xxx<test9> ));
#endif[BOOST\_MPL\_ASSERT](./assert.html)(( has_xxx<test9,[true\_](./bool.html)> ));
Macros, BOOST_MPL_HAS_XXX_TEMPLATE_DEF, BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE, BOOST_MPL_LIMIT_METAFUNCTION_ARITY
| Prev Next | Back Along | Up Home | Full TOC |
|