Quick Links: |
Provide meta-function versions of useful coding constructs. More...
Components | |
Component bslmf_addconst | |
Provide a meta-function for adding a top-level | |
Component bslmf_addcv | |
Provide a meta-function for adding top-level cv-qualifiers. | |
Component bslmf_addlvaluereference | |
Provide a compile-time type transformation to lvalue reference. | |
Component bslmf_addpointer | |
Provide meta-function to transform a type to pointer to that type. | |
Component bslmf_addreference | |
Provide a meta-function for adding "reference-ness" to a type. | |
Component bslmf_addrvaluereference | |
Provide a compile-time type transformation to rvalue reference. | |
Component bslmf_addvolatile | |
Provide a meta-function for adding a | |
Component bslmf_allocatorargt | |
Provide a tag type to precede allocator arguments. | |
Component bslmf_arraytopointer | |
Provide a meta-function to convert array types to pointer types. | |
Component bslmf_assert | |
Provide a compile-time assertion facility. | |
Component bslmf_conditional | |
Provide a compile-time conditional type selector. | |
Component bslmf_decay | |
Convert a type to the type used for pass-by-value. | |
Component bslmf_detectnestedtrait | |
Provide a facility for defining traits and detecting legacy traits. | |
Component bslmf_enableif | |
Provide a utility to set up SFINAE conditions in type deduction. | |
Component bslmf_forwardingreftype | |
Provide a meta-function for determining a forwarding type. | |
Component bslmf_forwardingtype | |
Provide a meta-function for determining an optimal forwarding type. | |
Component bslmf_functionpointertraits | |
Provide a meta-function for determining function pointer traits. | |
Component bslmf_functionpointertraits_cpp03: PRIVATE | |
Provide C++03 implementation for bslmf_functionpointertraits.h. | |
Component bslmf_haspointersemantics | |
Provide a type trait for pointer semantics. | |
Component bslmf_if: DEPRECATED | |
Provide a compile-time | |
Component bslmf_integersequence | |
Provide a template parameter pack of integers. | |
Component bslmf_integralconstant | |
Provide a mapping from integral constants to unique types. | |
Component bslmf_invokeresult | |
Determine the result type of an invocable expression. | |
Component bslmf_invokeresult_cpp03: PRIVATE | |
Provide C++03 implementation for bslmf_invokeresult.h. | |
Component bslmf_isaccessiblebaseof | |
Provide a compile-time check for derived classes. | |
Component bslmf_isarithmetic | |
Provide a compile-time check for determining arithmetic types. | |
Component bslmf_isarray | |
Provide a compile-time check for array types. | |
Component bslmf_isbitwiseequalitycomparable | |
Provide a type trait for bitwise equality. | |
Component bslmf_isbitwisemoveable | |
Provide a primitive type trait for bitwise moveable classes. | |
Component bslmf_isclass | |
Provide a compile-time check for determining class types. | |
Component bslmf_isconst | |
Provide a compile-time check for | |
Component bslmf_isconvertible | |
Provide a compile-time check for type conversion. | |
Component bslmf_isconvertibletoany | |
Provide a compile-time check for types convertible to any type. | |
Component bslmf_iscopyconstructible | |
Provide a meta-function to report if a type is copy constructible. | |
Component bslmf_isempty | |
Provide a compile-time check for detecting an empty class type. | |
Component bslmf_isenum | |
Provide compile-time check for determining enumerated types. | |
Component bslmf_isfloatingpoint | |
Provide a compile-time check for floating-point types. | |
Component bslmf_isfunction | |
Provide a compile-time check for determining function types. | |
Component bslmf_isfundamental | |
Provide a compile-time check for determining fundamental types. | |
Component bslmf_isintegral | |
Provide a compile-time check for integral types. | |
Component bslmf_islvaluereference | |
Provide a compile-time check for lvalue reference types. | |
Component bslmf_ismemberfunctionpointer | |
Provide a compile-time check for member function pointer types. | |
Component bslmf_ismemberobjectpointer | |
Provide a compile-time check for member object pointer types. | |
Component bslmf_ismemberpointer | |
Provide a compile-time check for non-static member pointer types. | |
Component bslmf_isnothrowmoveconstructible | |
Provide metafunction to identify no-throw move-constructible types. | |
Component bslmf_isnothrowswappable | |
Provide metafunction to identify nothrow swappable types. | |
Component bslmf_ispair | |
Provide a compile-time check for the bsl::pair type. | |
Component bslmf_ispointer | |
Provide a compile-time check for pointer types. | |
Component bslmf_ispolymorphic | |
Provide a compile-time check for determining polymorphic types. | |
Component bslmf_isreference | |
Provide a meta-function to test reference types. | |
Component bslmf_isreferencewrapper | |
Provide a trait to detect reference-wrapper specializations. | |
Component bslmf_isrvaluereference | |
Provide a compile-time check for rvalue reference types. | |
Component bslmf_issame | |
Provide a meta-function for testing if two types are the same. | |
Component bslmf_isswappable | |
Provide metafunction to identify swappable types. | |
Component bslmf_istransparentpredicate | |
Support detection of whether a predicate functor is transparent. | |
Component bslmf_istriviallycopyable | |
Provide a meta-function for determining trivially copyable types. | |
Component bslmf_istriviallydefaultconstructible | |
Provide a compile-time check for trivially default-constructible. | |
Component bslmf_isvoid | |
Provide a compile-time check for | |
Component bslmf_isvolatile | |
Provide a compile-time check for | |
Component bslmf_makeintegersequence | |
Provide a template parameter pack of integers. | |
Component bslmf_matchanytype | |
Provide a generic type to which any type can be converted. | |
Component bslmf_matcharithmetictype | |
Provide a class supporting "do-the-right-thing clause" dispatch. | |
Component bslmf_memberfunctionpointertraits | |
Provide meta-functions to detect member function pointer traits. | |
Component bslmf_memberpointertraits | |
Provide meta-function to detect pointer to member traits. | |
Component bslmf_metaint: DEPRECATED | |
Provide a meta-function to map integral constants to unique types. | |
Component bslmf_movableref | |
Provide a vocabulary type to enable move semantics. | |
Component bslmf_nestedtraitdeclaration | |
Provide a nested declaration to associate a class with a trait. | |
Component bslmf_nil | |
Provide a nil type. | |
Component bslmf_nthparameter | |
Metafunction to return the Nth type parameter in a parameter pack. | |
Component bslmf_nthparameter_cpp03: PRIVATE | |
Provide C++03 implementation for bslmf_nthparameter.h. | |
Component bslmf_removeconst | |
Provide a meta-function for removing top-level | |
Component bslmf_removecv | |
Provide a meta-function for removing top-level cv-qualifiers. | |
Component bslmf_removecvq | |
Provide a meta-function for removing | |
Component bslmf_removecvref | |
Provide a meta-func for removing reference-ness and cv-qualifiers. | |
Component bslmf_removeextent | |
Provide a metafunction to return an array type's element type. | |
Component bslmf_removepointer | |
Provide a meta-function to transform pointer type to referent type. | |
Component bslmf_removereference | |
Provide a meta-function for stripping reference-ness from types. | |
Component bslmf_removevolatile | |
Provide a meta-function for removing | |
Component bslmf_resulttype | |
Provide access to | |
Component bslmf_selecttrait | |
Provide clean compile-time dispatch based on multiple traits. | |
Component bslmf_switch | |
Provide a compile-time | |
Component bslmf_tag | |
Provide an integral-constant-to-type conversion. | |
Component bslmf_typeidentity | |
Provide a template metafunction that returns its argument. | |
Component bslmf_typelist | |
Provide a typelist component. | |
Component bslmf_usesallocator | |
Provide a meta-function to determine if a type uses an allocator. | |
Component bslmf_usesallocatorargt | |
Provide a metafunction for | |
Component bslmf_util | |
Provide low-level functions on | |
Component bslmf_voidtype | |
Provide a helper for implementing SFINAE-based metafunctions. |
bslmf
package provides meta-function equivalents of certain useful coding constructs. A meta-function is a template-based, compile-time construct that behaves like a (runtime) function in that it "evaluates" arguments and does something different based on the input it is passed (in the case of templates, the input it is instantiated with). bslmf
provides metafunctions to evaluate (at compile time) constructs such as the following: an if
-statement equivalent, whether a (template) argument is a fundamental type, whether an argument is an enum
type, whether two arguments have the same type, and more. enum
VALUE
, or in some cases a nested Type
, or both. For instance, in order to evaluate whether two types are the same, one could write a meta-function predicate (evaluating to 0 or 1) as follows: template <class U, class V> struct IsSame { // This 'struct' provides a meta function parameterized by two types 'U' // and 'V', that takes 'VALUE == 0' unless 'U' and 'V' are the same type, // in which case it takes 'VALUE == 1'. // PUBLIC TYPES enum { VALUE = 0 }; typedef bslmf_MetaInt<VALUE> Type; }; // SPECIALIZATIONS template <class T> struct IsSame<T, T> { // This specialization of the 'IsSame' meta function is parameterized by // a single type 'T' and is selected if the two parameters of 'IsSame', // 'U' and 'V', are both equal to 'T'. It takes 'VALUE == 1'. // PUBLIC TYPES enum { VALUE = 1 }; typedef bslmf_MetaInt<VALUE> Type; };
bslmf_MetaInt
nested type usually employed for function dispatching. See the bslmf_issame
component-level documentation for a more thorough usage example. VALUE
, but apply some type of transformation (e.g., removing top-level const
qualifiers, decaying array and function types to pointer types). Those usually have a nested Type
. bslmf
package currently has 88 components having 21 levels of physical dependency. The list below shows the hierarchical ordering of the components. The order of components within each level is not architecturally significant, just alphabetical. 21. bslmf_isnothrowswappable 20. bslmf_isswappable 19. bslmf_forwardingreftype bslmf_forwardingtype bslmf_invokeresult bslmf_util 18. bslmf_movableref 17. bslmf_isbitwisemoveable bslmf_iscopyconstructible bslmf_isnothrowmoveconstructible 16. bslmf_haspointersemantics bslmf_isbitwiseequalitycomparable bslmf_istriviallycopyable bslmf_istriviallydefaultconstructible bslmf_matcharithmetictype bslmf_usesallocatorargt 15. bslmf_detectnestedtrait bslmf_isenum 14. bslmf_isaccessiblebaseof bslmf_isconvertibletoany bslmf_nestedtraitdeclaration bslmf_usesallocator 13. bslmf_isconvertible 12. bslmf_enableif 11. bslmf_isfundamental 10. bslmf_isarithmetic 9. bslmf_isintegral bslmf_ismemberpointer 8. bslmf_addcv bslmf_ismemberobjectpointer 7. bslmf_addconst bslmf_addvolatile bslmf_decay bslmf_isempty bslmf_ismemberfunctionpointer bslmf_ispolymorphic bslmf_removepointer 6. bslmf_isclass bslmf_isfloatingpoint bslmf_isfunction bslmf_ispointer bslmf_isvoid bslmf_memberfunctionpointertraits bslmf_memberpointertraits bslmf_removecvq bslmf_removecvref 5. bslmf_addpointer bslmf_addreference bslmf_functionpointertraits bslmf_if !DEPRECATED! bslmf_makeintegersequence bslmf_matchanytype bslmf_removecv bslmf_selecttrait 4. bslmf_addlvaluereference bslmf_addrvaluereference bslmf_arraytopointer bslmf_conditional bslmf_integersequence bslmf_isconst bslmf_isreference bslmf_isvolatile bslmf_metaint !DEPRECATED! bslmf_nthparameter bslmf_removeconst bslmf_removeextent bslmf_removereference bslmf_removevolatile bslmf_resulttype bslmf_switch bslmf_typeidentity bslmf_typelist 3. bslmf_isarray bslmf_islvaluereference bslmf_ispair bslmf_isreferencewrapper bslmf_isrvaluereference bslmf_issame bslmf_istransparentpredicate bslmf_nil bslmf_tag 2. bslmf_allocatorargt bslmf_assert bslmf_integralconstant bslmf_voidtype 1. bslmf_functionpointertraits_cpp03 !PRIVATE! bslmf_invokeresult_cpp03 !PRIVATE! bslmf_nthparameter_cpp03 !PRIVATE!
bslmf_addconst
: const
-qualifier.bslmf_addcv
: bslmf_addlvaluereference
: bslmf_addpointer
: bslmf_addreference
: bslmf_addrvaluereference
: bslmf_addvolatile
: volatile
-qualifier.bslmf_allocatorargt
: bslmf_arraytopointer
: bslmf_assert
: bslmf_conditional
: bslmf_decay
: bslmf_detectnestedtrait
: bslmf_enableif
: bslmf_forwardingreftype
: bslmf_forwardingtype
: bslmf_functionpointertraits
: bslmf_functionpointertraits_cpp03
: PRIVATE bslmf_haspointersemantics
: bslmf_if
: DEPRECATED if/else
(conditional) meta-function.bslmf_integersequence
: bslmf_integralconstant
: bslmf_invokeresult
: bslmf_isaccessiblebaseof
: bslmf_isarithmetic
: bslmf_isarray
: bslmf_isbitwiseequalitycomparable
: bslmf_isbitwisemoveable
: bslmf_isclass
: bslmf_isconst
: const
-qualified types.bslmf_isconvertible
: bslmf_isconvertibletoany
: bslmf_iscopyconstructible
: bslmf_isempty
: bslmf_isenum
: bslmf_isfloatingpoint
: bslmf_isfunction
: bslmf_isfundamental
: bslmf_isintegral
: bslmf_islvaluereference
: bslmf_ismemberfunctionpointer
: bslmf_ismemberobjectpointer
: bslmf_ismemberpointer
: bslmf_isnothrowmoveconstructible
: bslmf_isnothrowswappable
: bslmf_ispointer
: bslmf_ispolymorphic
: bslmf_isreference
: bslmf_isreferencewrapper
: bslmf_isrvaluereference
: bslmf_issame
: bslmf_isswappable
: bslmf_istransparentpredicate
: bslmf_istriviallycopyable
: bslmf_istriviallydefaultconstructible
: bslmf_isvoid
: void
types.bslmf_isvolatile
: volatile
-qualified types.bslmf_makeintegersequence
: bslmf_matchanytype
: bslmf_matcharithmetictype
: bslmf_memberfunctionpointertraits
: bslmf_memberpointertraits
: bslmf_metaint
: DEPRECATED bslmf_movableref
: bslmf_nestedtraitdeclaration
: bslmf_nil
: bslmf_nthparameter
: bslmf_removeconst
: const
-qualifier.bslmf_removecv
: bslmf_removecvq
: const
/volatile
qualifiers.bslmf_removecvref
: bslmf_removeextent
: bslmf_removepointer
: bslmf_removereference
: bslmf_removevolatile
: volatile
-qualifier.bslmf_resulttype
: result_type
or ResultType
nested type.bslmf_selecttrait
: bslmf_switch
: switch
meta-function.bslmf_tag
: bslmf_typeidentity
: bslmf_typelist
: bslmf_usesallocator
: bslmf_util
: bslmf
types.bslmf_voidtype
: