[#BloombergLP-bslstl]
= xref:BloombergLP.adoc[BloombergLP]::bslstl
:relfileprefix: ../
:mrdocs:

Implementation details for `basic&lowbar;syncbuf` and related stream types&period;

== Types

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslstl/AlgorithmUtil.adoc[`AlgorithmUtil`] 
| Provide a namespace for implementing helper routines for algorithm implementations&period;
| xref:BloombergLP/bslstl/BadWeakPtr.adoc[`BadWeakPtr`] 
| This `class` provides an exception type thrown when a `weak&lowbar;ptr` object is locked after the managed object has been destroyed&period; This class conforms to the C&plus;&plus;11 standard specification of `std&colon;&colon;bad&lowbar;weak&lowbar;ptr`&period;
| xref:BloombergLP/bslstl/BidirectionalIterator.adoc[`BidirectionalIterator`] 
| Given an `ITER&lowbar;IMP` type that implements a minimal subset of an iterator interface, this template generates a complete iterator that meets all of the requirements of a &quot;bidirectional iterator&quot; in the C&plus;&plus; standard&period; If `T` is `const`&hyphen;qualified, then the resulting type is a constant iterator&period; `T` shall not be a function, reference type or void&period; `ITER&lowbar;IMP` must provide public operations so that, for objects `i` and `j` of type `ITER&lowbar;IMP`, the following operations are supported&colon; &grave; ITER&lowbar;IMP i&semi; default construction ITER&lowbar;IMP j(i)&semi; copy construction i &equals; j assignment &plus;&plus;i increment to next element &hyphen;&hyphen;i decrement to previous element i &equals;&equals; j &sol;&sol; convertible to bool equality comparison &ast;i &sol;&sol; reference convertible to T&amp; element access (dereference) &grave;
| xref:BloombergLP/bslstl/BidirectionalNodePool.adoc[`BidirectionalNodePool`] 
| This class provides methods for creating and destroying nodes using the appropriate allocator&hyphen;traits of the (template parameter) type `ALLOCATOR`&period;
| xref:BloombergLP/bslstl/BoyerMooreHorspoolSearcher.adoc[`BoyerMooreHorspoolSearcher`] 
| This class template implements an STL&hyphen;compliant searcher object that uses the Boyer, Moore, Horspool Algorithm&period; Several non&hyphen;standard accessors are also provided&period;
| xref:BloombergLP/bslstl/BoyerMooreHorspoolSearcher_CharImp.adoc[`BoyerMooreHorspoolSearcher&lowbar;CharImp`] 
| This class template implements the same interfaces as the `BoyerMooreHorspoolSearcher&lowbar;GeneralImp`&semi; however, the implementation is specialized for a `value&lowbar;type` of `char`&period; Notably, needle metadata is stored&sol;accessed from a fixed size array, not a dynamically&hyphen;sized container&period;
| xref:BloombergLP/bslstl/BoyerMooreHorspoolSearcher_GeneralImp.adoc[`BoyerMooreHorspoolSearcher&lowbar;GeneralImp`] 
| This class template implements the same interfaces as the `BoyerMooreHorspoolSearcher&lowbar;CharImp` for arbitrary `value&lowbar;type`&period;
| xref:BloombergLP/bslstl/CallableVariable.adoc[`CallableVariable`] 
| This metafunction returns a `type` that is an alias for `CALLABLE` unless that is a function type, in which case it is an alias for `CALLABLE &amp;`&period; This should be used to declare variables of an arbitrary callable type, typically a template type parameter, that may turn out to be a function type&period; Note that this metafunction is necessary as the C&plus;&plus; language does not allow variables of function type, nor may functions return a function type&period;
| xref:BloombergLP/bslstl/DefaultSearcher.adoc[`DefaultSearcher`] 
| This class template defines functors that can search for the sequence of `value&lowbar;type` values defined on construction (i&period;e&period;, the &quot;needle&quot;) in sequences of `value&lowbar;type` values (i&period;e&period;, &quot;haystacks&quot;) passed to the functor&apos;s `operator()`&period;
| xref:BloombergLP/bslstl/DefaultSearcher_CanOptimize.adoc[`DefaultSearcher&lowbar;CanOptimize`] 
| This component&hyphen;private meta&hyphen;function `struct` provides a member enumerator `value` that is `true` if all of the specified `FORWARD&lowbar;ITR&lowbar;NEEDLE,` `EQUAL,` and `FORWARD&lowbar;ITR&lowbar;HAYSTACK` meet the criteria for an optimization of the default searcher, and has the value `false` otherwise&period;
| xref:BloombergLP/bslstl/ForwardIterator.adoc[`ForwardIterator`] 
| Given an `ITER&lowbar;IMP` type that implements a minimal subset of an iterator interface, this template generates a complete iterator that meets all of the requirements of a &quot;forward iterator&quot; in the C&plus;&plus; standard&period; If `T` is const&hyphen;qualified, then the resulting type is a const iterator&period; `T` shall not be a function, reference type or void&period; `ITER&lowbar;IMP` must provide public operations so that, for objects `i` and `j` of type `ITER&lowbar;IMP`, the following operations are supported&colon; &grave; ITER&lowbar;IMP i&semi; Default construction ITER&lowbar;IMP j(i)&semi; Copy construction i &equals; j Assignment &plus;&plus;i Increment to next element i &equals;&equals; j &sol;&sol; convertible to bool Equality comparison &ast;i &sol;&sol; reference convertible to T&amp; Element access (dereference) &grave;
| xref:BloombergLP/bslstl/Function_ArgTypes-06.adoc[`Function&lowbar;ArgTypes`] 
| This component&hyphen;private struct template provides the following nested typedefs for `bsl&colon;&colon;function` for a specified `PROTOTYPE` which must be a function type&colon; &grave; argument&lowbar;type &hyphen;&hyphen; Only if PROTOTYPE takes exactly one argument first&lowbar;argument&lowbar;type &hyphen;&hyphen; Only if PROTOTYPE takes exactly two arguments second&lowbar;argument&lowbar;type &hyphen;&hyphen; Only if PROTOTYPE takes exactly two arguments &grave; The C&plus;&plus; Standard requires that `function` define these typedefs for compatibility with one&hyphen; and two&hyphen;argument legacy (now deprecated) functor adaptors&period; `bsl&colon;&colon;function` publicly inherits from an instantiation of this template in order to conditionally declare the above nested types&period; This primary (unspecialized) template provides no typedefs&period;
| xref:BloombergLP/bslstl/Function_InvokerUtil.adoc[`Function&lowbar;InvokerUtil`] 
| This struct is a namespace containing a single function template, `invokerForFunc`, that returns a pointer to a function that is used to invoke a callable object of a particular type&period;
| xref:BloombergLP/bslstl/Function_InvokerUtilNullCheck-03.adoc[`Function&lowbar;InvokerUtilNullCheck`] 
| Provides an `isNull` static method that that returns whether or not its argument is &quot;null&quot;, i&period;e&period;, it cannot be invoked&period; For must `FUNC` types `isNull` always returns `false` as every instance of `FUNC` is invocable&period; However, specializations of this class, especially for pointer types, have `isNull` functions that sometimes return `true`&period; This class is a customization point&colon; types outside of this component can (but rarely should) specialize this template&period; In particular, `bslstl&lowbar;function` contains a specialization for `bsl&colon;&colon;function`&period;
| xref:BloombergLP/bslstl/Function_InvokerUtil_Dispatch-09a.adoc[`Function&lowbar;InvokerUtil&lowbar;Dispatch`] 
| Specializations of this class contain a static `invoke` method that can invoke a callable object of type `FUNC`, converting each argument in `PROTOTYPE` (a function prototype) to the corresponding argument in the invocation of the callable object and converting the return value of the invocation to the return type of `PROTOTYPE`&period; The `INVOCATION&lowbar;TYPE` specifies the category of callable object&colon; pointer to function, pointer to member function, pointer to data member, inplace functor (i&period;e&period;, one that qualifies for the small&hyphen;object optimization) and out&hyphen;of&hyphen;place functor (i&period;e&period;, one that is not stored in the small&hyphen;object buffer)&period;
| xref:BloombergLP/bslstl/Function_InvokerUtil_ForwardType.adoc[`Function&lowbar;InvokerUtil&lowbar;ForwardType`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_InvokerUtil_ForwardTypeImp-01.adoc[`Function&lowbar;InvokerUtil&lowbar;ForwardTypeImp`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_InvokerUtil_IsExplicitlyConvertible-0c.adoc[`Function&lowbar;InvokerUtil&lowbar;IsExplicitlyConvertible`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_InvokerUtil_IsExplicitlyConvertibleImp-0d.adoc[`Function&lowbar;InvokerUtil&lowbar;IsExplicitlyConvertibleImp`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_InvokerUtil_IsFuncInvocable-05.adoc[`Function&lowbar;InvokerUtil&lowbar;IsFuncInvocable`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_InvokerUtil_IsFuncInvocableImp-03.adoc[`Function&lowbar;InvokerUtil&lowbar;IsFuncInvocableImp`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_InvokerUtil_ResultType.adoc[`Function&lowbar;InvokerUtil&lowbar;ResultType`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_InvokerUtil_ResultTypeImp-02.adoc[`Function&lowbar;InvokerUtil&lowbar;ResultTypeImp`] 
| forward declaration
| xref:BloombergLP/bslstl/Function_IsInvocableWithPrototype-06.adoc[`Function&lowbar;IsInvocableWithPrototype`] 
| Forward declaration of the component&hyphen;private `Function&lowbar;IsInvocableWithPrototype` `struct` template&period; The primary (unspecialized) template is not defined&period; This `struct` template implements a boolean metafunction that publicly inherits from `bsl&colon;&colon;true&lowbar;type` if an object of the specified `FUNC` type is invocable under the specified `PROTOTYPE`, and inherits from `bsl&colon;&colon;false&lowbar;type` otherwise&period; An object of `FUNC` type is invocable under the `PROTOTYPE` if it is Lvalue&hyphen;Callable with the arguments of the `PROTOTYPE`, and returns an object of type convertible to the return type of the `PROTOTYPE`&period; If the return type of the `PROTOTYPE` is `void`, then any type is considered convertible to the return type of the `PROTOTYPE`&period; In C&plus;&plus;03, `FUNC` is considered Lvalue&hyphen;Callable with the argument and return types of the `PROTOTYPE` if it is not an integral type&period; This `struct` template requires `PROTOTYPE` to be an unqualified function type&period;
| xref:BloombergLP/bslstl/Function_IsReferenceCompatible-0c.adoc[`Function&lowbar;IsReferenceCompatible`] 
| This metafunction is derived from `true&lowbar;type` if a reference to the specified `FROM&lowbar;TYPE` parameter type can be substituted for a reference to the specified `TO&lowbar;TYPE` parameter type with no loss of information&semi; otherwise, it is derived from `false&lowbar;type`&period; By default, this metafunction yields `true&lowbar;type` if `FROM&lowbar;TYPE` is the same as `TO&lowbar;TYPE`&semi; else it yields `false&lowbar;type`&period; `bdef&lowbar;Function` should specialize this template to yield `true&lowbar;type` when `FROM&lowbar;TYPE` is an instantiation of `bdef&lowbar;Function` and `TO&lowbar;TYPE` is the corresponding instantiation of `bsl&colon;&colon;function` with the same function prototype&period; Instantiation will fail if either `FROM&lowbar;TYPE` or `TO&lowbar;TYPE` are reference types&period;
| xref:BloombergLP/bslstl/Function_Rep.adoc[`Function&lowbar;Rep`] 
| This is a component&hyphen;private class&period; Do not use&period;
| xref:BloombergLP/bslstl/Function_SmallObjectOptimization.adoc[`Function&lowbar;SmallObjectOptimization`] 
| This utility `struct` provides a namespace for several types, type traits, and constants used in the implementation of the small&hyphen;object optimization for `bsl&colon;&colon;function`&period;
| xref:BloombergLP/bslstl/Function_Variadic-0e.adoc[`Function&lowbar;Variadic`] 
| This component&hyphen;private class template contains the physical representation and provides the variadic interfaces for `bsl&colon;&colon;function`&period;
| xref:BloombergLP/bslstl/HashTable-06.adoc[`HashTable`] 
| This class template implements a value&hyphen;semantic container type holding an unordered sequence of (possibly duplicate) elements, that can be rapidly accessed using their key, with the constraint on the container that elements whose keys compare equal according to the specified `COMPARATOR` will be stored in a stable, contiguous sequence within the container&period; The value type and key type of the elements maintained by a `HashTable` are determined by aliases provided through the (template parameter) type `KEY&lowbar;CONFIG`&period; Elements in a `HashTable` are stored in &quot;nodes&quot; that are allocated using an allocator of the specified `ALLOCATOR` type (rebound to the node type), and elements are constructed directly in the node using the allocator as described in the C&plus;&plus;11 standard under the allocator&hyphen;aware container requirements in (&lsqb;container&period;requirements&period;general&rsqb;, C&plus;&plus;11 23&period;2&period;1)&period; The (template parameter) types `HASHER` and `COMPARATOR` shall be `copy&hyphen;constructible` function&hyphen;objects&period; `HASHER` shall support a function call operator compatible with the following statements&colon; &grave; HASHER hash&semi; KEY&lowbar;CONFIG&colon;&colon;KeyType key&semi; std&colon;&colon;size&lowbar;t result &equals; hash(key)&semi; &grave; where the definition of the called function meets the requirements of a hash function, as specified in &lcub;`bslstl&lowbar;hash`&rcub;&period; `COMPARATOR` shall support the a function call operator compatible with the following statements&colon; &grave; COMPARATOR compare&semi; KEY&lowbar;CONFIG&colon;&colon;KeyType key1, key2&semi; bool result &equals; compare(key1, key2)&semi; &grave; where the definition of the called function defines an equivalence relationship on keys that is both reflexive and transitive&period; The `HASHER` and `COMPARATOR` attributes of this class are further constrained, such for any two objects whose keys compare equal by the comparator, shall produce the same value from the hasher&period;
| xref:BloombergLP/bslstl/HashTableBucketIterator.adoc[`HashTableBucketIterator`] 
| 
| xref:BloombergLP/bslstl/HashTableIterator.adoc[`HashTableIterator`] 
| 
| xref:BloombergLP/bslstl/HashTable_ArrayProctor.adoc[`HashTable&lowbar;ArrayProctor`] 
| This class probably already exists in `bslalg`
| xref:BloombergLP/bslstl/HashTable_BaseHasher.adoc[`HashTable&lowbar;BaseHasher`] 
| This `struct` adapts the (template parameter) `HASHER` type for use as the base hasher of a `HashTable`&period;
| xref:BloombergLP/bslstl/HashTable_Comparator.adoc[`HashTable&lowbar;Comparator`] 
| Comparator adapter used by `HashTable`&period;
| xref:BloombergLP/bslstl/HashTable_ComparatorWrapper-0e.adoc[`HashTable&lowbar;ComparatorWrapper`] 
| This class provides a wrapper around a functor that can compare two values and return a `bool`, so that the function call operator is always declared as `const` qualified&period;
| xref:BloombergLP/bslstl/HashTable_HashWrapper-03.adoc[`HashTable&lowbar;HashWrapper`] 
| This class provides a wrapper around a functor satisfying the `Hash` requirements (&lcub;`bslstl&lowbar;hash`&rcub;) such that the function call operator is always declared as `const` qualified&period;
| xref:BloombergLP/bslstl/HashTable_NodeProctor.adoc[`HashTable&lowbar;NodeProctor`] 
| This class implements a proctor that, unless its `release` method has previously been invoked, automatically deallocates a managed list of nodes upon destruction by recursively invoking the `deleteNode` method of a supplied factory on each node&period; The (template parameter) type `FACTORY` shall be provide a member function that can be called as if it had the following signature&colon; &grave; void deleteNode(bslalg&colon;&colon;BidirectionalLink &ast;node)&semi; &grave;
| xref:BloombergLP/bslstl/HashTable_Util.adoc[`HashTable&lowbar;Util`] 
| This utility `struct` provide utilities for initializing and destroying bucket lists in anchors that are managed by a `HashTable`&period; They cannot migrate down to `bslalg&colon;&colon;HashTableImpUtil` as they rely on the standard library `bslma&lowbar;allocatortraits` for their implementation&period;
| xref:BloombergLP/bslstl/IoManip_QuotedStringFormatter.adoc[`IoManip&lowbar;QuotedStringFormatter`] 
| Private class&colon; do not use outside of `bslstl&lowbar;iomanip&period;h` header&period; This private class provides a temporary storage that can be extracted to&sol;from a stream and provides data to the standard implementation of the `quoted` function&period; Note that this class does not contain the storage itself, but only points to an external object&period; Note that `QuotedStringViewFormatter` is designed so that its objects are returned as temporary objects (of opaque type) from &apos;bsl&colon;&colon;quoted&grave;, and then passed to a streaming operator&semi; it serves as a temporary proxy for a string value&period;
| xref:BloombergLP/bslstl/IoManip_QuotedStringViewFormatter.adoc[`IoManip&lowbar;QuotedStringViewFormatter`] 
| Private class&colon; do not use outside of `bslstl&lowbar;iomanip&period;h` header&period; This private class provides a temporary storage that can be extracted to a stream and provides data to the standard implementation of the `quoted` function&period; Note that `QuotedStringViewFormatter` is designed to be returned as a temporary object (of opaque type) from &apos;bsl&colon;&colon;quoted&grave;, and passed to a streaming operator&semi; it serves as a temporary proxy for a string value&period; Also note that this value is copied to `bsl&colon;&colon;string` data member that is owned by the object of this class&period;
| xref:BloombergLP/bslstl/IsConvertibleToCString-04.adoc[`IsConvertibleToCString`] 
| This `struct` template implements a meta&hyphen;function to determine if the (template parameter) `t&lowbar;TYPE` is convertible to `const t&lowbar;CHAR&lowbar;TYPE &ast;`&period;
| xref:BloombergLP/bslstl/IsConvertibleToStringView-02.adoc[`IsConvertibleToStringView`] 
| This `struct` template implements a meta&hyphen;function to determine if the (template parameter) `t&lowbar;TYPE` is convertible to `bsl&colon;&colon;basic&lowbar;string&lowbar;view&lt;t&lowbar;CHAR&lowbar;TYPE, t&lowbar;CHAR&lowbar;TRAITS&gt;`&period;
| xref:BloombergLP/bslstl/IteratorUtil.adoc[`IteratorUtil`] 
| This utility struct provides a namespace for functions on iterators and iterator ranges&period;
| xref:BloombergLP/bslstl/IteratorUtil_LegacyInsertDistance-03.adoc[`IteratorUtil&lowbar;LegacyInsertDistance`] 
| This supporting utility type is used for type&hyphen;based dispatch as part of the implementation of the similarly structured functions `insertDistance` and `canCalculateInsertDistance` from `IteratorUtil`&period; Selection between the primary template and secondary (much simpler) one is performed based on the defaulted third parameter that checks if the (template parameter) type `t&lowbar;SENTINEL` is convertible to the (template parameter) type `t&lowbar;INPUT&lowbar;ITERATOR`&period; When the primary template is selected, the decision to delegate distance calculation to `bsl&colon;&colon;distance` is performed using tag dispatch&period;
| xref:BloombergLP/bslstl/MapComparator-0d.adoc[`MapComparator`] 
| 
| xref:BloombergLP/bslstl/Optional_Base-05.adoc[`Optional&lowbar;Base`] 
| This component&hyphen;private class template implements the functionality of `bsl&colon;&colon;optional`&period; The primary template is instantiated when `TYPE` is allocator&hyphen;aware, and holds the allocator that is used to create the stored object&period;
| xref:BloombergLP/bslstl/Optional_ConstructFromForwardRef.adoc[`Optional&lowbar;ConstructFromForwardRef`] 
| Tag type selecting construction from a forwarding reference&period;
| xref:BloombergLP/bslstl/Optional_ConstructsFromType.adoc[`Optional&lowbar;ConstructsFromType`] 
| This metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if `t&lowbar;ANY&lowbar;TYPE` is not derived from `bsl&colon;&colon;optional&lt;t&lowbar;TYPE&gt;`, `t&lowbar;ANY&lowbar;TYPE` is not a tag type, and `t&lowbar;TYPE` is constructible from `t&lowbar;ANY&lowbar;TYPE`&period;
| xref:BloombergLP/bslstl/Optional_CopyConstructFromOtherOptional.adoc[`Optional&lowbar;CopyConstructFromOtherOptional`] 
| Tag type selecting copy construction from another `optional`&period;
| xref:BloombergLP/bslstl/Optional_CopyConstructFromStdOptional.adoc[`Optional&lowbar;CopyConstructFromStdOptional`] 
| Tag type selecting copy construction from a `std&colon;&colon;optional`&period;
| xref:BloombergLP/bslstl/Optional_Data-0c.adoc[`Optional&lowbar;Data`] 
| This component&hyphen;private `struct` manages a `value&lowbar;type` object in `Optional&lowbar;Base` by inheriting from `Optional&lowbar;DataImp`&period; In addition, this primary template properly destroys the owned instance of `t&lowbar;TYPE` in its destructor&period;
| xref:BloombergLP/bslstl/Optional_DataImp.adoc[`Optional&lowbar;DataImp`] 
| This component&hyphen;private `struct` manages a `value&lowbar;type` object in an `Optional&lowbar;Base` object&period; This class provides an abstraction for `const` value type&period; An `Optional&lowbar;Base` object may contain an object of `const` type&period; An assignment to such an `Optional&lowbar;Base` object should not succeed&period; However, unless the `Optional&lowbar;Base` object itself is `const`, it should be possible to change the value of the `Optional&lowbar;Base` object using `emplace`&period; In order to allow for that, this class manages a non&hyphen;const object of `value&lowbar;type`, but all the accessors return a `const` adjusted reference to the managed object&period;
| xref:BloombergLP/bslstl/Optional_ImmovableHelper.adoc[`Optional&lowbar;ImmovableHelper`] 
| This struct is used to implement direct initialization of the private data member of the `std&colon;&colon;optional` class, which makes it possible to support immovable types returned from the `transform` member function&period;
| xref:BloombergLP/bslstl/Optional_InvokeConstructorTag.adoc[`Optional&lowbar;InvokeConstructorTag`] 
| Constructor tag used to implement the `transform` function&period;
| xref:BloombergLP/bslstl/Optional_IsBslOptional-07.adoc[`Optional&lowbar;IsBslOptional`] 
| Metafunction that is `false&lowbar;type` for types that are not `bsl&colon;&colon;optional`&period;
| xref:BloombergLP/bslstl/Optional_IsTriviallyDestructible.adoc[`Optional&lowbar;IsTriviallyDestructible`] 
| This metafunction is derived from `std&colon;&colon;is&lowbar;trivially&lowbar;destructible&lt;t&lowbar;TYPE&gt;` in C&plus;&plus;11 and later&period; In C&plus;&plus;03, the metafunction is derived from `bsl&colon;&colon;is&lowbar;trivially&lowbar;copyable`, a trait that implies the type is also trivially destructible&period;
| xref:BloombergLP/bslstl/Optional_MoveConstructFromOtherOptional.adoc[`Optional&lowbar;MoveConstructFromOtherOptional`] 
| Tag type selecting move construction from another `optional`&period;
| xref:BloombergLP/bslstl/Optional_MoveConstructFromStdOptional.adoc[`Optional&lowbar;MoveConstructFromStdOptional`] 
| Tag type selecting move construction from a `std&colon;&colon;optional`&period;
| xref:BloombergLP/bslstl/Optional_NulloptConstructToken.adoc[`Optional&lowbar;NulloptConstructToken`] 
| This trivial tag type is used to create `nullopt&lowbar;t` objects prior to C&plus;&plus;17&period;
| xref:BloombergLP/bslstl/Optional_OptNoSuchType.adoc[`Optional&lowbar;OptNoSuchType`] 
| This component&hyphen;private trivial tag type is used to distinguish between arguments passed by a user, and an `enable&lowbar;if` argument&period; It is not default constructible so the following construction never invokes a constrained single parameter constructor&colon; &grave; optional&lt;SomeType&gt; o(int, &lcub;&rcub;)&semi; &grave;
| xref:BloombergLP/bslstl/Optional_PropagatesAllocator.adoc[`Optional&lowbar;PropagatesAllocator`] 
| This metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if `t&lowbar;TYPE` is an allocator&hyphen;aware const type, and if `t&lowbar;ANY&lowbar;TYPE` is the same as `t&lowbar;TYPE`, minus the cv qualification&period; This trait is used to enable a constructor overload for a const qualified allocator&hyphen;aware `ValueType` taking an rvalue of Optional&lowbar;Base of the non&hyphen;const qualified `ValueType`&period; Such an overload needs to propagate the allocator&period;
| xref:BloombergLP/bslstl/Pair_GetImpUtil-0f.adoc[`Pair&lowbar;GetImpUtil`] 
| This utility class template provides functions for selecting the element of pair, returned from `bsl&colon;&colon;get(bsl&colon;&colon;pair&lt;T1, T2&gt;)`, by its index&period;
| xref:BloombergLP/bslstl/Pair_IndexOfType-02.adoc[`Pair&lowbar;IndexOfType`] 
| This meta&hyphen;function provides a compile&hyphen;time way to obtain the index of `bsl&colon;&colon;pair` element, having the (template parameter) type `T`&period; If neither type of pair&apos;s element is equal to `T` or both pair&apos;s elements have the same type, code is not compiled&period;
| xref:BloombergLP/bslstl/RandomAccessIterator.adoc[`RandomAccessIterator`] 
| Given an `ITER&lowbar;IMP` type that implements a minimal subset of an iterator interface, this template generates a complete iterator that meets all of the requirements of a &quot;random&hyphen;access iterator&quot; in the C&plus;&plus; standard&period; If `T` is const&hyphen;qualified, then the resulting type is a const iterator&period; `T` shall not be a function, reference type or void&period; `ITER&lowbar;IMP` must provide public operations so that, for objects `i` and `j` of type `ITER&lowbar;IMP` and `n` of an integral type, the following operations are supported&colon; &grave; ITER&lowbar;IMP i&semi; default construction ITER&lowbar;IMP j(i)&semi; copy construction i &equals; j assignment &plus;&plus;i increment to next element &hyphen;&hyphen;i decrement to previous element i &plus;&equals; n increment by n elements i &hyphen;&equals; n decrement by n elements j &hyphen; i &sol;&sol; convertible to ptrdiff&lowbar;t distance from i to j i &equals;&equals; j &sol;&sol; convertible to bool equality comparison i &lt; j &sol;&sol; convertible to bool less&hyphen;than comparison &ast;i &sol;&sol; reference convertible to T&amp; element access (dereference) &grave;
| xref:BloombergLP/bslstl/SetComparator.adoc[`SetComparator`] 
| 
| xref:BloombergLP/bslstl/SharedPtrAllocateInplaceRep.adoc[`SharedPtrAllocateInplaceRep`] 
| This class provides a concrete implementation of the `SharedPtrRep` protocol for in&hyphen;place instances of the (template parameter) `TYPE`&period; Upon destruction of this object, the destructor of `TYPE` is invoked on the shared object&period;
| xref:BloombergLP/bslstl/SharedPtrAllocateOutofplaceRep.adoc[`SharedPtrAllocateOutofplaceRep`] 
| This class provides a concrete implementation of the `SharedPtrRep` protocol for out&hyphen;of&hyphen;place instances of the parameterized `TYPE`&period; Upon destruction of this object, the parameterized `DELETER` type is invoked on the pointer to the shared object&period;
| xref:BloombergLP/bslstl/SharedPtrAllocateOutofplaceRep_InitProctor.adoc[`SharedPtrAllocateOutofplaceRep&lowbar;InitProctor`] 
| This proctor is used for out&hyphen;of&hyphen;place shared pointer instantiations&period; Generally, a proctor is created prior to constructing a `SharedPtrAllocateOutofplaceRep` and released after successful construction&period; In the event that an exception is thrown during construction of the representation, the proctor will delete the provided pointer using the provided deleter&period; Note that the provided deleter is held by reference and must remain valid for the lifetime of the proctor&period; If the proctor is not released before it&apos;s destruction, a copy of the deleter is instantiated to delete the pointer (in case `operator()` is non&hyphen;`const`)&period; Also note that if the deleter throws during copy construction, the provided pointer will not be destroyed&period;
| xref:BloombergLP/bslstl/SharedPtrArrayAllocateInplaceRep.adoc[`SharedPtrArrayAllocateInplaceRep`] 
| This class provides a concrete implementation of the `SharedPtrRep` protocol for in&hyphen;place instances of the (template parameter) `TYPE`, which must be an array&period; Upon destruction of this object, each element of the array is destructed&period;
| xref:BloombergLP/bslstl/SharedPtrNilDeleter.adoc[`SharedPtrNilDeleter`] 
| This `struct` provides a function&hyphen;like shared pointer deleter that does nothing when invoked&period;
| xref:BloombergLP/bslstl/SharedPtrUtil.adoc[`SharedPtrUtil`] 
| This `struct` provides a namespace for operations on shared pointers&period;
| xref:BloombergLP/bslstl/SharedPtr_DefaultDeleter-06.adoc[`SharedPtr&lowbar;DefaultDeleter`] 
| This `struct` provides a function&hyphen;like shared pointer deleter that invokes `delete` with the passed pointer&period; If the template parameter is `true`, then the pointer is deleted using `operator delete &lsqb;&rsqb;`&period; Otherwise, it is deleted using `operator delete`&period;
| xref:BloombergLP/bslstl/SharedPtr_IsCallable.adoc[`SharedPtr&lowbar;IsCallable`] 
| Forward declaration of component&hyphen;private type trait to indicate whether an object of (template parameter) type `FUNCTOR` can be called as a function with an argument of (template parameter) type `ARG`
| xref:BloombergLP/bslstl/SharedPtr_IsFactoryFor.adoc[`SharedPtr&lowbar;IsFactoryFor`] 
| Forward declaration of component&hyphen;private type trait to indicate whether a pointer to a `FACTORY` has a `deleteObject` member that can be called as `factory&hyphen;&gt;deleteObject((ARG &ast;)p)`&period;
| xref:BloombergLP/bslstl/SharedPtr_IsNullableFactory.adoc[`SharedPtr&lowbar;IsNullableFactory`] 
| Forward declaration of component&hyphen;private type trait to indicate whether a pointer to a `FACTORY` has a `deleteObject` member that can be called as `factory&hyphen;&gt;deleteObject((ARG &ast;)p)`&period;
| xref:BloombergLP/bslstl/SharedPtr_IsPointerCompatible.adoc[`SharedPtr&lowbar;IsPointerCompatible`] 
| Forward declaration of component&hyphen;private type trait to indicate whether a pointer to a `SOURCE&lowbar;TYPE` is compatible with a pointer to `DEST&lowbar;TYPE`&period; &lsqb;util&period;smartptr&period;shared&rsqb;&sol;5 says&colon; &quot;for the purposes of &period;&period;&period;, a pointer type SOURCE&lowbar;TYPE&ast; is said to be compatible with a pointer type DEST&lowbar;TYPE&ast; when either SOURCE&lowbar;TYPE&ast; is convertible to DEST&lowbar;TYPE&ast; or SOURCE&lowbar;TYPE is U&lsqb;N&rsqb;and DEST&lowbar;TYPE is cv U&lsqb;&rsqb;&period;&quot;
| xref:BloombergLP/bslstl/SharedPtr_IsPointerConvertible.adoc[`SharedPtr&lowbar;IsPointerConvertible`] 
| Forward declaration of component&hyphen;private type trait to indicate whether a pointer to a `SOURCE&lowbar;TYPE` can be converted to a pointer to a `DEST&lowbar;TYPE`&period; &lsqb;util&period;smartptr&period;shared&period;const&rsqb;&sol;8 says &quot;either DEST&lowbar;TYPE is U&lsqb;N&rsqb;and SOURCE&lowbar;TYPE(_)&lsqb;&rsqb;N&rsqb;is convertible to DEST&lowbar;TYPE_, or DEST&lowbar;TYPE is U&lsqb;&rsqb;and SOURCE&lowbar;TYPE(_)&lsqb;&rsqb;&rsqb;is convertible to DEST&lowbar;TYPE_&quot;&period;
| xref:BloombergLP/bslstl/SharedPtr_RepFromExistingSharedPtr.adoc[`SharedPtr&lowbar;RepFromExistingSharedPtr`] 
| This `struct` is for internal use only, providing a tag for `shared&lowbar;ptr` constructors to recognize that a passed `SharedPtrRep` was obtained from an existing `shared&lowbar;ptr` object&period;
| xref:BloombergLP/bslstl/SharedPtr_RepProctor.adoc[`SharedPtr&lowbar;RepProctor`] 
| This `class` implements a proctor that, unless its `release` method has previously been invoked, automatically releases a reference held by the `bslma&colon;&colon;SharedPtrRep` object that is supplied at construction&period;
| xref:BloombergLP/bslstl/SharedPtr_TestIsCallable.adoc[`SharedPtr&lowbar;TestIsCallable`] 
| Component&hyphen;private metafunction testing whether `FUNCTOR` is callable&period;
| xref:BloombergLP/bslstl/SimplePool.adoc[`SimplePool`] 
| This class provides methods for creating and deleting nodes using the appropriate allocator&hyphen;traits of the parameterized `ALLOCATOR`&period; This type is intended to be used as a private base&hyphen;class for a node&hyphen;based container, in order to take advantage of the empty&hyphen;base&hyphen;class optimization in the case where the base&hyphen;class has 0 size (as may the case if the parameterized `ALLOCATOR` is not a `bslma&colon;&colon;Allocator`)&period;
| xref:BloombergLP/bslstl/SimplePool_Type.adoc[`SimplePool&lowbar;Type`] 
| For use only by `bslstl&colon;&colon;SimplePool`&period; This `struct` provides a namespace for a set of types used to define the base&hyphen;class of a `SimplePool`&period; The parameterized `ALLOCATOR` is bound to `MaxAlignedType` to ensure the allocated memory is maximally aligned&period;
| xref:BloombergLP/bslstl/StdExceptUtil.adoc[`StdExceptUtil`] 
| This `struct` provides a namespace for `static` utility functions that throw standard library exceptions&period;
| xref:BloombergLP/bslstl/StopCallback_CallbackStorage-06.adoc[`StopCallback&lowbar;CallbackStorage`] 
| The primary class template stores an object of non&hyphen;reference type given by the template parameter `t&lowbar;CALLBACK`&period; (That is, the primary template provides the implementation only when `t&lowbar;IS&lowbar;REFERENCE` is `false`&period;)
| xref:BloombergLP/bslstl/StopCallback_NoAlloc.adoc[`StopCallback&lowbar;NoAlloc`] 
| This component&hyphen;private empty class is used as a dummy &quot;allocator&quot; when `bsl&colon;&colon;stop&lowbar;callback` wraps a non&hyphen;allocator&hyphen;aware type&period;
| xref:BloombergLP/bslstl/StopCallback_Node.adoc[`StopCallback&lowbar;Node`] 
| This component&hyphen;private class is used to implement `bsl&colon;&colon;stop&lowbar;callback`&period; It overrides the virtual `invoke` method of `bslstl&colon;&colon;StopStateCallbackNode`, which allows it to be registered and invoked by `bslstl&colon;&colon;StopState`&period;
| xref:BloombergLP/bslstl/StopState.adoc[`StopState`] 
| Shared stop state that tracks a stop request and registered callbacks&period;
| xref:BloombergLP/bslstl/StopStateCallbackNode.adoc[`StopStateCallbackNode`] 
| Intrusive list node that stores a registered stop&hyphen;callback invocation&period;
| xref:BloombergLP/bslstl/StopState_ListNode.adoc[`StopState&lowbar;ListNode`] 
| This component&hyphen;private class represents a node in a doubly&hyphen;linked list&period;
| xref:BloombergLP/bslstl/StopToken_RefCountedState.adoc[`StopToken&lowbar;RefCountedState`] 
| This component&hyphen;private struct adds a reference count to the internal `StopState` class&period; This reference count represents the number of `bsl&colon;&colon;stop&lowbar;source` objects that refer to the stop state (NOT the total number of objects that refer to the stop state)&period;
| xref:BloombergLP/bslstl/StringRefData-04.adoc[`StringRefData`] 
| This class is an intermediate link between `bslstl&colon;&colon;StringRef` used in BDE and `bsl&colon;&colon;string&lowbar;view` and is kept only for compatibility with legacy code&period;
| xref:BloombergLP/bslstl/StringRefImp-0c.adoc[`StringRefImp`] 
| This class provides a reference&hyphen;semantic&hyphen;like (see below) mechanism that allows `const` `std&colon;&colon;string` values, which are represented externally as either an `std&colon;&colon;string` or null&hyphen;terminated c&hyphen;style string (or parts thereof), to be treated both uniformly and efficiently when passed as an argument to a function in which the string&apos;s length will be needed&period; The interface of this class provides a subset of accessor methods found on `std&colon;&colon;string` (but none of the manipulators) &hyphen;&hyphen; all of which apply to the referenced string&period; But, because only non&hyphen;modifiable access is afforded to the referenced string value, each of the manipulators on this type &hyphen;&hyphen; assignment in particular &hyphen;&hyphen; apply to this string&hyphen;reference object itself (as if it had pointer semantics)&period; Hence, this class has a hybrid of reference&hyphen; and pointer&hyphen;semantics&period;
| xref:BloombergLP/bslstl/StringRefImp_CompareUtil.adoc[`StringRefImp&lowbar;CompareUtil`] 
| &lsqb;*PRIVATE*&rsqb;This class provides a namespace for private comparison implementation functions&period;
| xref:BloombergLP/bslstl/SyncBufBase.adoc[`SyncBufBase`] 
| Allocator&hyphen;independent base of `basic&lowbar;syncbuf`&period; Also this is used by the manipulators&colon; `emit&lowbar;on&lowbar;flush`, `noemit&lowbar;on&lowbar;flush`, `flush&lowbar;emit` (the `ALLOCATOR` template argument cannot be deduced from `basic&lowbar;ostream&lt;CHAR&lowbar;TYPE, CHAR&lowbar;TRAITS&gt;`)&period;
| xref:BloombergLP/bslstl/SyncBufBaseUtil.adoc[`SyncBufBaseUtil`] 
| Internal utils&period;
| xref:BloombergLP/bslstl/TreeIterator.adoc[`TreeIterator`] 
| This class provides an STL&hyphen;conforming bidirectional iterator over the ordered `bslalg&colon;&colon;RbTreeNode` objects in a binary tree (see section &lsqb;24&period;2&period;6 bidirectional&period;iterators&rsqb;of the C&plus;&plus;11 standard)&period; A `TreeIterator` provides access to values of the parameterized `VALUE`, over a binary tree composed of nodes of the parameterized `NODE` (which must derive from `bslalg&colon;&colon;RbTreeNode`)&period; The parameterized `DIFFERENCE&lowbar;TYPE` determines the standard required `difference&lowbar;type` of the iterator, without requiring access to the allocator&hyphen;traits for the node&period; The behavior of the `operator&ast;` method is undefined unless the iterator is at a valid position in the tree (i&period;e&period;, not the `end`) and the referenced element has not been removed since the iterator was constructed&period; `NODE` must derives from `bslalg&colon;&colon;RbTreeNode`, and contains a `value` method that returns a reference providing modifiable access to a type that is convertible to the parameterized `VALUE` (e&period;g&period;, a `bslstl&colon;&colon;TreeNode` object)&period;
| xref:BloombergLP/bslstl/TreeNode.adoc[`TreeNode`] 
| This POD&hyphen;like `class` describes a node suitable for use in a red&hyphen;black binary search tree of values of the parameterized `VALUE`&period; This class is a &quot;POD&hyphen;like&quot; to facilitate efficient allocation and use in the context of a container implementation&period; In order to meet the essential requirements of a POD type, this `class` does not define a constructor or destructor&period; The manipulator, `value`, returns a modifiable reference to `d&lowbar;value` so that it may be constructed in&hyphen;place by the appropriate `bsl&colon;&colon;allocator&lowbar;traits` object&period;
| xref:BloombergLP/bslstl/TreeNodePool.adoc[`TreeNodePool`] 
| This class provides methods for creating and deleting nodes using the appropriate allocator traits of the (template parameter) type `ALLOCATOR`&period; This type is intended to be used as a private base&hyphen;class for a node&hyphen;based container, in order to take advantage of the empty&hyphen;base&hyphen;class optimization in the case where the base class has 0 size (as may be the case if the (template parameter) type `ALLOCATOR` is not a `bslma&colon;&colon;Allocator`)&period;
| xref:BloombergLP/bslstl/UnorderedMapKeyConfiguration-0f.adoc[`UnorderedMapKeyConfiguration`] 
| This `struct` provides a namespace for key&hyphen;configuration utilities used by `bsl&colon;&colon;unordered&lowbar;map` to extract keys from stored value objects&period;
| xref:BloombergLP/bslstl/UnorderedSetKeyConfiguration.adoc[`UnorderedSetKeyConfiguration`] 
| The `UnorderedSetKeyConfiguration` type&period;
| xref:BloombergLP/bslstl/Variant_AllocatorBase-0e.adoc[`Variant&lowbar;AllocatorBase`] 
| This component&hyphen;private struct keeps track of the allocator for a `bsl&colon;&colon;variant` object&period; The primary template is used when the `variant` is not allocator&hyphen;aware (because it has no allocator&hyphen;aware alternatives)&period;
| xref:BloombergLP/bslstl/Variant_ArrayHelper.adoc[`Variant&lowbar;ArrayHelper`] 
| This component&hyphen;private struct is used to check whether an alternative given by (template parameter) `t&lowbar;TYPE` is a potential match for an argument of a `bsl&colon;&colon;variant` constructor or assignment operator that does not take an explicitly specified alternative type&period; The standard allows such conversion only when the declaration `t&lowbar;TYPE d&lowbar;x&lsqb;&rsqb;&equals; &lcub;expr&rcub;&semi;` is valid, where `expr` is the (forwarded) argument expression&period;
| xref:BloombergLP/bslstl/Variant_AssignsFromType.adoc[`Variant&lowbar;AssignsFromType`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if (template parameter) `t&lowbar;TYPE` is neither a tag type nor the type (template parameter) `t&lowbar;VARIANT` (modulo cv&hyphen;qualification), there is a unique best match alternative in `t&lowbar;VARIANT` for `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;()`, and that alternative is constructible and assignable from `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;()`&semi; otherwise, this metafunction is derived from `bsl&colon;&colon;false&lowbar;type`&period;
| xref:BloombergLP/bslstl/Variant_Base.adoc[`Variant&lowbar;Base`] 
| This component&hyphen;private struct defines the data representation of `bsl&colon;&colon;variant` and contains the implementations of its special member functions (which must be defaulted in `bsl&colon;&colon;variant` itself)&period; This class also contains implementations of additional constructors and methods needed for the correct functionality of the `variant` class hierarchy&period;
| xref:BloombergLP/bslstl/Variant_CVQualAlt.adoc[`Variant&lowbar;CVQualAlt`] 
| This component&hyphen;private metafunction calculates the alternative type at index (template parameter) `t&lowbar;INDEX` in (template parameter) `t&lowbar;VARIANT`, where the cv&hyphen; and ref&hyphen;qualifiers of `t&lowbar;VARIANT` are added to the alternative type&period; This metafunction is used to calculate the return type of `bsl&colon;&colon;visit`&period;
| xref:BloombergLP/bslstl/Variant_CheckForP1957R2-0e0.adoc[`Variant&lowbar;CheckForP1957R2`] 
| This component&hyphen;private metafunction checks whether a conversion from a pointer type to (template parameter) `t&lowbar;TYPE` is narrowing&period; It is instantiated only for `bool`, and its behavior depends on whether the compiler has implemented P1957R2&period;
| xref:BloombergLP/bslstl/Variant_ConstructFromStdTag.adoc[`Variant&lowbar;ConstructFromStdTag`] 
| This component&hyphen;private tag type is used as a parameter type for constructors of `Variant&lowbar;Base` that accept a `std&colon;&colon;variant`&period;
| xref:BloombergLP/bslstl/Variant_ConstructsFromType.adoc[`Variant&lowbar;ConstructsFromType`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if (template parameter) `t&lowbar;TYPE` is neither a tag type, nor the type (template parameter) `t&lowbar;VARIANT` (modulo cv&hyphen;qualification), nor the corresponding (possibly cv&hyphen;qualified) `std&colon;&colon;variant` type, there is a unique best match alternative in `t&lowbar;VARIANT` for `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;()`, and that alternative is constructible from `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;()`&semi; otherwise, this metafunction is derived from `bsl&colon;&colon;false&lowbar;type`&period;
| xref:BloombergLP/bslstl/Variant_ConvertIndex.adoc[`Variant&lowbar;ConvertIndex`] 
| This component&hyphen;private metafunction computes the index of the alternative in (template parameter) `t&lowbar;VARIANT` that is the &quot;unique&quot; best match for conversion from `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;()`, or `bsl&colon;&colon;variant&lowbar;npos` if there is no such alternative&period; An alternative that occurs multiple times in `t&lowbar;VARIANT` (possibly with varying cv&hyphen;qualifications) is considered to occur only once&semi; thus, if all alternatives that are tied for the best match are the same type (possibly with varying cv&hyphen;qualifications), the result is the lowest index at which that type (with any cv&hyphen;qualification) occurs&period;
| xref:BloombergLP/bslstl/Variant_ConvertsWithoutNarrowing-0b.adoc[`Variant&lowbar;ConvertsWithoutNarrowing`] 
| Metafunction that is `true&lowbar;type` when `t&lowbar;SOURCE` converts to `t&lowbar;DEST` without narrowing, and `false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/Variant_CopyAssignBase-08.adoc[`Variant&lowbar;CopyAssignBase`] 
| This component&hyphen;private class has deleted copy assignment operator if (template parameter) `t&lowbar;ISCOPYASSIGNABLE` is `false`&period; All other special member functions are defaulted&period;
| xref:BloombergLP/bslstl/Variant_CopyAssignVisitor.adoc[`Variant&lowbar;CopyAssignVisitor`] 
| This component&hyphen;private class is a visitor that is used to implement the copy assignment operator for `bsl&colon;&colon;variant`&period;
| xref:BloombergLP/bslstl/Variant_CopyConstructVisitor.adoc[`Variant&lowbar;CopyConstructVisitor`] 
| This component&hyphen;private class is a visitor that is used to implement the copy constructor for `bsl&colon;&colon;variant`&period;
| xref:BloombergLP/bslstl/Variant_CopyConstructorBase-01.adoc[`Variant&lowbar;CopyConstructorBase`] 
| This component&hyphen;private class has deleted copy constructor if (template parameter) `t&lowbar;ISCOPYCONSTRUCTIBLE` is `false`&period; All other special member functions are defaulted&period;
| xref:BloombergLP/bslstl/Variant_CorrespondingStdVariant-02.adoc[`Variant&lowbar;CorrespondingStdVariant`] 
| This component&hyphen;private metafunction declares a member `type` that is an alias to the `std&colon;&colon;variant` type corresponding to `t&lowbar;TYPE` if one exists, and `void` otherwise&period;
| xref:BloombergLP/bslstl/Variant_CountCVType-03.adoc[`Variant&lowbar;CountCVType`] 
| This component&hyphen;private metafunction calculates the number of times (template parameter) `t&lowbar;TYPE` occurs in (template parameters) `t&lowbar;HEAD, t&lowbar;TAIL&period;&period;&period;`, where two types that differ only in top&hyphen;level cv&hyphen;qualification are considered to be the same&period;
| xref:BloombergLP/bslstl/Variant_CountType-0d.adoc[`Variant&lowbar;CountType`] 
| This component&hyphen;private metafunction calculates the number of times (template parameter) `t&lowbar;TYPE` occurs in (template parameters) `t&lowbar;HEAD, t&lowbar;TAIL&period;&period;&period;`&period; An alternative must have the same cv&hyphen;qualification as `t&lowbar;TYPE` in order to be counted&period;
| xref:BloombergLP/bslstl/Variant_DataImp.adoc[`Variant&lowbar;DataImp`] 
| This component&hyphen;private class manages an object of type (template parameter) `t&lowbar;TYPE` that is stored in a `variant` object&period; Note that `t&lowbar;TYPE` may be const&hyphen;qualified, in which case the internally stored object is not `const`, but the interface of this class prevents modification thereof&period;
| xref:BloombergLP/bslstl/Variant_DestructorVisitor.adoc[`Variant&lowbar;DestructorVisitor`] 
| This component&hyphen;private struct is a visitor that destroys the active alternative of the visited `variant` object&period;
| xref:BloombergLP/bslstl/Variant_EqualVisitor.adoc[`Variant&lowbar;EqualVisitor`] 
| Component&hyphen;private visitor for variant `&equals;&equals;` comparison&period;
| xref:BloombergLP/bslstl/Variant_Function-0b.adoc[`Variant&lowbar;Function`] 
| Component&hyphen;private vtable entry invoking a visitor on alternative `t&lowbar;INDEX`&period;
| xref:BloombergLP/bslstl/Variant_FunctionId.adoc[`Variant&lowbar;FunctionId`] 
| Component&hyphen;private vtable entry invoking a tagged visitor on alternative `t&lowbar;INDEX`&period;
| xref:BloombergLP/bslstl/Variant_GreaterOrEqualVisitor.adoc[`Variant&lowbar;GreaterOrEqualVisitor`] 
| Component&hyphen;private visitor for variant `&gt;&equals;` comparison&period;
| xref:BloombergLP/bslstl/Variant_GreaterThanVisitor.adoc[`Variant&lowbar;GreaterThanVisitor`] 
| Component&hyphen;private visitor for variant `&gt;` comparison&period;
| xref:BloombergLP/bslstl/Variant_HasUniqueCVType-06.adoc[`Variant&lowbar;HasUniqueCVType`] 
| This component&hyphen;private metafunction derives from `bsl&colon;&colon;true&lowbar;type` if (template parameter) `t&lowbar;TYPE` occurs exactly once as an alternative of (template parameter) `t&lowbar;VARIANT`, and `bsl&colon;&colon;false&lowbar;type` otherwise, where two types that differ only in top&hyphen;level cv&hyphen;qualification are considered to be the same&period; The primary template (used when `t&lowbar;VARIANT` is not a `bsl&colon;&colon;variant`) is not defined&period;
| xref:BloombergLP/bslstl/Variant_HasUniqueType-0d.adoc[`Variant&lowbar;HasUniqueType`] 
| This component&hyphen;private metafunction derives from `bsl&colon;&colon;true&lowbar;type` if (template parameter) `t&lowbar;TYPE` occurs exactly once as an alternative of (template parameter) `t&lowbar;VARIANT`, and `bsl&colon;&colon;false&lowbar;type` otherwise&period; An alternative must have the same cv&hyphen;qualification as `t&lowbar;TYPE` in order to be counted&period; The primary template (used when `t&lowbar;VARIANT` is not a `bsl&colon;&colon;variant`) is not defined&period;
| xref:BloombergLP/bslstl/Variant_HashVisitor.adoc[`Variant&lowbar;HashVisitor`] 
| This component&hyphen;private class is a visitor that is used to implement `hashAppend` for `bsl&colon;&colon;variant`&period;
| xref:BloombergLP/bslstl/Variant_IsAlternativeConstructibleFrom-0e.adoc[`Variant&lowbar;IsAlternativeConstructibleFrom`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if there is a unique best match alternative in (template parameter) `t&lowbar;VARIANT` for &apos;std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;() and that alternative is constructible from `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;(), and `bsl&colon;&colon;false&lowbar;type&apos; otherwise&period;
| xref:BloombergLP/bslstl/Variant_IsAssignable.adoc[`Variant&lowbar;IsAssignable`] 
| This component&hyphen;private metafunction derives from `std&colon;&colon;is&lowbar;assignable&lt;t&lowbar;LHS, t&lowbar;RHS&gt;` in C&plus;&plus;11 and later, and `bsl&colon;&colon;true&lowbar;type` in C&plus;&plus;03&period;
| xref:BloombergLP/bslstl/Variant_IsBitwiseMoveableAll-0c.adoc[`Variant&lowbar;IsBitwiseMoveableAll`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if all template arguments are bitwise moveable, and from `bsl&colon;&colon;false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/Variant_IsConstructible.adoc[`Variant&lowbar;IsConstructible`] 
| This component&hyphen;private metafunction derives from `std&colon;&colon;is&lowbar;constructible&lt;t&lowbar;TO, t&lowbar;FROM&gt;` in C&plus;&plus;11 and later, and `bsl&colon;&colon;true&lowbar;type` in C&plus;&plus;03&period;
| xref:BloombergLP/bslstl/Variant_IsCopyAssignableAll-0d.adoc[`Variant&lowbar;IsCopyAssignableAll`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if all template parameters are copy assignable, and `bsl&colon;&colon;false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/Variant_IsCopyConstructibleAll-03.adoc[`Variant&lowbar;IsCopyConstructibleAll`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if all template parameters are copy constructible, and `bsl&colon;&colon;false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/Variant_IsMoveAssignableAll-0e.adoc[`Variant&lowbar;IsMoveAssignableAll`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if all template parameters are move assignable, and `bsl&colon;&colon;false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/Variant_IsMoveConstructibleAll-05.adoc[`Variant&lowbar;IsMoveConstructibleAll`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if all template parameters are move constructible, and `bsl&colon;&colon;false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/Variant_IsSameReturnType-02.adoc[`Variant&lowbar;IsSameReturnType`] 
| This component&hyphen;private metafunction derives from `bsl&colon;&colon;true&lowbar;type` if, for each alternative `ALTi` in (template parameter) `t&lowbar;VARIANT` with index less than or equal to (template parameter) `t&lowbar;INDEX`, `decltype(std&colon;&colon;declval&lt;t&lowbar;VISITOR&gt;(std&colon;&colon;declval&lt;ALTi&gt;()))` is `t&lowbar;RET`&semi; otherwise, this metafunction derives from `bsl&colon;&colon;false&lowbar;type`&period; Note that `ALTi` has the cv&hyphen; and ref&hyphen;qualifiers from `t&lowbar;VARIANT` added to it&period; This metafunction is used to determine whether invoking the visitor results in the same type and value category for all alternatives&period;
| xref:BloombergLP/bslstl/Variant_IsTag-01.adoc[`Variant&lowbar;IsTag`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if (template parameter) `t&lowbar;TYPE` is not a tag type&period; This metafunction requires any cv and ref qualifications to be removed from the queried type&period;
| xref:BloombergLP/bslstl/Variant_LessOrEqualVisitor.adoc[`Variant&lowbar;LessOrEqualVisitor`] 
| Component&hyphen;private visitor for variant `&lt;&equals;` comparison&period;
| xref:BloombergLP/bslstl/Variant_LessThanVisitor.adoc[`Variant&lowbar;LessThanVisitor`] 
| Component&hyphen;private visitor for variant `&lt;` comparison&period;
| xref:BloombergLP/bslstl/Variant_MoveAssignBase-05.adoc[`Variant&lowbar;MoveAssignBase`] 
| This component&hyphen;private class has deleted move assignment operator if (template parameter) `t&lowbar;ISMOVEASSIGNABLE` is `false`&period; All other special member functions are defaulted&period;
| xref:BloombergLP/bslstl/Variant_MoveAssignVisitor.adoc[`Variant&lowbar;MoveAssignVisitor`] 
| This component&hyphen;private class is a visitor that is used to implement the move assignment operator for `bsl&colon;&colon;variant`&period;
| xref:BloombergLP/bslstl/Variant_MoveConstructVisitor.adoc[`Variant&lowbar;MoveConstructVisitor`] 
| This component&hyphen;private class is a visitor that is used to implement the move constructor for `bsl&colon;&colon;variant`&period;
| xref:BloombergLP/bslstl/Variant_MoveConstructorBase-01.adoc[`Variant&lowbar;MoveConstructorBase`] 
| This component&hyphen;private class has deleted move constructor if (template parameter) `t&lowbar;ISMOVECONSTRUCTIBLE` is `false`&period; All other special member functions are defaulted&period;
| xref:BloombergLP/bslstl/Variant_NoSuchType.adoc[`Variant&lowbar;NoSuchType`] 
| This component&hyphen;private trivial tag type is used to distinguish between arguments passed by a user, and an `enable&lowbar;if` argument&period; It is not default constructible so the following construction never invokes a constrained single parameter constructor&colon; &grave; struct SomeType &lcub; SomeType(int, const std&colon;&colon;string &amp;s &equals; &quot;default&quot;)&lcub;&rcub; &rcub;&semi;
| xref:BloombergLP/bslstl/Variant_NotEqualVisitor.adoc[`Variant&lowbar;NotEqualVisitor`] 
| Component&hyphen;private visitor for variant `!&equals;` comparison&period;
| xref:BloombergLP/bslstl/Variant_OverloadHelper-05.adoc[`Variant&lowbar;OverloadHelper`] 
| This component&hyphen;private metafunction provides a member typedef `Index` representing the value that should be computed by `Variant&lowbar;ConvertIndex`&period; The primary template is instantiated when the partial specialization below is not viable because no viable alternative exists for the conversion or because the best match is not &quot;unique&quot; (see the documentation of `Variant&lowbar;ConvertIndex` for an explanation)&period;
| xref:BloombergLP/bslstl/Variant_OverloadSetImp-07.adoc[`Variant&lowbar;OverloadSetImp`] 
| This component&hyphen;private metafunction computes an overload set consisting of one function, named `candidate`, for each type in (template parameters) `t&lowbar;HEAD, t&lowbar;TAIL&period;&period;&period;`, having one parameter of that type&period; Each such function participates in overload resolution only when `std&colon;&colon;declval&lt;t&lowbar;SRC&gt;()` is convertible to the alternative without narrowing, and returns `bsl&colon;&colon;integral&lowbar;constant&lt;t&lowbar;INDEX &plus; i&gt;`, where `i` is the zero&hyphen;based index of the corresponding alternative&period; Note that a type that occurs multiple times in `t&lowbar;HEAD, t&lowbar;TAIL&period;&period;&period;` (possibly with varying cv&hyphen;qualifications) will only result in the generation of a single candidate&period; This implementation relies on expression SFINAE, `decltype`, `std&colon;&colon;declval`, and P1957R2&semi; since these features are not available in C&plus;&plus;03, the C&plus;&plus;03 version requires an exact match modulo cv&hyphen;qualification&period;
| xref:BloombergLP/bslstl/Variant_SMFBase.adoc[`Variant&lowbar;SMFBase`] 
| This component&hyphen;private class has special member functions that are either deleted or defaulted according to the specified template parameters&period;
| xref:BloombergLP/bslstl/Variant_SwapVisitor.adoc[`Variant&lowbar;SwapVisitor`] 
| This component&hyphen;private class is a visitor that is used to implement `bsl&colon;&colon;variant&colon;&colon;swap`&period;
| xref:BloombergLP/bslstl/Variant_TypeToIndex-0d.adoc[`Variant&lowbar;TypeToIndex`] 
| This component&hyphen;private metafunction calculates the zero&hyphen;based index of (template parameter) `t&lowbar;TYPE` in the list of alternatives in (template parameter) `t&lowbar;VARIANT`, or `bsl&colon;&colon;variant&lowbar;npos` if there is no such alternative&period; The primary template (used when `t&lowbar;VARIANT` is not a `bsl&colon;&colon;variant`) is not defined&period;
| xref:BloombergLP/bslstl/Variant_TypeToIndexImpl-0a.adoc[`Variant&lowbar;TypeToIndexImpl`] 
| This component&hyphen;private metafunction provides implementation for `Variant&lowbar;TypeToIndex`&period; It evaluates to `t&lowbar;INDEX &plus; i` where `i` is the zero&hyphen;based index of (template parameter) `t&lowbar;TYPE` in (template parameters) `t&lowbar;HEAD, t&lowbar;TAIL&period;&period;&period;`, or `bsl&colon;&colon;variant&lowbar;npos` if `t&lowbar;TYPE` is not found&period;
| xref:BloombergLP/bslstl/Variant_Union-0a.adoc[`Variant&lowbar;Union`] 
| This component&hyphen;private union can hold a `Variant&lowbar;DataImp` object for any alternative in (template parameters) `t&lowbar;TYPES&period;&period;&period;`&period; The primary template is used when `t&lowbar;TYPES&period;&period;&period;` is empty&period;
| xref:BloombergLP/bslstl/Variant_UsesBslmaAllocatorAny-0e.adoc[`Variant&lowbar;UsesBslmaAllocatorAny`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if at least one template argument uses an allocator, and from `bsl&colon;&colon;false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/Variant_VTable-09.adoc[`Variant&lowbar;VTable`] 
| This component&hyphen;private struct computes an array in which element `i` is a pointer to `Variant&lowbar;Function&lt;t&lowbar;RET, t&lowbar;VISITOR, t&lowbar;VARIANT, i&gt;&colon;&colon;functionImpl`, defined above as a function that invokes a `t&lowbar;VISITOR` with alternative `i` of `t&lowbar;VARIANT` and implicitly converts the return type to `t&lowbar;RET`&period;
| xref:BloombergLP/bslstl/Variant_VTableId-05.adoc[`Variant&lowbar;VTableId`] 
| This component&hyphen;private struct computes an array in which element `i` is a pointer to `Variant&lowbar;FunctionId&lt;t&lowbar;RET, t&lowbar;VISITOR, t&lowbar;VARIANT, i&gt;&colon;&colon;functionImpl`, defined above as a function that invokes a `t&lowbar;VISITOR` with a tag representing `i` and alternative `i` of `t&lowbar;VARIANT`, implicitly converting the return type to `t&lowbar;RET`&period; Implementation note&colon; The constexpr static maps of pointers defined by `Variant&lowbar;VTable` and this class have deliberately been defined in two different classes as having them in the same class caused issues with Clang and Microsoft Visual C&plus;&plus;&period;
| xref:BloombergLP/bslstl/Variant_isAlternativeAssignableFrom-07.adoc[`Variant&lowbar;isAlternativeAssignableFrom`] 
| This component&hyphen;private metafunction is derived from `bsl&colon;&colon;true&lowbar;type` if there is a unique best match alternative in (template parameter) `t&lowbar;VARIANT` for `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;()` and that alternative is both constructible and assignable from `std&colon;&colon;declval&lt;t&lowbar;TYPE&gt;()`, and `bsl&colon;&colon;false&lowbar;type` otherwise&period;
| xref:BloombergLP/bslstl/to_chars_result.adoc[`to&lowbar;chars&lowbar;result`] 
| Result type for the `to&lowbar;chars` function&period;
|===


== Type Aliases

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslstl/Pair_IndexSequence.adoc[`Pair&lowbar;IndexSequence`] 
| `Pair&lowbar;IndexSequence` is an alias to the `bslmf&colon;&colon;IntegerSequence` class template specialized for the common case of the integer sequence were the element type `T` is `std&colon;&colon;size&lowbar;t`&period;
| xref:BloombergLP/bslstl/Pair_MakeIndexSequence.adoc[`Pair&lowbar;MakeIndexSequence`] 
| `Pair&lowbar;MakeIndexSequence` is an alias template to the `bslmf&colon;&colon;MakeIntegerSequence` meta&hyphen;function specialized for the common case of the integer sequence were the element type `T` is `std&colon;&colon;size&lowbar;t`&period;
| xref:BloombergLP/bslstl/StringRef.adoc[`StringRef`] 
| This `typedef` is an alias to `StringRefImp&lt;char&gt;`&period;
| xref:BloombergLP/bslstl/StringRefWide.adoc[`StringRefWide`] 
| Wide&hyphen;character string ref type (`StringRefImp&lt;wchar&lowbar;t&gt;`)&period;
|===


== Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslstl/hashAppend.adoc[`hashAppend`] 
| Pass the specified `input` to the specified `hashAlg`
| xref:BloombergLP/bslstl/operator_plus-04.adoc[`operator&plus;`] 
| Addition operators
| xref:BloombergLP/bslstl/operator_inc-0e.adoc[`operator&plus;&plus;`] 
| Increment operators
| xref:BloombergLP/bslstl/operator_minus-08.adoc[`operator&hyphen;`] 
| Subtraction operators
| xref:BloombergLP/bslstl/operator_dec-00.adoc[`operator&hyphen;&hyphen;`] 
| Decrement operators
| xref:BloombergLP/bslstl/operator_rshift.adoc[`operator&gt;&gt;`] 
| Read quoted string from the specified `input` stream into the underlying string of the specified `object`&period; Note that the `object` here is `const` because the `QuotedStringFormatter` is designed to be returned as a temporary object from &apos;bsl&colon;&colon;quoted&grave;, serving as a proxy for the underlying string&period;
| xref:BloombergLP/bslstl/optional_acceptsBslOptional.adoc[`optional&lowbar;acceptsBslOptional`] 
| Component&hyphen;private constraint helper for `Optional&lowbar;DerivedFromBslOptional`&period;
| xref:BloombergLP/bslstl/optional_acceptsStdOptional.adoc[`optional&lowbar;acceptsStdOptional`] 
| Component&hyphen;private constraint helper for `Optional&lowbar;DerivedFromStdOptional`&period;
| xref:BloombergLP/bslstl/swap-010.adoc[`swap`] 
| `swap` overloads
| xref:BloombergLP/bslstl/to_chars.adoc[`to&lowbar;chars`] 
| Write the specified `value` into the character buffer `&lsqb;first, last)&rsqb;`&period;
| xref:BloombergLP/bslstl/variant_swapImpl-0a2.adoc[`variant&lowbar;swapImpl`] 
| `variant&lowbar;swapImpl` overloads
| xref:BloombergLP/bslstl/operator_lshift-02.adoc[`operator&lt;&lt;`] 
| Write the value of the specified `object` to the specified `output` stream&period;
| xref:BloombergLP/bslstl/operator_eq-0c1.adoc[`operator&equals;&equals;`] 
| Equality operators
| xref:BloombergLP/bslstl/operator_not_eq-0ac.adoc[`operator!&equals;`] 
| Inequality operators
| xref:BloombergLP/bslstl/operator_lt.adoc[`operator&lt;`] 
| Return `true` if (1) the specified `lhs` iterator refers to an element before the specified `rhs` iterator in the iteration sequence, or (2) `rhs` (and not `lhs`) has the past&hyphen;the&hyphen;end value for an iterator over this sequence, and `false` otherwise&period; The behavior is undefined unless `lhs` and `rhs` are iterators into the same underlying sequence&period;
| xref:BloombergLP/bslstl/operator_le.adoc[`operator&lt;&equals;`] 
| Return `true` if (1) the specified `lhs` iterator has the same value as the specified `rhs` iterator, or (2) `lhs` refers to an element before `rhs` in the iteration sequence, or (3) `rhs` has the past&hyphen;the&hyphen;end value for an iterator over this sequence, and `false` otherwise&period; The behavior is undefined unless `lhs` and `rhs` are iterators into the same underlying sequence&period;
| xref:BloombergLP/bslstl/operator_gt.adoc[`operator&gt;`] 
| Return `true` if (1) the specified `lhs` iterator refers to an element after the specified `rhs` iterator in the iteration sequence, or (2) `lhs` (and not `rhs`) has the past&hyphen;the&hyphen;end value for an iterator over this sequence, and `false` otherwise&period; The behavior is undefined unless `lhs` and `rhs` are iterators into the same underlying sequence&period;
| xref:BloombergLP/bslstl/operator_ge.adoc[`operator&gt;&equals;`] 
| Return `true` if (1) the specified `lhs` iterator has the same value as the specified `rhs` iterator, or (2) `lhs` has the past&hyphen;the&hyphen;end value for an iterator over this sequence, or (3) `lhs` refers to an element after `rhs` in the iteration sequence, and `false` otherwise&period; The behavior is undefined unless `lhs` and `rhs` are iterators into the same underlying sequence&period;
|===


== Variables

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslstl/variant_constructsFromStd.adoc[`variant&lowbar;constructsFromStd`] 
| This component&hyphen;private constexpr variable template is `true` if `t&lowbar;VARIANT` is a specialization of `bsl&colon;&colon;variant`, and `t&lowbar;STD&lowbar;VARIANT` is the `std&colon;&colon;variant` type (possibly with added cvref&hyphen;qualification) that has the same sequence of alternatives, and each alternative of `t&lowbar;VARIANT` is constructible from the corresponding alternative of `t&lowbar;STD&lowbar;VARIANT` (with cv&hyphen;qualification and value category matching that of `t&lowbar;STD&lowbar;VARIANT`)&period; Note that we use `bsl&colon;&colon;conjunction&lowbar;v` for its short&hyphen;circuiting properties&colon; if `t&lowbar;STD&lowbar;VARIANT` isn`t a `std&colon;&colon;variant&grave; (for example, if it`s a `bsl&colon;&colon;variant&grave;) we avoid recursing into the constraints of `bsl&colon;&colon;variant`&period;
|===


== Concepts

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslstl/IteratorUtil_ModernIterator.adoc[`IteratorUtil&lowbar;ModernIterator`] 
| Concept identifying iterators that expose an `iterator&lowbar;concept` type&period;
| xref:BloombergLP/bslstl/Optional_ConvertibleToBool.adoc[`Optional&lowbar;ConvertibleToBool`] 
| Component&hyphen;private concept modeling the exposition&hyphen;only `boolean&hyphen;testable` concept&period;
| xref:BloombergLP/bslstl/Optional_DerivedFromBslOptional.adoc[`Optional&lowbar;DerivedFromBslOptional`] 
| Component&hyphen;private concept that is satisfied when `t&lowbar;TYPE` derives from `bsl&colon;&colon;optional`&period;
| xref:BloombergLP/bslstl/Optional_DerivedFromOptional.adoc[`Optional&lowbar;DerivedFromOptional`] 
| This component&hyphen;private concept models whether a type is derived from one of `std&colon;&colon;optional` or `bsl&colon;&colon;optional`&period;
| xref:BloombergLP/bslstl/Optional_DerivedFromStdOptional.adoc[`Optional&lowbar;DerivedFromStdOptional`] 
| Component&hyphen;private concept that is satisfied when `t&lowbar;TYPE` derives from `std&colon;&colon;optional`&period;
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
