BDE 4.39.x Production Release
Loading...
Searching...
No Matches
Package bslmf

Detailed Description

Basic Standard Library Meta-Functions (bslmf)

Purpose

Provide meta-function versions of useful coding constructs.

Mnemonic

Basic Standard Library Meta-Functions (bslmf)

Description

The '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.

The "return value" of that function is generally a compile-time constant under the form of a nested '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;
};

Note the use of a 'bslmf_MetaInt' nested type usually employed for function dispatching. See the bslmf_issame component-level documentation for a more thorough usage example.

Other meta-functions don't have a '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'.

Hierarchical Synopsis

The 'bslmf' package currently has 100 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
bslmf_unwraprefdecay
19. bslmf_forwardingreftype
bslmf_forwardingtype
bslmf_invokeresult
bslmf_unwrapreference
bslmf_util
18. bslmf_movableref
bslmf_referencewrapper
17. bslmf_isbitwisemoveable
bslmf_iscopyconstructible
bslmf_isnothrowmoveconstructible
16. bslmf_isbitwisecopyable
15. bslmf_haspointersemantics
bslmf_isbitwiseequalitycomparable
bslmf_istriviallycopyable
bslmf_istriviallydefaultconstructible
bslmf_matcharithmetictype
bslmf_usesallocatorargt
14. bslmf_detectnestedtrait
bslmf_isenum
13. bslmf_isaccessiblebaseof
bslmf_isconvertibletoany
bslmf_nestedtraitdeclaration
bslmf_usesallocator
12. bslmf_isconvertible
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_conjunction
bslmf_disjunction
bslmf_functionpointertraits
bslmf_if !DEPRECATED!
bslmf_makeintegersequence
bslmf_matchanytype
bslmf_metaint !DEPRECATED!
bslmf_negation
bslmf_removecv
bslmf_selecttrait
4. bslmf_addlvaluereference
bslmf_addrvaluereference
bslmf_arraytopointer
bslmf_conditional
bslmf_enableif
bslmf_floatingtypestructuraltraits
bslmf_integersequence
bslmf_isconst
bslmf_isreference
bslmf_isvolatile
bslmf_nthparameter
bslmf_removeconst
bslmf_removeextent
bslmf_removereference
bslmf_removevolatile
bslmf_resulttype
bslmf_switch
bslmf_tag
bslmf_typeidentity
bslmf_typelist
3. bslmf_assert
bslmf_isarray
bslmf_islvaluereference
bslmf_ispair
bslmf_isreferencewrapper
bslmf_isrvaluereference
bslmf_issame
bslmf_istransparentpredicate
bslmf_nil
2. bslmf_allocatorargt
bslmf_booleantestable
bslmf_containercompatiblerange
bslmf_integralconstant
bslmf_voidtype
1. bslmf_conjunction_cpp03 !PRIVATE!
bslmf_disjunction_cpp03 !PRIVATE!
bslmf_functionpointertraits_cpp03 !PRIVATE!
bslmf_invokeresult_cpp03 !PRIVATE!
bslmf_nthparameter_cpp03 !PRIVATE!

Component Synopsis

bslmf_addconst : Provide a meta-function for adding a top-level const-qualifier.

bslmf_addcv : Provide a meta-function for adding top-level cv-qualifiers.

bslmf_addlvaluereference : Provide a compile-time type transformation to lvalue reference.

bslmf_addpointer : Provide meta-function to transform a type to pointer to that type.

bslmf_addreference : Provide a meta-function for adding "reference-ness" to a type.

bslmf_addrvaluereference : Provide a compile-time type transformation to rvalue reference.

bslmf_addvolatile : Provide a meta-function for adding a volatile-qualifier.

bslmf_allocatorargt : Provide a tag type to precede allocator arguments.

bslmf_arraytopointer : Provide a meta-function to convert array types to pointer types.

bslmf_assert : Provide a compile-time assertion facility.

bslmf_booleantestable : Provide an exposition-only concept boolean-testable.

bslmf_conditional : Provide a compile-time conditional type selector.

bslmf_conjunction : Provide the logical conjunction (AND) for type traits.

bslmf_conjunction_cpp03 : !PRIVATE! Provide C++03 implementation for bslmf_conjunction.h

bslmf_containercompatiblerange : Provide a concept for the Standard container-compatible-range.

bslmf_decay : Convert a type to the type used for pass-by-value.

bslmf_detectnestedtrait : Provide a facility for defining traits and detecting legacy traits.

bslmf_disjunction : Provide the logical disjunction (OR) for type traits.

bslmf_disjunction_cpp03 : !PRIVATE! Provide C++03 implementation for bslmf_disjunction.h

bslmf_enableif : Provide a utility to set up SFINAE conditions in type deduction.

bslmf_floatingtypestructuraltraits : Provide traits to describe floating point type structure.

bslmf_forwardingreftype : Provide a meta-function for determining a forwarding type.

bslmf_forwardingtype : Provide a meta-function for determining an optimal forwarding type.

bslmf_functionpointertraits : Provide a meta-function for determining function pointer traits.

bslmf_functionpointertraits_cpp03 : !PRIVATE! Provide C++03 implementation for bslmf_functionpointertraits.h

bslmf_haspointersemantics : Provide a type trait for pointer semantics.

'bslmf_if': !DEPRECATED! Provide a compile-time if/else (conditional) meta-function.

bslmf_integersequence : Provide a template parameter pack of integers.

bslmf_integralconstant : Provide a mapping from integral constants to unique types.

bslmf_invokeresult : Determine the result type of an invocable expression.

bslmf_invokeresult_cpp03 : !PRIVATE! Provide C++03 implementation for bslmf_invokeresult.h

bslmf_isaccessiblebaseof : Provide a compile-time check for derived classes.

bslmf_isarithmetic : Provide a compile-time check for determining arithmetic types.

bslmf_isarray : Provide a compile-time check for array types.

bslmf_isbitwisecopyable : Provide a meta-function for determining bitwise copyable types.

bslmf_isbitwiseequalitycomparable : Provide a type trait for bitwise equality.

bslmf_isbitwisemoveable : Provide a primitive type trait for bitwise moveable classes.

bslmf_isclass : Provide a compile-time check for determining class types.

bslmf_isconst : Provide a compile-time check for const-qualified types.

bslmf_isconvertible : Provide a compile-time check for type conversion.

bslmf_isconvertibletoany : Provide a compile-time check for types convertible to any type.

bslmf_iscopyconstructible : Provide a meta-function to report if a type is copy constructible.

bslmf_isempty : Provide a compile-time check for detecting an empty class type.

bslmf_isenum : Provide compile-time check for determining enumerated types.

bslmf_isfloatingpoint : Provide a compile-time check for floating-point types.

bslmf_isfunction : Provide a compile-time check for determining function types.

bslmf_isfundamental : Provide a compile-time check for determining fundamental types.

bslmf_isintegral : Provide a compile-time check for integral types.

bslmf_islvaluereference : Provide a compile-time check for lvalue reference types.

bslmf_ismemberfunctionpointer : Provide a compile-time check for member function pointer types.

bslmf_ismemberobjectpointer : Provide a compile-time check for member object pointer types.

bslmf_ismemberpointer : Provide a compile-time check for non-static member pointer types.

bslmf_isnothrowmoveconstructible : Provide metafunction to identify no-throw move-constructible types.

bslmf_isnothrowswappable : Provide metafunction to identify nothrow swappable types.

bslmf_ispair : Provide a compile-time check for the bsl::pair type.

bslmf_ispointer : Provide a compile-time check for pointer types.

bslmf_ispolymorphic : Provide a compile-time check for determining polymorphic types.

bslmf_isreference : Provide a meta-function to test reference types.

bslmf_isreferencewrapper : Provide a trait to detect reference-wrapper specializations.

bslmf_isrvaluereference : Provide a compile-time check for rvalue reference types.

bslmf_issame : Provide a meta-function for testing if two types are the same.

bslmf_isswappable : Provide metafunction to identify swappable types.

bslmf_istransparentpredicate : Support detection of whether a predicate functor is transparent.

bslmf_istriviallycopyable : Provide a meta-function for determining trivially copyable types.

bslmf_istriviallydefaultconstructible : Provide a compile-time check for trivially default-constructible.

bslmf_isvoid : Provide a compile-time check for void types.

bslmf_isvolatile : Provide a compile-time check for volatile-qualified types.

bslmf_makeintegersequence : Provide a template parameter pack of integers.

bslmf_matchanytype : Provide a generic type to which any type can be converted.

bslmf_matcharithmetictype : Provide a class supporting "do-the-right-thing clause" dispatch.

bslmf_memberfunctionpointertraits : Provide meta-functions to detect member function pointer traits.

bslmf_memberpointertraits : Provide meta-function to detect pointer to member traits.

bslmf_metaint : !DEPRECATED! Provide a meta-function to map integral constants to unique types.

bslmf_movableref : Provide a vocabulary type to enable move semantics.

bslmf_negation : Provide the logical negation (NOT) for type traits.

bslmf_nestedtraitdeclaration : Provide a nested declaration to associate a class with a trait.

'bslmf_nil': Provide a nil type.

bslmf_nthparameter : Metafunction to return the Nth type parameter in a parameter pack

bslmf_nthparameter_cpp03 : !PRIVATE! Provide C++03 implementation for bslmf_nthparameter.h

bslmf_referencewrapper : Provide copyable, assignable object wrapper for references.

bslmf_removeconst : Provide a meta-function for removing top-level const-qualifier.

bslmf_removecv : Provide a meta-function for removing top-level cv-qualifiers.

bslmf_removecvq : Provide a meta-function for removing const/volatile qualifiers.

bslmf_removecvref : Provide a meta-func for removing reference-ness and cv-qualifiers.

bslmf_removeextent : Provide a metafunction to return an array type's element type.

bslmf_removepointer : Provide a meta-function to transform pointer type to referent type.

bslmf_removereference : Provide a meta-function for stripping reference-ness from types.

bslmf_removevolatile : Provide a meta-function for removing volatile-qualifier.

bslmf_resulttype : Provide access to result_type or ResultType nested type.

bslmf_selecttrait : Provide clean compile-time dispatch based on multiple traits

bslmf_switch : Provide a compile-time switch meta-function.

'bslmf_tag': Provide an integral-constant-to-type conversion.

bslmf_typeidentity : Provide a template metafunction that returns its argument.

bslmf_typelist : Provide a typelist component.

bslmf_unwraprefdecay : Provide a meta-function to decay and unwrap reference wrappers.

bslmf_unwrapreference : Provide a meta-function to unwrap reference wrappers.

bslmf_usesallocator : Provide a meta-function to determine if a type uses an allocator.

bslmf_usesallocatorargt : Provide a metafunction for allocator_arg_t construction

bslmf_util : Provide low-level functions on bslmf types.

bslmf_voidtype : Provide a helper for implementing SFINAE-based metafunctions.

Modules

 bslmf_addconst
 
 bslmf_addcv
 
 bslmf_addlvaluereference
 
 bslmf_addpointer
 
 bslmf_addreference
 
 bslmf_addrvaluereference
 
 bslmf_addvolatile
 
 bslmf_allocatorargt
 
 bslmf_arraytopointer
 
 bslmf_assert
 
 bslmf_booleantestable
 
 bslmf_conditional
 
 bslmf_conjunction
 
 bslmf_conjunction_cpp03
 
 bslmf_containercompatiblerange
 
 bslmf_decay
 
 bslmf_detectnestedtrait
 
 bslmf_disjunction
 
 bslmf_disjunction_cpp03
 
 bslmf_enableif
 
 bslmf_floatingtypestructuraltraits
 
 bslmf_forwardingreftype
 
 bslmf_forwardingtype
 
 bslmf_functionpointertraits
 
 bslmf_functionpointertraits_cpp03
 
 bslmf_haspointersemantics
 
 bslmf_if
 
 bslmf_integersequence
 
 bslmf_integralconstant
 
 bslmf_invokeresult
 
 bslmf_invokeresult_cpp03
 
 bslmf_isaccessiblebaseof
 
 bslmf_isarithmetic
 
 bslmf_isarray
 
 bslmf_isbitwisecopyable
 
 bslmf_isbitwiseequalitycomparable
 
 bslmf_isbitwisemoveable
 
 bslmf_isclass
 
 bslmf_isconst
 
 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_ispair
 
 bslmf_ispointer
 
 bslmf_ispolymorphic
 
 bslmf_isreference
 
 bslmf_isreferencewrapper
 
 bslmf_isrvaluereference
 
 bslmf_issame
 
 bslmf_isswappable
 
 bslmf_istransparentpredicate
 
 bslmf_istriviallycopyable
 
 bslmf_istriviallydefaultconstructible
 
 bslmf_isvoid
 
 bslmf_isvolatile
 
 bslmf_makeintegersequence
 
 bslmf_matchanytype
 
 bslmf_matcharithmetictype
 
 bslmf_memberfunctionpointertraits
 
 bslmf_memberpointertraits
 
 bslmf_metaint
 
 bslmf_movableref
 
 bslmf_negation
 
 bslmf_nestedtraitdeclaration
 
 bslmf_nil
 
 bslmf_nthparameter
 
 bslmf_nthparameter_cpp03
 
 bslmf_referencewrapper
 
 bslmf_removeconst
 
 bslmf_removecv
 
 bslmf_removecvq
 
 bslmf_removecvref
 
 bslmf_removeextent
 
 bslmf_removepointer
 
 bslmf_removereference
 
 bslmf_removevolatile
 
 bslmf_resulttype
 
 bslmf_selecttrait
 
 bslmf_switch
 
 bslmf_tag
 
 bslmf_typeidentity
 
 bslmf_typelist
 
 bslmf_unwraprefdecay
 
 bslmf_unwrapreference
 
 bslmf_usesallocator
 
 bslmf_usesallocatorargt
 
 bslmf_util
 
 bslmf_voidtype