42/// * <a href="#bslma-type-and-origination"> Type and Origination </a>
43/// * <a href="#bslma-the-default-allocator"> The Default Allocator </a>
44/// * <a href="#bslma-interaction-with-other-packages"> Interaction With Other Packages </a>
45/// * <a href="#bslma-usage"> Usage </a>
46/// * <a href="#bslma-example-1-creating-a-type-that-uses-bslma-allocator"> Example 1: Creating a type that uses bslma::Allocator </a>
47/// * <a href="#bslma-example-2-implementing-templates-that-may-be-supplied-allocating-types"> Example 2: Implementing Templates That May Be Supplied Allocating Types </a>
48/// * <a href="#bslma-example-3-implementing-a-customized-allocator"> Example 3: Implementing a Customized Allocator </a>
49///
50/// # Purpose {#bslma-purpose}
51/// Provide allocators, guards, and other memory-management tools.
52///
53/// # Mnemonic {#bslma-mnemonic}
54/// Basic Standard Library Memory Allocators (bslma)
55///
56/// # Description {#bslma-description}
57/// The 'bslma' package provides an allocator protocol (i.e., a pure
58/// abstract interface) and a variety of concrete allocators derived from this
59/// protocol, as well as other memory-dispensing mechanisms and various guard
60/// constructs to prevent loss in case of exceptions. In addition, 'bslma' also
61/// provides a mechanism for installing a "default allocator" that will then be
62/// visible to all BDE and BDE-compliant code throughout that process. If this
63/// mechanism is not invoked explicitly, then an allocator that uses global 'new'
64/// and 'delete' is the BDE default allocator. This topic is discussed in more
941/// Again for simplicity the rest of the implementation is not provided.
942///
943/// ### Example 2: Implementing Templates That May Be Supplied Allocating Types {#bslma-example-2-implementing-templates-that-may-be-supplied-allocating-types}
944///
945/// When writing templatized code that may be parameterized on types that allocate
946/// memory it is often necessary to decide whether to pass through the
947/// user-supplied allocator to individual objects. Such code (and containers) can
948/// use the UsesBslmaAllocator trait defined in the bslma package to decide
949/// whether to pass the allocator to an object's constructor. An example of using
950/// this trait is provided below by showing a simplified parameterized object pool
951/// `class`:
952/// ```
953/// // ================
954/// // class ObjectPool
955/// // ================
956///
957/// /// This `class` provides a pool of reusable objects of the parameterized
958/// /// `TYPE` and assumes that the parameterized `TYPE` provides a default
959/// /// constructor, a destructor, and a `reset` method.
960/// template <typename TYPE>
961/// class ObjectPool {
962///
963/// // DATA
964/// bsl::list<TYPE *> d_objects; // list of managed objects
965/// bslma::Allocator *d_allocator_p; // memory allocator (held, not owned)
966///
967/// // PRIVATE CLASS METHODS
968///
969/// /// Construct an object of the specified `TYPE` that *does not*
970/// /// require an allocator to be passed to its constructor.
971/// TYPE *createObject(bsl::false_type);
972///
973/// /// Construct an object of the specified `TYPE` that *requires* an
974/// /// allocator to be passed to its constructor.
975/// TYPE *createObject(bsl::true_type);
976///
977/// public:
978/// // CREATORS
979///
980/// /// Create an object pool that invokes the default constructor of the
981/// /// parameterized `TYPE` to construct objects. The optionally
982/// /// specified `basicAllocator` is used to supply memory. If
983/// /// `basicAllocator` is 0, the currently installed default allocator