// bdld_datummaker.h                                                  -*-C++-*-
#ifndef INCLUDED_BDLD_DATUMMAKER
#define INCLUDED_BDLD_DATUMMAKER

//@PURPOSE: Provide a mechanism for easily creating `bdld::Datum` objects.
//
//@CLASSES:
//  bdld::DatumMaker: a mechanism for easily creating `bdld::Datum` objects
//
//@SEE_ALSO: bdld_datum
//
//@DESCRIPTION: This component defines a concrete mechanism, `DatumMaker` that
// allows `bdld::Datum` objects to be created with minimal syntax.
//
///Usage
///-----
// This section illustrates intended use of this component.
//
///Example 1: Testing of a function
/// - - - - - - - - - - - - - - - -
// Suppose we want to test a function, `numCount`, that returns the number of
// numeric elements in a `bdld::Datum` array.
//
// First we implement the function:
// ```
// bdld::Datum numCount(const bdld::Datum arrray)
// {
//     bdld::DatumArrayRef aRef = arrray.theArray();
//
//     int count = 0;
//
//     for (bdld::DatumArrayRef::SizeType i = 0; i < aRef.length(); ++i) {
//         if (aRef[i].isInteger()   ||
//             aRef[i].isInteger64() ||
//             aRef[i].isDouble()) {
//             ++count;
//         }
//     }
//
//     return bdld::Datum::createInteger(count);
// }
// ```
// Then, within the test driver for `numCount`, we define a `bdld::DatumMaker`,
// and use it to initialize an array to test `numCount`:
// ```
// bdld::DatumMaker m(&sa);
// ```
// Here, we create the array we want to use as an argument to `numCount`:
// ```
// bdld::Datum array = m.a(
//     m(),
//     m(bdld::DatumError(-1)),
//     m.a(
//         m(true),
//         m(false)),
//     m(42.0),
//     m(false),
//     m(0),
//     m(true),
//     m(bsls::Types::Int64(424242)),
//     m.m(
//         "firstName", "Bart",
//         "lastName",  "Simpson",
//         "age",       10
//     ),
//     m(bdlt::Date(2016, 10, 14)),
//     m(bdlt::Time(13, 00, 00, 000)),
//     m(bdlt::Datetime(2016, 10, 14, 13, 01, 30, 87)),
//     m(bdlt::DatetimeInterval(280, 13, 41, 12, 321)),
//     m("foobar")
// );
// ```
// Next we call the function with the array-`Datum` as its first argument:
// ```
// bdld::Datum retVal = numCount(array);
// ```
// Finally we verify the return value:
// ```
// assert(retVal.theInteger() == 3);
// ```

#include <bdlscm_version.h>

#include <bdld_datum.h>
#include <bdld_datumarraybuilder.h>
#include <bdld_datummapbuilder.h>
#include <bdld_datummapowningkeysbuilder.h>
#include <bdld_datumintmapbuilder.h>

#include <bdldfp_decimal.h>

#include <bslma_allocator.h>
#include <bslma_allocatorutil.h>
#include <bslma_bslallocator.h>
#include <bslma_usesbslmaallocator.h>

#include <bdlb_nullablevalue.h>

#include <bslmf_assert.h>

#include <bsls_review.h>

#include <bsls_assert.h>
#include <bsls_compilerfeatures.h>
#include <bsls_types.h>

namespace BloombergLP {
namespace bdld {

                              // ================
                              // class DatumMaker
                              // ================

/// This concrete mechanism class provides "sugar" for easily creating
/// `bdld::Datum` objects for testing.
class DatumMaker {

  public:
    // TYPES
    typedef bsl::allocator<> AllocatorType;

  private:
    // DATA
    AllocatorType d_allocator;  // allocator of dynamic memory

private:
    // NOT IMPLEMENTED
    DatumMaker(const DatumMaker&);
    DatumMaker& operator=(const DatumMaker&);

    // PRIVATE ACCESSORS

    /// This overload precludes an implicit (and unintended) conversion to
    /// `bool`.  This (unimplemented) function template should not be
    /// instantiated unless `operator()` is called with an unsupported type.
    template <class T> void operator()(T *) const;

    // PRIVATE ACCESSORS

    /// Do nothing, ends template recursion.
    void pushBackHelper(bdld::DatumArrayBuilder *) const;

    /// Do nothing, ends template recursion.
    void pushBackHelper(bdld::DatumMapBuilder *) const;

    /// Do nothing, ends template recursion.
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *) const;

    /// Do nothing, ends template recursion.
    void pushBackHelper(bdld::DatumIntMapBuilder *) const;

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES // $var-args=32

    /// `push_back` the specified `element` into the specified `builder`.
    template <typename TYPE>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element) const;

    /// `push_back` the specified `element` into the specified `builder`,
    /// then call `pushBackHelper` with the specified (variadic) `elements`.
    template <typename TYPE, typename... ELEMENTS>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS&...       elements) const;

    /// `push_back` the specified `key` and `value` pair (forming a
    /// property) into the specified `builder`.
    template <typename TYPE>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value) const;

    /// `push_back` the specified `key` and `value` pair (forming a
    /// property) into the specified `builder`, then call `pushBackHelper`
    /// with the specified (variadic) entries.
    template <typename TYPE, typename... ENTRIES>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES&...         entries) const;

    /// `push_back` the specified `key` and `value` pair (forming a
    /// property) into the specified `builder`.
    template <typename TYPE>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value) const;

    /// `push_back` the specified `key` and `value` pair (forming a
    /// property) into the specified `builder`, then call `pushBackHelper`
    /// with the specified (variadic) entries.
    template <typename TYPE, typename... ENTRIES>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES&...                entries) const;

    /// `push_back` the specified `key` and `value` pair (forming a
    /// property) into the specified `builder`.
    template <typename TYPE>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value) const;

    /// `push_back` the specified `key` and `value` pair (forming a
    /// property) into the specified `builder`, then call `pushBackHelper`
    /// with the specified (variadic) entries.
    template <typename TYPE, typename... ENTRIES>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        const ENTRIES&...         entries) const;

// IMPORTANT NOTE: The section below was manually modified to reduce the
// maximum number of parameters for the array builder to 16.
#else
    template <typename TYPE>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element
                        ) const;

    template <typename TYPE, typename ELEMENTS_01>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09,
                             typename ELEMENTS_10>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09,
                        const ELEMENTS_10&       elements_10
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09,
                             typename ELEMENTS_10,
                             typename ELEMENTS_11>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09,
                        const ELEMENTS_10&       elements_10,
                        const ELEMENTS_11&       elements_11
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09,
                             typename ELEMENTS_10,
                             typename ELEMENTS_11,
                             typename ELEMENTS_12>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09,
                        const ELEMENTS_10&       elements_10,
                        const ELEMENTS_11&       elements_11,
                        const ELEMENTS_12&       elements_12
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09,
                             typename ELEMENTS_10,
                             typename ELEMENTS_11,
                             typename ELEMENTS_12,
                             typename ELEMENTS_13>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09,
                        const ELEMENTS_10&       elements_10,
                        const ELEMENTS_11&       elements_11,
                        const ELEMENTS_12&       elements_12,
                        const ELEMENTS_13&       elements_13
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09,
                             typename ELEMENTS_10,
                             typename ELEMENTS_11,
                             typename ELEMENTS_12,
                             typename ELEMENTS_13,
                             typename ELEMENTS_14>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09,
                        const ELEMENTS_10&       elements_10,
                        const ELEMENTS_11&       elements_11,
                        const ELEMENTS_12&       elements_12,
                        const ELEMENTS_13&       elements_13,
                        const ELEMENTS_14&       elements_14
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09,
                             typename ELEMENTS_10,
                             typename ELEMENTS_11,
                             typename ELEMENTS_12,
                             typename ELEMENTS_13,
                             typename ELEMENTS_14,
                             typename ELEMENTS_15>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09,
                        const ELEMENTS_10&       elements_10,
                        const ELEMENTS_11&       elements_11,
                        const ELEMENTS_12&       elements_12,
                        const ELEMENTS_13&       elements_13,
                        const ELEMENTS_14&       elements_14,
                        const ELEMENTS_15&       elements_15
                        ) const;

    template <typename TYPE, typename ELEMENTS_01,
                             typename ELEMENTS_02,
                             typename ELEMENTS_03,
                             typename ELEMENTS_04,
                             typename ELEMENTS_05,
                             typename ELEMENTS_06,
                             typename ELEMENTS_07,
                             typename ELEMENTS_08,
                             typename ELEMENTS_09,
                             typename ELEMENTS_10,
                             typename ELEMENTS_11,
                             typename ELEMENTS_12,
                             typename ELEMENTS_13,
                             typename ELEMENTS_14,
                             typename ELEMENTS_15,
                             typename ELEMENTS_16>
    void pushBackHelper(bdld::DatumArrayBuilder *builder,
                        const TYPE&              element,
                        const ELEMENTS_01&       elements_01,
                        const ELEMENTS_02&       elements_02,
                        const ELEMENTS_03&       elements_03,
                        const ELEMENTS_04&       elements_04,
                        const ELEMENTS_05&       elements_05,
                        const ELEMENTS_06&       elements_06,
                        const ELEMENTS_07&       elements_07,
                        const ELEMENTS_08&       elements_08,
                        const ELEMENTS_09&       elements_09,
                        const ELEMENTS_10&       elements_10,
                        const ELEMENTS_11&       elements_11,
                        const ELEMENTS_12&       elements_12,
                        const ELEMENTS_13&       elements_13,
                        const ELEMENTS_14&       elements_14,
                        const ELEMENTS_15&       elements_15,
                        const ELEMENTS_16&       elements_16
                        ) const;

    template <typename TYPE>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18,
                        const ENTRIES_19&         entries_19,
                        const ENTRIES_20&         entries_20
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18,
                        const ENTRIES_19&         entries_19,
                        const ENTRIES_20&         entries_20,
                        const ENTRIES_21&         entries_21,
                        const ENTRIES_22&         entries_22
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18,
                        const ENTRIES_19&         entries_19,
                        const ENTRIES_20&         entries_20,
                        const ENTRIES_21&         entries_21,
                        const ENTRIES_22&         entries_22,
                        const ENTRIES_23&         entries_23,
                        const ENTRIES_24&         entries_24
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18,
                        const ENTRIES_19&         entries_19,
                        const ENTRIES_20&         entries_20,
                        const ENTRIES_21&         entries_21,
                        const ENTRIES_22&         entries_22,
                        const ENTRIES_23&         entries_23,
                        const ENTRIES_24&         entries_24,
                        const ENTRIES_25&         entries_25,
                        const ENTRIES_26&         entries_26
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26,
                             typename ENTRIES_27,
                             typename ENTRIES_28>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18,
                        const ENTRIES_19&         entries_19,
                        const ENTRIES_20&         entries_20,
                        const ENTRIES_21&         entries_21,
                        const ENTRIES_22&         entries_22,
                        const ENTRIES_23&         entries_23,
                        const ENTRIES_24&         entries_24,
                        const ENTRIES_25&         entries_25,
                        const ENTRIES_26&         entries_26,
                        const ENTRIES_27&         entries_27,
                        const ENTRIES_28&         entries_28
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26,
                             typename ENTRIES_27,
                             typename ENTRIES_28,
                             typename ENTRIES_29,
                             typename ENTRIES_30>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18,
                        const ENTRIES_19&         entries_19,
                        const ENTRIES_20&         entries_20,
                        const ENTRIES_21&         entries_21,
                        const ENTRIES_22&         entries_22,
                        const ENTRIES_23&         entries_23,
                        const ENTRIES_24&         entries_24,
                        const ENTRIES_25&         entries_25,
                        const ENTRIES_26&         entries_26,
                        const ENTRIES_27&         entries_27,
                        const ENTRIES_28&         entries_28,
                        const ENTRIES_29&         entries_29,
                        const ENTRIES_30&         entries_30
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26,
                             typename ENTRIES_27,
                             typename ENTRIES_28,
                             typename ENTRIES_29,
                             typename ENTRIES_30,
                             typename ENTRIES_31,
                             typename ENTRIES_32>
    void pushBackHelper(bdld::DatumMapBuilder    *builder,
                        const bslstl::StringRef&  key,
                        const TYPE&               value,
                        const ENTRIES_01&         entries_01,
                        const ENTRIES_02&         entries_02,
                        const ENTRIES_03&         entries_03,
                        const ENTRIES_04&         entries_04,
                        const ENTRIES_05&         entries_05,
                        const ENTRIES_06&         entries_06,
                        const ENTRIES_07&         entries_07,
                        const ENTRIES_08&         entries_08,
                        const ENTRIES_09&         entries_09,
                        const ENTRIES_10&         entries_10,
                        const ENTRIES_11&         entries_11,
                        const ENTRIES_12&         entries_12,
                        const ENTRIES_13&         entries_13,
                        const ENTRIES_14&         entries_14,
                        const ENTRIES_15&         entries_15,
                        const ENTRIES_16&         entries_16,
                        const ENTRIES_17&         entries_17,
                        const ENTRIES_18&         entries_18,
                        const ENTRIES_19&         entries_19,
                        const ENTRIES_20&         entries_20,
                        const ENTRIES_21&         entries_21,
                        const ENTRIES_22&         entries_22,
                        const ENTRIES_23&         entries_23,
                        const ENTRIES_24&         entries_24,
                        const ENTRIES_25&         entries_25,
                        const ENTRIES_26&         entries_26,
                        const ENTRIES_27&         entries_27,
                        const ENTRIES_28&         entries_28,
                        const ENTRIES_29&         entries_29,
                        const ENTRIES_30&         entries_30,
                        const ENTRIES_31&         entries_31,
                        const ENTRIES_32&         entries_32
                        ) const;

    template <typename TYPE>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18,
                        const ENTRIES_19&                entries_19,
                        const ENTRIES_20&                entries_20
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18,
                        const ENTRIES_19&                entries_19,
                        const ENTRIES_20&                entries_20,
                        const ENTRIES_21&                entries_21,
                        const ENTRIES_22&                entries_22
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18,
                        const ENTRIES_19&                entries_19,
                        const ENTRIES_20&                entries_20,
                        const ENTRIES_21&                entries_21,
                        const ENTRIES_22&                entries_22,
                        const ENTRIES_23&                entries_23,
                        const ENTRIES_24&                entries_24
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18,
                        const ENTRIES_19&                entries_19,
                        const ENTRIES_20&                entries_20,
                        const ENTRIES_21&                entries_21,
                        const ENTRIES_22&                entries_22,
                        const ENTRIES_23&                entries_23,
                        const ENTRIES_24&                entries_24,
                        const ENTRIES_25&                entries_25,
                        const ENTRIES_26&                entries_26
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26,
                             typename ENTRIES_27,
                             typename ENTRIES_28>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18,
                        const ENTRIES_19&                entries_19,
                        const ENTRIES_20&                entries_20,
                        const ENTRIES_21&                entries_21,
                        const ENTRIES_22&                entries_22,
                        const ENTRIES_23&                entries_23,
                        const ENTRIES_24&                entries_24,
                        const ENTRIES_25&                entries_25,
                        const ENTRIES_26&                entries_26,
                        const ENTRIES_27&                entries_27,
                        const ENTRIES_28&                entries_28
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26,
                             typename ENTRIES_27,
                             typename ENTRIES_28,
                             typename ENTRIES_29,
                             typename ENTRIES_30>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18,
                        const ENTRIES_19&                entries_19,
                        const ENTRIES_20&                entries_20,
                        const ENTRIES_21&                entries_21,
                        const ENTRIES_22&                entries_22,
                        const ENTRIES_23&                entries_23,
                        const ENTRIES_24&                entries_24,
                        const ENTRIES_25&                entries_25,
                        const ENTRIES_26&                entries_26,
                        const ENTRIES_27&                entries_27,
                        const ENTRIES_28&                entries_28,
                        const ENTRIES_29&                entries_29,
                        const ENTRIES_30&                entries_30
                        ) const;

    template <typename TYPE, typename ENTRIES_01,
                             typename ENTRIES_02,
                             typename ENTRIES_03,
                             typename ENTRIES_04,
                             typename ENTRIES_05,
                             typename ENTRIES_06,
                             typename ENTRIES_07,
                             typename ENTRIES_08,
                             typename ENTRIES_09,
                             typename ENTRIES_10,
                             typename ENTRIES_11,
                             typename ENTRIES_12,
                             typename ENTRIES_13,
                             typename ENTRIES_14,
                             typename ENTRIES_15,
                             typename ENTRIES_16,
                             typename ENTRIES_17,
                             typename ENTRIES_18,
                             typename ENTRIES_19,
                             typename ENTRIES_20,
                             typename ENTRIES_21,
                             typename ENTRIES_22,
                             typename ENTRIES_23,
                             typename ENTRIES_24,
                             typename ENTRIES_25,
                             typename ENTRIES_26,
                             typename ENTRIES_27,
                             typename ENTRIES_28,
                             typename ENTRIES_29,
                             typename ENTRIES_30,
                             typename ENTRIES_31,
                             typename ENTRIES_32>
    void pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                        const bslstl::StringRef&         key,
                        const TYPE&                      value,
                        const ENTRIES_01&                entries_01,
                        const ENTRIES_02&                entries_02,
                        const ENTRIES_03&                entries_03,
                        const ENTRIES_04&                entries_04,
                        const ENTRIES_05&                entries_05,
                        const ENTRIES_06&                entries_06,
                        const ENTRIES_07&                entries_07,
                        const ENTRIES_08&                entries_08,
                        const ENTRIES_09&                entries_09,
                        const ENTRIES_10&                entries_10,
                        const ENTRIES_11&                entries_11,
                        const ENTRIES_12&                entries_12,
                        const ENTRIES_13&                entries_13,
                        const ENTRIES_14&                entries_14,
                        const ENTRIES_15&                entries_15,
                        const ENTRIES_16&                entries_16,
                        const ENTRIES_17&                entries_17,
                        const ENTRIES_18&                entries_18,
                        const ENTRIES_19&                entries_19,
                        const ENTRIES_20&                entries_20,
                        const ENTRIES_21&                entries_21,
                        const ENTRIES_22&                entries_22,
                        const ENTRIES_23&                entries_23,
                        const ENTRIES_24&                entries_24,
                        const ENTRIES_25&                entries_25,
                        const ENTRIES_26&                entries_26,
                        const ENTRIES_27&                entries_27,
                        const ENTRIES_28&                entries_28,
                        const ENTRIES_29&                entries_29,
                        const ENTRIES_30&                entries_30,
                        const ENTRIES_31&                entries_31,
                        const ENTRIES_32&                entries_32
                        ) const;


    template <typename TYPE>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value
                        ) const;

    template <typename TYPE, typename ENTRY_01>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09,
                             typename ENTRY_10>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09,
                        int                       key_10,
                        const ENTRY_10&           entry_10
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09,
                             typename ENTRY_10,
                             typename ENTRY_11>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09,
                        int                       key_10,
                        const ENTRY_10&           entry_10,
                        int                       key_11,
                        const ENTRY_11&           entry_11
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09,
                             typename ENTRY_10,
                             typename ENTRY_11,
                             typename ENTRY_12>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09,
                        int                       key_10,
                        const ENTRY_10&           entry_10,
                        int                       key_11,
                        const ENTRY_11&           entry_11,
                        int                       key_12,
                        const ENTRY_12&           entry_12
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09,
                             typename ENTRY_10,
                             typename ENTRY_11,
                             typename ENTRY_12,
                             typename ENTRY_13>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09,
                        int                       key_10,
                        const ENTRY_10&           entry_10,
                        int                       key_11,
                        const ENTRY_11&           entry_11,
                        int                       key_12,
                        const ENTRY_12&           entry_12,
                        int                       key_13,
                        const ENTRY_13&           entry_13
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09,
                             typename ENTRY_10,
                             typename ENTRY_11,
                             typename ENTRY_12,
                             typename ENTRY_13,
                             typename ENTRY_14>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09,
                        int                       key_10,
                        const ENTRY_10&           entry_10,
                        int                       key_11,
                        const ENTRY_11&           entry_11,
                        int                       key_12,
                        const ENTRY_12&           entry_12,
                        int                       key_13,
                        const ENTRY_13&           entry_13,
                        int                       key_14,
                        const ENTRY_14&           entry_14
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09,
                             typename ENTRY_10,
                             typename ENTRY_11,
                             typename ENTRY_12,
                             typename ENTRY_13,
                             typename ENTRY_14,
                             typename ENTRY_15>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09,
                        int                       key_10,
                        const ENTRY_10&           entry_10,
                        int                       key_11,
                        const ENTRY_11&           entry_11,
                        int                       key_12,
                        const ENTRY_12&           entry_12,
                        int                       key_13,
                        const ENTRY_13&           entry_13,
                        int                       key_14,
                        const ENTRY_14&           entry_14,
                        int                       key_15,
                        const ENTRY_15&           entry_15
                        ) const;

    template <typename TYPE, typename ENTRY_01,
                             typename ENTRY_02,
                             typename ENTRY_03,
                             typename ENTRY_04,
                             typename ENTRY_05,
                             typename ENTRY_06,
                             typename ENTRY_07,
                             typename ENTRY_08,
                             typename ENTRY_09,
                             typename ENTRY_10,
                             typename ENTRY_11,
                             typename ENTRY_12,
                             typename ENTRY_13,
                             typename ENTRY_14,
                             typename ENTRY_15,
                             typename ENTRY_16>
    void pushBackHelper(bdld::DatumIntMapBuilder *builder,
                        int                       key,
                        const TYPE&               value,
                        int                       key_01,
                        const ENTRY_01&           entry_01,
                        int                       key_02,
                        const ENTRY_02&           entry_02,
                        int                       key_03,
                        const ENTRY_03&           entry_03,
                        int                       key_04,
                        const ENTRY_04&           entry_04,
                        int                       key_05,
                        const ENTRY_05&           entry_05,
                        int                       key_06,
                        const ENTRY_06&           entry_06,
                        int                       key_07,
                        const ENTRY_07&           entry_07,
                        int                       key_08,
                        const ENTRY_08&           entry_08,
                        int                       key_09,
                        const ENTRY_09&           entry_09,
                        int                       key_10,
                        const ENTRY_10&           entry_10,
                        int                       key_11,
                        const ENTRY_11&           entry_11,
                        int                       key_12,
                        const ENTRY_12&           entry_12,
                        int                       key_13,
                        const ENTRY_13&           entry_13,
                        int                       key_14,
                        const ENTRY_14&           entry_14,
                        int                       key_15,
                        const ENTRY_15&           entry_15,
                        int                       key_16,
                        const ENTRY_16&           entry_16
                        ) const;

#endif

  public:
    // CREATORS

    /// Create a new `DatumMaker` object that uses the specified `allocator`
    /// (e.g., the address of a `bslma::Allocator` object) to supply memory
    /// for the created `bdld::Datum` objects.
    explicit DatumMaker(const AllocatorType& allocator);

    // ACCESSORS

    /// Return `get_allocator().mechanism()`.
    ///
    /// @DEPRECATED: Use `get_allocator()` instead.
    bslma::Allocator *allocator() const;

    /// Return the allocator used by this object to supply memory.  Note
    /// that if no allocator was supplied at construction the default
    /// allocator in effect at construction is used.
    AllocatorType get_allocator() const;

    /// Return a `bdld::Datum` having a null value.
    bdld::Datum operator()() const;

    /// Return a `bdld::Datum` having the specified `value`.  Note that
    /// where possible, no memory is allocated - array are returned as
    /// references.  Note that `DatumMapRef` and `DatumIntMapRef` are not
    /// supported at the moment.
    bdld::Datum operator()(const bslmf::Nil&                  value) const;
    bdld::Datum operator()(int                                value) const;
    bdld::Datum operator()(double                             value) const;
    bdld::Datum operator()(bool                               value) const;
    bdld::Datum operator()(const bdld::DatumError&            value) const;
    bdld::Datum operator()(const bdlt::Date&                  value) const;
    bdld::Datum operator()(const bdlt::Time&                  value) const;
    bdld::Datum operator()(const bdlt::Datetime&              value) const;
    bdld::Datum operator()(const bdlt::DatetimeInterval&      value) const;
    bdld::Datum operator()(bdldfp::Decimal64                  value) const;
    bdld::Datum operator()(bsls::Types::Int64                 value) const;
    bdld::Datum operator()(const bdld::DatumUdt&              value) const;
    bdld::Datum operator()(const bdld::Datum&                 value) const;
    bdld::Datum operator()(const bdld::DatumArrayRef&         value) const;
    bdld::Datum operator()(const bdld::DatumMutableMapRef&    value) const;
    bdld::Datum operator()(const bdld::DatumMutableIntMapRef& value) const;

    /// Return a `bdld::Datum` having the specified `size` number of
    /// `elements`.  Note that where possible, no memory is allocated -
    /// arrays are returned as references.  Note that `DatumMapRef` and
    /// `DatumIntMapRef` are not supported at the moment.
    bdld::Datum operator()(const bdld::Datum         *elements,
                           int                        size) const;
    bdld::Datum operator()(const bdld::DatumMapEntry *elements,
                           int                        size,
                           bool                       sorted = false) const;
    bdld::Datum operator()(
                          const bdld::DatumIntMapEntry *elements,
                          int                           size,
                          bool                          sorted = false) const;

    /// Return a `bdld::Datum` having the specified `value`.  The returned
    /// `bdld::Datum` object will contain a deep-copy of `value`.
    bdld::Datum operator()(const bslstl::StringRef&  value) const;
    bdld::Datum operator()(const char               *value) const;

    /// Return a `bdld::Datum` having the specified `value`, or null if
    /// `value` is unset.
    template <class TYPE>
    bdld::Datum operator()(const bdlb::NullableValue<TYPE>& value) const;

    /// Return a binary `bdld::Datum` having a value that is the copy of the
    /// memory area described by the specified `pointer` and `size`.
    bdld::Datum bin(const void *pointer, bsl::size_t size) const;

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
    /// Return a `bdld::Datum` having an array value of the specified
    /// `elements`.
    template <typename... ELEMENTS>
    bdld::Datum a(const ELEMENTS&... elements) const;

// IMPORTANT NOTE: The section below was manually modified to reduce the
// maximum number of parameters to 16.
#else
    bdld::Datum a() const;

    template <typename ELEMENTS_01>
    bdld::Datum a(const ELEMENTS_01& elements_01
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09,
              typename ELEMENTS_10>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09,
                  const ELEMENTS_10& elements_10
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09,
              typename ELEMENTS_10,
              typename ELEMENTS_11>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09,
                  const ELEMENTS_10& elements_10,
                  const ELEMENTS_11& elements_11
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09,
              typename ELEMENTS_10,
              typename ELEMENTS_11,
              typename ELEMENTS_12>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09,
                  const ELEMENTS_10& elements_10,
                  const ELEMENTS_11& elements_11,
                  const ELEMENTS_12& elements_12
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09,
              typename ELEMENTS_10,
              typename ELEMENTS_11,
              typename ELEMENTS_12,
              typename ELEMENTS_13>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09,
                  const ELEMENTS_10& elements_10,
                  const ELEMENTS_11& elements_11,
                  const ELEMENTS_12& elements_12,
                  const ELEMENTS_13& elements_13
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09,
              typename ELEMENTS_10,
              typename ELEMENTS_11,
              typename ELEMENTS_12,
              typename ELEMENTS_13,
              typename ELEMENTS_14>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09,
                  const ELEMENTS_10& elements_10,
                  const ELEMENTS_11& elements_11,
                  const ELEMENTS_12& elements_12,
                  const ELEMENTS_13& elements_13,
                  const ELEMENTS_14& elements_14
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09,
              typename ELEMENTS_10,
              typename ELEMENTS_11,
              typename ELEMENTS_12,
              typename ELEMENTS_13,
              typename ELEMENTS_14,
              typename ELEMENTS_15>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09,
                  const ELEMENTS_10& elements_10,
                  const ELEMENTS_11& elements_11,
                  const ELEMENTS_12& elements_12,
                  const ELEMENTS_13& elements_13,
                  const ELEMENTS_14& elements_14,
                  const ELEMENTS_15& elements_15
                  ) const;

    template <typename ELEMENTS_01,
              typename ELEMENTS_02,
              typename ELEMENTS_03,
              typename ELEMENTS_04,
              typename ELEMENTS_05,
              typename ELEMENTS_06,
              typename ELEMENTS_07,
              typename ELEMENTS_08,
              typename ELEMENTS_09,
              typename ELEMENTS_10,
              typename ELEMENTS_11,
              typename ELEMENTS_12,
              typename ELEMENTS_13,
              typename ELEMENTS_14,
              typename ELEMENTS_15,
              typename ELEMENTS_16>
    bdld::Datum a(const ELEMENTS_01& elements_01,
                  const ELEMENTS_02& elements_02,
                  const ELEMENTS_03& elements_03,
                  const ELEMENTS_04& elements_04,
                  const ELEMENTS_05& elements_05,
                  const ELEMENTS_06& elements_06,
                  const ELEMENTS_07& elements_07,
                  const ELEMENTS_08& elements_08,
                  const ELEMENTS_09& elements_09,
                  const ELEMENTS_10& elements_10,
                  const ELEMENTS_11& elements_11,
                  const ELEMENTS_12& elements_12,
                  const ELEMENTS_13& elements_13,
                  const ELEMENTS_14& elements_14,
                  const ELEMENTS_15& elements_15,
                  const ELEMENTS_16& elements_16
                  ) const;

#endif

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
    /// Return a `bdld::Datum` object containing a map of the specified
    /// `entries`.  The `entries` are supplied as pairs (odd number of
    /// `sizeof...(entries)` being an error) where the first specified
    /// element is the key, and the second is its corresponding value.  The
    /// behavior is undefined if the same key is supplied more than once.
    template <typename... ENTRIES>
    bdld::Datum m(const ENTRIES&... entries) const;
#else
    bdld::Datum m() const;

    template <typename ENTRIES_01,
              typename ENTRIES_02>
    bdld::Datum m(const ENTRIES_01& entrie_01,
                  const ENTRIES_02& entrie_02
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18,
                  const ENTRIES_19& entries_19,
                  const ENTRIES_20& entries_20
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18,
                  const ENTRIES_19& entries_19,
                  const ENTRIES_20& entries_20,
                  const ENTRIES_21& entries_21,
                  const ENTRIES_22& entries_22
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18,
                  const ENTRIES_19& entries_19,
                  const ENTRIES_20& entries_20,
                  const ENTRIES_21& entries_21,
                  const ENTRIES_22& entries_22,
                  const ENTRIES_23& entries_23,
                  const ENTRIES_24& entries_24
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18,
                  const ENTRIES_19& entries_19,
                  const ENTRIES_20& entries_20,
                  const ENTRIES_21& entries_21,
                  const ENTRIES_22& entries_22,
                  const ENTRIES_23& entries_23,
                  const ENTRIES_24& entries_24,
                  const ENTRIES_25& entries_25,
                  const ENTRIES_26& entries_26
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26,
              typename ENTRIES_27,
              typename ENTRIES_28>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18,
                  const ENTRIES_19& entries_19,
                  const ENTRIES_20& entries_20,
                  const ENTRIES_21& entries_21,
                  const ENTRIES_22& entries_22,
                  const ENTRIES_23& entries_23,
                  const ENTRIES_24& entries_24,
                  const ENTRIES_25& entries_25,
                  const ENTRIES_26& entries_26,
                  const ENTRIES_27& entries_27,
                  const ENTRIES_28& entries_28
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26,
              typename ENTRIES_27,
              typename ENTRIES_28,
              typename ENTRIES_29,
              typename ENTRIES_30>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18,
                  const ENTRIES_19& entries_19,
                  const ENTRIES_20& entries_20,
                  const ENTRIES_21& entries_21,
                  const ENTRIES_22& entries_22,
                  const ENTRIES_23& entries_23,
                  const ENTRIES_24& entries_24,
                  const ENTRIES_25& entries_25,
                  const ENTRIES_26& entries_26,
                  const ENTRIES_27& entries_27,
                  const ENTRIES_28& entries_28,
                  const ENTRIES_29& entries_29,
                  const ENTRIES_30& entries_30
                  ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26,
              typename ENTRIES_27,
              typename ENTRIES_28,
              typename ENTRIES_29,
              typename ENTRIES_30,
              typename ENTRIES_31,
              typename ENTRIES_32>
    bdld::Datum m(const ENTRIES_01& entries_01,
                  const ENTRIES_02& entries_02,
                  const ENTRIES_03& entries_03,
                  const ENTRIES_04& entries_04,
                  const ENTRIES_05& entries_05,
                  const ENTRIES_06& entries_06,
                  const ENTRIES_07& entries_07,
                  const ENTRIES_08& entries_08,
                  const ENTRIES_09& entries_09,
                  const ENTRIES_10& entries_10,
                  const ENTRIES_11& entries_11,
                  const ENTRIES_12& entries_12,
                  const ENTRIES_13& entries_13,
                  const ENTRIES_14& entries_14,
                  const ENTRIES_15& entries_15,
                  const ENTRIES_16& entries_16,
                  const ENTRIES_17& entries_17,
                  const ENTRIES_18& entries_18,
                  const ENTRIES_19& entries_19,
                  const ENTRIES_20& entries_20,
                  const ENTRIES_21& entries_21,
                  const ENTRIES_22& entries_22,
                  const ENTRIES_23& entries_23,
                  const ENTRIES_24& entries_24,
                  const ENTRIES_25& entries_25,
                  const ENTRIES_26& entries_26,
                  const ENTRIES_27& entries_27,
                  const ENTRIES_28& entries_28,
                  const ENTRIES_29& entries_29,
                  const ENTRIES_30& entries_30,
                  const ENTRIES_31& entries_31,
                  const ENTRIES_32& entries_32
                  ) const;

#endif

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
    /// Return a `bdld::Datum` object containing a map with owned keys
    /// consisting of the specified `entries`.  The `entries` are supplied
    /// as pairs (odd number of `sizeof...(entries)` being an error) where
    /// the first specified element is the key, and the second is its
    /// corresponding value.  The behavior is undefined if the same key is
    /// supplied more than once.
    template <typename... ENTRIES>
    bdld::Datum mok(const ENTRIES&... entries) const;
#else
    bdld::Datum mok() const;

    template <typename ENTRIES_01,
              typename ENTRIES_02>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18,
                    const ENTRIES_19& entries_19,
                    const ENTRIES_20& entries_20
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18,
                    const ENTRIES_19& entries_19,
                    const ENTRIES_20& entries_20,
                    const ENTRIES_21& entries_21,
                    const ENTRIES_22& entries_22
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18,
                    const ENTRIES_19& entries_19,
                    const ENTRIES_20& entries_20,
                    const ENTRIES_21& entries_21,
                    const ENTRIES_22& entries_22,
                    const ENTRIES_23& entries_23,
                    const ENTRIES_24& entries_24
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18,
                    const ENTRIES_19& entries_19,
                    const ENTRIES_20& entries_20,
                    const ENTRIES_21& entries_21,
                    const ENTRIES_22& entries_22,
                    const ENTRIES_23& entries_23,
                    const ENTRIES_24& entries_24,
                    const ENTRIES_25& entries_25,
                    const ENTRIES_26& entries_26
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26,
              typename ENTRIES_27,
              typename ENTRIES_28>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18,
                    const ENTRIES_19& entries_19,
                    const ENTRIES_20& entries_20,
                    const ENTRIES_21& entries_21,
                    const ENTRIES_22& entries_22,
                    const ENTRIES_23& entries_23,
                    const ENTRIES_24& entries_24,
                    const ENTRIES_25& entries_25,
                    const ENTRIES_26& entries_26,
                    const ENTRIES_27& entries_27,
                    const ENTRIES_28& entries_28
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26,
              typename ENTRIES_27,
              typename ENTRIES_28,
              typename ENTRIES_29,
              typename ENTRIES_30>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18,
                    const ENTRIES_19& entries_19,
                    const ENTRIES_20& entries_20,
                    const ENTRIES_21& entries_21,
                    const ENTRIES_22& entries_22,
                    const ENTRIES_23& entries_23,
                    const ENTRIES_24& entries_24,
                    const ENTRIES_25& entries_25,
                    const ENTRIES_26& entries_26,
                    const ENTRIES_27& entries_27,
                    const ENTRIES_28& entries_28,
                    const ENTRIES_29& entries_29,
                    const ENTRIES_30& entries_30
                    ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16,
              typename ENTRIES_17,
              typename ENTRIES_18,
              typename ENTRIES_19,
              typename ENTRIES_20,
              typename ENTRIES_21,
              typename ENTRIES_22,
              typename ENTRIES_23,
              typename ENTRIES_24,
              typename ENTRIES_25,
              typename ENTRIES_26,
              typename ENTRIES_27,
              typename ENTRIES_28,
              typename ENTRIES_29,
              typename ENTRIES_30,
              typename ENTRIES_31,
              typename ENTRIES_32>
    bdld::Datum mok(const ENTRIES_01& entries_01,
                    const ENTRIES_02& entries_02,
                    const ENTRIES_03& entries_03,
                    const ENTRIES_04& entries_04,
                    const ENTRIES_05& entries_05,
                    const ENTRIES_06& entries_06,
                    const ENTRIES_07& entries_07,
                    const ENTRIES_08& entries_08,
                    const ENTRIES_09& entries_09,
                    const ENTRIES_10& entries_10,
                    const ENTRIES_11& entries_11,
                    const ENTRIES_12& entries_12,
                    const ENTRIES_13& entries_13,
                    const ENTRIES_14& entries_14,
                    const ENTRIES_15& entries_15,
                    const ENTRIES_16& entries_16,
                    const ENTRIES_17& entries_17,
                    const ENTRIES_18& entries_18,
                    const ENTRIES_19& entries_19,
                    const ENTRIES_20& entries_20,
                    const ENTRIES_21& entries_21,
                    const ENTRIES_22& entries_22,
                    const ENTRIES_23& entries_23,
                    const ENTRIES_24& entries_24,
                    const ENTRIES_25& entries_25,
                    const ENTRIES_26& entries_26,
                    const ENTRIES_27& entries_27,
                    const ENTRIES_28& entries_28,
                    const ENTRIES_29& entries_29,
                    const ENTRIES_30& entries_30,
                    const ENTRIES_31& entries_31,
                    const ENTRIES_32& entries_32
                    ) const;

#endif


#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
    /// Return a `bdld::Datum` object containing an integer-map of the
    /// specified `entries`.  The `entries` are supplied  in pairs
    /// (supplying an odd number will result in a compilation failure) where
    /// the first supplied argument is an integer key, and the second is its
    /// corresponding value.  The behavior is undefined if the same key is
    /// supplied more than once.
    template <typename... ENTRIES>
    bdld::Datum im(const ENTRIES&... entries) const;
#else
    bdld::Datum im() const;

    template <typename ENTRIES_01>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09,
                   int               key_10,
                   const ENTRIES_10& entries_10
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09,
                   int               key_10,
                   const ENTRIES_10& entries_10,
                   int               key_11,
                   const ENTRIES_11& entries_11
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09,
                   int               key_10,
                   const ENTRIES_10& entries_10,
                   int               key_11,
                   const ENTRIES_11& entries_11,
                   int               key_12,
                   const ENTRIES_12& entries_12
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09,
                   int               key_10,
                   const ENTRIES_10& entries_10,
                   int               key_11,
                   const ENTRIES_11& entries_11,
                   int               key_12,
                   const ENTRIES_12& entries_12,
                   int               key_13,
                   const ENTRIES_13& entries_13
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09,
                   int               key_10,
                   const ENTRIES_10& entries_10,
                   int               key_11,
                   const ENTRIES_11& entries_11,
                   int               key_12,
                   const ENTRIES_12& entries_12,
                   int               key_13,
                   const ENTRIES_13& entries_13,
                   int               key_14,
                   const ENTRIES_14& entries_14
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09,
                   int               key_10,
                   const ENTRIES_10& entries_10,
                   int               key_11,
                   const ENTRIES_11& entries_11,
                   int               key_12,
                   const ENTRIES_12& entries_12,
                   int               key_13,
                   const ENTRIES_13& entries_13,
                   int               key_14,
                   const ENTRIES_14& entries_14,
                   int               key_15,
                   const ENTRIES_15& entries_15
                   ) const;

    template <typename ENTRIES_01,
              typename ENTRIES_02,
              typename ENTRIES_03,
              typename ENTRIES_04,
              typename ENTRIES_05,
              typename ENTRIES_06,
              typename ENTRIES_07,
              typename ENTRIES_08,
              typename ENTRIES_09,
              typename ENTRIES_10,
              typename ENTRIES_11,
              typename ENTRIES_12,
              typename ENTRIES_13,
              typename ENTRIES_14,
              typename ENTRIES_15,
              typename ENTRIES_16>
    bdld::Datum im(int               key_01,
                   const ENTRIES_01& entries_01,
                   int               key_02,
                   const ENTRIES_02& entries_02,
                   int               key_03,
                   const ENTRIES_03& entries_03,
                   int               key_04,
                   const ENTRIES_04& entries_04,
                   int               key_05,
                   const ENTRIES_05& entries_05,
                   int               key_06,
                   const ENTRIES_06& entries_06,
                   int               key_07,
                   const ENTRIES_07& entries_07,
                   int               key_08,
                   const ENTRIES_08& entries_08,
                   int               key_09,
                   const ENTRIES_09& entries_09,
                   int               key_10,
                   const ENTRIES_10& entries_10,
                   int               key_11,
                   const ENTRIES_11& entries_11,
                   int               key_12,
                   const ENTRIES_12& entries_12,
                   int               key_13,
                   const ENTRIES_13& entries_13,
                   int               key_14,
                   const ENTRIES_14& entries_14,
                   int               key_15,
                   const ENTRIES_15& entries_15,
                   int               key_16,
                   const ENTRIES_16& entries_16
                   ) const;

#endif

    /// Return a `bdld::Datum` object that references, but does not own the
    /// specified `string`, possibly using the allocator of this object to
    /// obtain memory.  Note that this can be used to refer to string
    /// literals.  See `bdld::Datum::createStringRef()`.
    bdld::Datum ref(const bslstl::StringRef& string) const;
};

// ============================================================================
//                            INLINE DEFINITIONS
// ============================================================================

                              // ----------------
                              // class DatumMaker
                              // ----------------

// PRIVATE ACCESSORS
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *) const
{
}

inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder *) const
{
}

inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *) const
{
}

inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *) const
{
}

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element) const
{
    builder->pushBack((*this)(element));
}

template <typename TYPE, typename... ELEMENTS>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS&...       elements) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements...);
}

template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value) const
{
    builder->pushBack(key, (*this)(value));
}

template <typename TYPE, typename... ENTRIES>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES&...         entries) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries...);
}

template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value) const
{
    builder->pushBack(key, (*this)(value));
}

template <typename TYPE, typename... ENTRIES>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES&...                entries) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries...);
}

template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value) const
{
    builder->pushBack(key, (*this)(value));
}

template <typename TYPE, typename... ENTRIES>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                const ENTRIES&...         entries) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries...);
}
#else
template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder);
}

template <typename TYPE, typename ELEMENTS_01>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09,
                         typename ELEMENTS_10>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09,
                                const ELEMENTS_10&       elements_10
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09,
                            elements_10);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09,
                         typename ELEMENTS_10,
                         typename ELEMENTS_11>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09,
                                const ELEMENTS_10&       elements_10,
                                const ELEMENTS_11&       elements_11
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09,
                            elements_10,
                            elements_11);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09,
                         typename ELEMENTS_10,
                         typename ELEMENTS_11,
                         typename ELEMENTS_12>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09,
                                const ELEMENTS_10&       elements_10,
                                const ELEMENTS_11&       elements_11,
                                const ELEMENTS_12&       elements_12
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09,
                            elements_10,
                            elements_11,
                            elements_12);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09,
                         typename ELEMENTS_10,
                         typename ELEMENTS_11,
                         typename ELEMENTS_12,
                         typename ELEMENTS_13>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09,
                                const ELEMENTS_10&       elements_10,
                                const ELEMENTS_11&       elements_11,
                                const ELEMENTS_12&       elements_12,
                                const ELEMENTS_13&       elements_13
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09,
                            elements_10,
                            elements_11,
                            elements_12,
                            elements_13);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09,
                         typename ELEMENTS_10,
                         typename ELEMENTS_11,
                         typename ELEMENTS_12,
                         typename ELEMENTS_13,
                         typename ELEMENTS_14>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09,
                                const ELEMENTS_10&       elements_10,
                                const ELEMENTS_11&       elements_11,
                                const ELEMENTS_12&       elements_12,
                                const ELEMENTS_13&       elements_13,
                                const ELEMENTS_14&       elements_14
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09,
                            elements_10,
                            elements_11,
                            elements_12,
                            elements_13,
                            elements_14);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09,
                         typename ELEMENTS_10,
                         typename ELEMENTS_11,
                         typename ELEMENTS_12,
                         typename ELEMENTS_13,
                         typename ELEMENTS_14,
                         typename ELEMENTS_15>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09,
                                const ELEMENTS_10&       elements_10,
                                const ELEMENTS_11&       elements_11,
                                const ELEMENTS_12&       elements_12,
                                const ELEMENTS_13&       elements_13,
                                const ELEMENTS_14&       elements_14,
                                const ELEMENTS_15&       elements_15
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09,
                            elements_10,
                            elements_11,
                            elements_12,
                            elements_13,
                            elements_14,
                            elements_15);
}

template <typename TYPE, typename ELEMENTS_01,
                         typename ELEMENTS_02,
                         typename ELEMENTS_03,
                         typename ELEMENTS_04,
                         typename ELEMENTS_05,
                         typename ELEMENTS_06,
                         typename ELEMENTS_07,
                         typename ELEMENTS_08,
                         typename ELEMENTS_09,
                         typename ELEMENTS_10,
                         typename ELEMENTS_11,
                         typename ELEMENTS_12,
                         typename ELEMENTS_13,
                         typename ELEMENTS_14,
                         typename ELEMENTS_15,
                         typename ELEMENTS_16>
inline
void DatumMaker::pushBackHelper(bdld::DatumArrayBuilder *builder,
                                const TYPE&              element,
                                const ELEMENTS_01&       elements_01,
                                const ELEMENTS_02&       elements_02,
                                const ELEMENTS_03&       elements_03,
                                const ELEMENTS_04&       elements_04,
                                const ELEMENTS_05&       elements_05,
                                const ELEMENTS_06&       elements_06,
                                const ELEMENTS_07&       elements_07,
                                const ELEMENTS_08&       elements_08,
                                const ELEMENTS_09&       elements_09,
                                const ELEMENTS_10&       elements_10,
                                const ELEMENTS_11&       elements_11,
                                const ELEMENTS_12&       elements_12,
                                const ELEMENTS_13&       elements_13,
                                const ELEMENTS_14&       elements_14,
                                const ELEMENTS_15&       elements_15,
                                const ELEMENTS_16&       elements_16
                                ) const
{
    builder->pushBack((*this)(element));
    pushBackHelper(builder, elements_01,
                            elements_02,
                            elements_03,
                            elements_04,
                            elements_05,
                            elements_06,
                            elements_07,
                            elements_08,
                            elements_09,
                            elements_10,
                            elements_11,
                            elements_12,
                            elements_13,
                            elements_14,
                            elements_15,
                            elements_16);
}

template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18,
                                const ENTRIES_19&         entries_19,
                                const ENTRIES_20&         entries_20
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18,
                                const ENTRIES_19&         entries_19,
                                const ENTRIES_20&         entries_20,
                                const ENTRIES_21&         entries_21,
                                const ENTRIES_22&         entries_22
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18,
                                const ENTRIES_19&         entries_19,
                                const ENTRIES_20&         entries_20,
                                const ENTRIES_21&         entries_21,
                                const ENTRIES_22&         entries_22,
                                const ENTRIES_23&         entries_23,
                                const ENTRIES_24&         entries_24
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18,
                                const ENTRIES_19&         entries_19,
                                const ENTRIES_20&         entries_20,
                                const ENTRIES_21&         entries_21,
                                const ENTRIES_22&         entries_22,
                                const ENTRIES_23&         entries_23,
                                const ENTRIES_24&         entries_24,
                                const ENTRIES_25&         entries_25,
                                const ENTRIES_26&         entries_26
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26,
                         typename ENTRIES_27,
                         typename ENTRIES_28>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18,
                                const ENTRIES_19&         entries_19,
                                const ENTRIES_20&         entries_20,
                                const ENTRIES_21&         entries_21,
                                const ENTRIES_22&         entries_22,
                                const ENTRIES_23&         entries_23,
                                const ENTRIES_24&         entries_24,
                                const ENTRIES_25&         entries_25,
                                const ENTRIES_26&         entries_26,
                                const ENTRIES_27&         entries_27,
                                const ENTRIES_28&         entries_28
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26,
                            entries_27,
                            entries_28);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26,
                         typename ENTRIES_27,
                         typename ENTRIES_28,
                         typename ENTRIES_29,
                         typename ENTRIES_30>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18,
                                const ENTRIES_19&         entries_19,
                                const ENTRIES_20&         entries_20,
                                const ENTRIES_21&         entries_21,
                                const ENTRIES_22&         entries_22,
                                const ENTRIES_23&         entries_23,
                                const ENTRIES_24&         entries_24,
                                const ENTRIES_25&         entries_25,
                                const ENTRIES_26&         entries_26,
                                const ENTRIES_27&         entries_27,
                                const ENTRIES_28&         entries_28,
                                const ENTRIES_29&         entries_29,
                                const ENTRIES_30&         entries_30
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26,
                            entries_27,
                            entries_28,
                            entries_29,
                            entries_30);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26,
                         typename ENTRIES_27,
                         typename ENTRIES_28,
                         typename ENTRIES_29,
                         typename ENTRIES_30,
                         typename ENTRIES_31,
                         typename ENTRIES_32>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapBuilder    *builder,
                                const bslstl::StringRef&  key,
                                const TYPE&               value,
                                const ENTRIES_01&         entries_01,
                                const ENTRIES_02&         entries_02,
                                const ENTRIES_03&         entries_03,
                                const ENTRIES_04&         entries_04,
                                const ENTRIES_05&         entries_05,
                                const ENTRIES_06&         entries_06,
                                const ENTRIES_07&         entries_07,
                                const ENTRIES_08&         entries_08,
                                const ENTRIES_09&         entries_09,
                                const ENTRIES_10&         entries_10,
                                const ENTRIES_11&         entries_11,
                                const ENTRIES_12&         entries_12,
                                const ENTRIES_13&         entries_13,
                                const ENTRIES_14&         entries_14,
                                const ENTRIES_15&         entries_15,
                                const ENTRIES_16&         entries_16,
                                const ENTRIES_17&         entries_17,
                                const ENTRIES_18&         entries_18,
                                const ENTRIES_19&         entries_19,
                                const ENTRIES_20&         entries_20,
                                const ENTRIES_21&         entries_21,
                                const ENTRIES_22&         entries_22,
                                const ENTRIES_23&         entries_23,
                                const ENTRIES_24&         entries_24,
                                const ENTRIES_25&         entries_25,
                                const ENTRIES_26&         entries_26,
                                const ENTRIES_27&         entries_27,
                                const ENTRIES_28&         entries_28,
                                const ENTRIES_29&         entries_29,
                                const ENTRIES_30&         entries_30,
                                const ENTRIES_31&         entries_31,
                                const ENTRIES_32&         entries_32
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26,
                            entries_27,
                            entries_28,
                            entries_29,
                            entries_30,
                            entries_31,
                            entries_32);
}

template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16);
}
template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18,
                                const ENTRIES_19&                entries_19,
                                const ENTRIES_20&                entries_20
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18,
                                const ENTRIES_19&                entries_19,
                                const ENTRIES_20&                entries_20,
                                const ENTRIES_21&                entries_21,
                                const ENTRIES_22&                entries_22
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18,
                                const ENTRIES_19&                entries_19,
                                const ENTRIES_20&                entries_20,
                                const ENTRIES_21&                entries_21,
                                const ENTRIES_22&                entries_22,
                                const ENTRIES_23&                entries_23,
                                const ENTRIES_24&                entries_24
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18,
                                const ENTRIES_19&                entries_19,
                                const ENTRIES_20&                entries_20,
                                const ENTRIES_21&                entries_21,
                                const ENTRIES_22&                entries_22,
                                const ENTRIES_23&                entries_23,
                                const ENTRIES_24&                entries_24,
                                const ENTRIES_25&                entries_25,
                                const ENTRIES_26&                entries_26
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26,
                         typename ENTRIES_27,
                         typename ENTRIES_28>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18,
                                const ENTRIES_19&                entries_19,
                                const ENTRIES_20&                entries_20,
                                const ENTRIES_21&                entries_21,
                                const ENTRIES_22&                entries_22,
                                const ENTRIES_23&                entries_23,
                                const ENTRIES_24&                entries_24,
                                const ENTRIES_25&                entries_25,
                                const ENTRIES_26&                entries_26,
                                const ENTRIES_27&                entries_27,
                                const ENTRIES_28&                entries_28
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26,
                            entries_27,
                            entries_28);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26,
                         typename ENTRIES_27,
                         typename ENTRIES_28,
                         typename ENTRIES_29,
                         typename ENTRIES_30>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18,
                                const ENTRIES_19&                entries_19,
                                const ENTRIES_20&                entries_20,
                                const ENTRIES_21&                entries_21,
                                const ENTRIES_22&                entries_22,
                                const ENTRIES_23&                entries_23,
                                const ENTRIES_24&                entries_24,
                                const ENTRIES_25&                entries_25,
                                const ENTRIES_26&                entries_26,
                                const ENTRIES_27&                entries_27,
                                const ENTRIES_28&                entries_28,
                                const ENTRIES_29&                entries_29,
                                const ENTRIES_30&                entries_30
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26,
                            entries_27,
                            entries_28,
                            entries_29,
                            entries_30);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16,
                         typename ENTRIES_17,
                         typename ENTRIES_18,
                         typename ENTRIES_19,
                         typename ENTRIES_20,
                         typename ENTRIES_21,
                         typename ENTRIES_22,
                         typename ENTRIES_23,
                         typename ENTRIES_24,
                         typename ENTRIES_25,
                         typename ENTRIES_26,
                         typename ENTRIES_27,
                         typename ENTRIES_28,
                         typename ENTRIES_29,
                         typename ENTRIES_30,
                         typename ENTRIES_31,
                         typename ENTRIES_32>
inline
void DatumMaker::pushBackHelper(bdld::DatumMapOwningKeysBuilder *builder,
                                const bslstl::StringRef&         key,
                                const TYPE&                      value,
                                const ENTRIES_01&                entries_01,
                                const ENTRIES_02&                entries_02,
                                const ENTRIES_03&                entries_03,
                                const ENTRIES_04&                entries_04,
                                const ENTRIES_05&                entries_05,
                                const ENTRIES_06&                entries_06,
                                const ENTRIES_07&                entries_07,
                                const ENTRIES_08&                entries_08,
                                const ENTRIES_09&                entries_09,
                                const ENTRIES_10&                entries_10,
                                const ENTRIES_11&                entries_11,
                                const ENTRIES_12&                entries_12,
                                const ENTRIES_13&                entries_13,
                                const ENTRIES_14&                entries_14,
                                const ENTRIES_15&                entries_15,
                                const ENTRIES_16&                entries_16,
                                const ENTRIES_17&                entries_17,
                                const ENTRIES_18&                entries_18,
                                const ENTRIES_19&                entries_19,
                                const ENTRIES_20&                entries_20,
                                const ENTRIES_21&                entries_21,
                                const ENTRIES_22&                entries_22,
                                const ENTRIES_23&                entries_23,
                                const ENTRIES_24&                entries_24,
                                const ENTRIES_25&                entries_25,
                                const ENTRIES_26&                entries_26,
                                const ENTRIES_27&                entries_27,
                                const ENTRIES_28&                entries_28,
                                const ENTRIES_29&                entries_29,
                                const ENTRIES_30&                entries_30,
                                const ENTRIES_31&                entries_31,
                                const ENTRIES_32&                entries_32
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, entries_01,
                            entries_02,
                            entries_03,
                            entries_04,
                            entries_05,
                            entries_06,
                            entries_07,
                            entries_08,
                            entries_09,
                            entries_10,
                            entries_11,
                            entries_12,
                            entries_13,
                            entries_14,
                            entries_15,
                            entries_16,
                            entries_17,
                            entries_18,
                            entries_19,
                            entries_20,
                            entries_21,
                            entries_22,
                            entries_23,
                            entries_24,
                            entries_25,
                            entries_26,
                            entries_27,
                            entries_28,
                            entries_29,
                            entries_30,
                            entries_31,
                            entries_32);
}


template <typename TYPE>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder);
}

template <typename TYPE, typename ENTRIES_01>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09,
                                int                       key_10,
                                const ENTRIES_10&         entries_10
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09,
                            key_10, entries_10);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09,
                                int                       key_10,
                                const ENTRIES_10&         entries_10,
                                int                       key_11,
                                const ENTRIES_11&         entries_11
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09,
                            key_10, entries_10,
                            key_11, entries_11);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09,
                                int                       key_10,
                                const ENTRIES_10&         entries_10,
                                int                       key_11,
                                const ENTRIES_11&         entries_11,
                                int                       key_12,
                                const ENTRIES_12&         entries_12
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09,
                            key_10, entries_10,
                            key_11, entries_11,
                            key_12, entries_12);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09,
                                int                       key_10,
                                const ENTRIES_10&         entries_10,
                                int                       key_11,
                                const ENTRIES_11&         entries_11,
                                int                       key_12,
                                const ENTRIES_12&         entries_12,
                                int                       key_13,
                                const ENTRIES_13&         entries_13
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09,
                            key_10, entries_10,
                            key_11, entries_11,
                            key_12, entries_12,
                            key_13, entries_13);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09,
                                int                       key_10,
                                const ENTRIES_10&         entries_10,
                                int                       key_11,
                                const ENTRIES_11&         entries_11,
                                int                       key_12,
                                const ENTRIES_12&         entries_12,
                                int                       key_13,
                                const ENTRIES_13&         entries_13,
                                int                       key_14,
                                const ENTRIES_14&         entries_14
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09,
                            key_10, entries_10,
                            key_11, entries_11,
                            key_12, entries_12,
                            key_13, entries_13,
                            key_14, entries_14);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09,
                                int                       key_10,
                                const ENTRIES_10&         entries_10,
                                int                       key_11,
                                const ENTRIES_11&         entries_11,
                                int                       key_12,
                                const ENTRIES_12&         entries_12,
                                int                       key_13,
                                const ENTRIES_13&         entries_13,
                                int                       key_14,
                                const ENTRIES_14&         entries_14,
                                int                       key_15,
                                const ENTRIES_15&         entries_15
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09,
                            key_10, entries_10,
                            key_11, entries_11,
                            key_12, entries_12,
                            key_13, entries_13,
                            key_14, entries_14,
                            key_15, entries_15);
}

template <typename TYPE, typename ENTRIES_01,
                         typename ENTRIES_02,
                         typename ENTRIES_03,
                         typename ENTRIES_04,
                         typename ENTRIES_05,
                         typename ENTRIES_06,
                         typename ENTRIES_07,
                         typename ENTRIES_08,
                         typename ENTRIES_09,
                         typename ENTRIES_10,
                         typename ENTRIES_11,
                         typename ENTRIES_12,
                         typename ENTRIES_13,
                         typename ENTRIES_14,
                         typename ENTRIES_15,
                         typename ENTRIES_16>
inline
void DatumMaker::pushBackHelper(bdld::DatumIntMapBuilder *builder,
                                int                       key,
                                const TYPE&               value,
                                int                       key_01,
                                const ENTRIES_01&         entries_01,
                                int                       key_02,
                                const ENTRIES_02&         entries_02,
                                int                       key_03,
                                const ENTRIES_03&         entries_03,
                                int                       key_04,
                                const ENTRIES_04&         entries_04,
                                int                       key_05,
                                const ENTRIES_05&         entries_05,
                                int                       key_06,
                                const ENTRIES_06&         entries_06,
                                int                       key_07,
                                const ENTRIES_07&         entries_07,
                                int                       key_08,
                                const ENTRIES_08&         entries_08,
                                int                       key_09,
                                const ENTRIES_09&         entries_09,
                                int                       key_10,
                                const ENTRIES_10&         entries_10,
                                int                       key_11,
                                const ENTRIES_11&         entries_11,
                                int                       key_12,
                                const ENTRIES_12&         entries_12,
                                int                       key_13,
                                const ENTRIES_13&         entries_13,
                                int                       key_14,
                                const ENTRIES_14&         entries_14,
                                int                       key_15,
                                const ENTRIES_15&         entries_15,
                                int                       key_16,
                                const ENTRIES_16&         entries_16
                                ) const
{
    builder->pushBack(key, (*this)(value));
    pushBackHelper(builder, key_01, entries_01,
                            key_02, entries_02,
                            key_03, entries_03,
                            key_04, entries_04,
                            key_05, entries_05,
                            key_06, entries_06,
                            key_07, entries_07,
                            key_08, entries_08,
                            key_09, entries_09,
                            key_10, entries_10,
                            key_11, entries_11,
                            key_12, entries_12,
                            key_13, entries_13,
                            key_14, entries_14,
                            key_15, entries_15,
                            key_16, entries_16);
}

#endif

// CREATORS
inline
DatumMaker::DatumMaker(const AllocatorType& allocator)
: d_allocator(allocator)
{
}

// ACCESSORS
inline
bslma::Allocator *DatumMaker::allocator() const
{
    return get_allocator().mechanism();
}

inline
DatumMaker::AllocatorType DatumMaker::get_allocator() const
{
    return d_allocator;
}

inline
bdld::Datum DatumMaker::operator()() const
{
    return bdld::Datum::createNull();
}

inline
bdld::Datum DatumMaker::operator()(const bslmf::Nil&) const
{
    return (*this)();
}

inline
bdld::Datum DatumMaker::operator()(int value) const
{
    return bdld::Datum::createInteger(value);
}

inline
bdld::Datum DatumMaker::operator()(double value) const
{
    return bdld::Datum::createDouble(value);
}

inline
bdld::Datum DatumMaker::operator()(const bslstl::StringRef& value) const
{
    return bdld::Datum::copyString(value, d_allocator);
}

inline
bdld::Datum DatumMaker::operator()(const char *value) const
{
    return (*this)(bslstl::StringRef(value));
}

inline
bdld::Datum DatumMaker::operator()(bool value) const
{
    return bdld::Datum::createBoolean(value);
}

inline
bdld::Datum DatumMaker::operator()(const bdld::DatumError& value) const
{
    return bdld::Datum::createError(value.code(),
                                    value.message(),
                                    d_allocator);
}

inline
bdld::Datum DatumMaker::operator()(const bdlt::Date& value) const
{
    return bdld::Datum::createDate(value);
}

inline
bdld::Datum DatumMaker::operator()(const bdlt::Time& value) const
{
    return bdld::Datum::createTime(value);
}

inline
bdld::Datum DatumMaker::operator()(const bdlt::Datetime& value) const
{
    return bdld::Datum::createDatetime(value, d_allocator);
}

inline
bdld::Datum DatumMaker::operator()(const bdlt::DatetimeInterval& value) const
{
    return bdld::Datum::createDatetimeInterval(value, d_allocator);
}

inline
bdld::Datum DatumMaker::operator()(bdldfp::Decimal64 value) const
{
    return bdld::Datum::createDecimal64(value, d_allocator);
}

inline
bdld::Datum DatumMaker::operator()(bsls::Types::Int64 value) const
{
    return bdld::Datum::createInteger64(value, d_allocator);
}

inline
bdld::Datum DatumMaker::operator()(const bdld::DatumUdt& value) const
{
    return bdld::Datum::createUdt(value.data(), value.type());
}

inline
bdld::Datum DatumMaker::operator()(const bdld::Datum& value) const
{
    return value;
}

inline
bdld::Datum DatumMaker::operator()(const bdld::DatumArrayRef& value) const
{
    return bdld::Datum::createArrayReference(value, d_allocator);
}

inline
bdld::Datum DatumMaker::operator()(const bdld::Datum *elements,
                                   int                size) const
{
    return (*this)(bdld::DatumArrayRef(elements, size));
}

inline
bdld::Datum DatumMaker::operator()(const bdld::DatumMutableMapRef& value) const
{
    return bdld::Datum::adoptMap(value);
}

inline
bdld::Datum DatumMaker::operator()(
                                const bdld::DatumMutableIntMapRef& value) const
{
    return bdld::Datum::adoptIntMap(value);
}

template <class TYPE>
inline
bdld::Datum DatumMaker::operator()(
                                  const bdlb::NullableValue<TYPE>& value) const
{
    return value.isNull() ? (*this)() : (*this)(value.value());
}


inline
bdld::Datum DatumMaker::bin(const void *pointer, bsl::size_t size) const
{
    return bdld::Datum::copyBinary(pointer, size, d_allocator);
}

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
template <typename... ELEMENTS>
inline
bdld::Datum DatumMaker::a(const ELEMENTS&... elements) const
{
    const int numElements = sizeof...(ELEMENTS);
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements...);
    return builder.commit();
}
#else
inline
bdld::Datum DatumMaker::a() const
{
    const int numElements =  0u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder);
    return builder.commit();
}

template <typename ELEMENTS_01>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01
                          ) const
{
    const int numElements =  1u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02
                          ) const
{
    const int numElements =  2u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03
                          ) const
{
    const int numElements =  3u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04
                          ) const
{
    const int numElements =  4u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05
                          ) const
{
    const int numElements =  5u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06
                          ) const
{
    const int numElements =  6u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07
                          ) const
{
    const int numElements =  7u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08
                          ) const
{
    const int numElements =  8u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09
                          ) const
{
    const int numElements =  9u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09,
          typename ELEMENTS_10>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09,
                          const ELEMENTS_10& elements_10
                          ) const
{
    const int numElements = 10u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09,
                             elements_10);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09,
          typename ELEMENTS_10,
          typename ELEMENTS_11>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09,
                          const ELEMENTS_10& elements_10,
                          const ELEMENTS_11& elements_11
                          ) const
{
    const int numElements = 11u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09,
                             elements_10,
                             elements_11);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09,
          typename ELEMENTS_10,
          typename ELEMENTS_11,
          typename ELEMENTS_12>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09,
                          const ELEMENTS_10& elements_10,
                          const ELEMENTS_11& elements_11,
                          const ELEMENTS_12& elements_12
                          ) const
{
    const int numElements = 12u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09,
                             elements_10,
                             elements_11,
                             elements_12);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09,
          typename ELEMENTS_10,
          typename ELEMENTS_11,
          typename ELEMENTS_12,
          typename ELEMENTS_13>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09,
                          const ELEMENTS_10& elements_10,
                          const ELEMENTS_11& elements_11,
                          const ELEMENTS_12& elements_12,
                          const ELEMENTS_13& elements_13
                          ) const
{
    const int numElements = 13u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09,
                             elements_10,
                             elements_11,
                             elements_12,
                             elements_13);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09,
          typename ELEMENTS_10,
          typename ELEMENTS_11,
          typename ELEMENTS_12,
          typename ELEMENTS_13,
          typename ELEMENTS_14>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09,
                          const ELEMENTS_10& elements_10,
                          const ELEMENTS_11& elements_11,
                          const ELEMENTS_12& elements_12,
                          const ELEMENTS_13& elements_13,
                          const ELEMENTS_14& elements_14
                          ) const
{
    const int numElements = 14u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09,
                             elements_10,
                             elements_11,
                             elements_12,
                             elements_13,
                             elements_14);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09,
          typename ELEMENTS_10,
          typename ELEMENTS_11,
          typename ELEMENTS_12,
          typename ELEMENTS_13,
          typename ELEMENTS_14,
          typename ELEMENTS_15>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09,
                          const ELEMENTS_10& elements_10,
                          const ELEMENTS_11& elements_11,
                          const ELEMENTS_12& elements_12,
                          const ELEMENTS_13& elements_13,
                          const ELEMENTS_14& elements_14,
                          const ELEMENTS_15& elements_15
                          ) const
{
    const int numElements = 15u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09,
                             elements_10,
                             elements_11,
                             elements_12,
                             elements_13,
                             elements_14,
                             elements_15);
    return builder.commit();
}

template <typename ELEMENTS_01,
          typename ELEMENTS_02,
          typename ELEMENTS_03,
          typename ELEMENTS_04,
          typename ELEMENTS_05,
          typename ELEMENTS_06,
          typename ELEMENTS_07,
          typename ELEMENTS_08,
          typename ELEMENTS_09,
          typename ELEMENTS_10,
          typename ELEMENTS_11,
          typename ELEMENTS_12,
          typename ELEMENTS_13,
          typename ELEMENTS_14,
          typename ELEMENTS_15,
          typename ELEMENTS_16>
inline
bdld::Datum DatumMaker::a(const ELEMENTS_01& elements_01,
                          const ELEMENTS_02& elements_02,
                          const ELEMENTS_03& elements_03,
                          const ELEMENTS_04& elements_04,
                          const ELEMENTS_05& elements_05,
                          const ELEMENTS_06& elements_06,
                          const ELEMENTS_07& elements_07,
                          const ELEMENTS_08& elements_08,
                          const ELEMENTS_09& elements_09,
                          const ELEMENTS_10& elements_10,
                          const ELEMENTS_11& elements_11,
                          const ELEMENTS_12& elements_12,
                          const ELEMENTS_13& elements_13,
                          const ELEMENTS_14& elements_14,
                          const ELEMENTS_15& elements_15,
                          const ELEMENTS_16& elements_16
                          ) const
{
    const int numElements = 16u;
    bdld::DatumArrayBuilder builder(numElements, d_allocator);
    pushBackHelper(&builder, elements_01,
                             elements_02,
                             elements_03,
                             elements_04,
                             elements_05,
                             elements_06,
                             elements_07,
                             elements_08,
                             elements_09,
                             elements_10,
                             elements_11,
                             elements_12,
                             elements_13,
                             elements_14,
                             elements_15,
                             elements_16);
    return builder.commit();
}

#endif

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
template <typename... ENTRIES>
inline
bdld::Datum DatumMaker::m(const ENTRIES&... entries) const
{
    const int numArguments = sizeof...(ENTRIES);

    // Due to MSVC not recognizing bitwise and of a constant expression and a
    // string literal as a constant expression, we don't use a meaningful error
    // as part of this assert.
    //
    // See: https://connect.microsoft.com/VisualStudio/feedback/details/1523001
    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries...);
    return builder.commit();
}
#else
inline
bdld::Datum DatumMaker::m() const
{
    const int numArguments =  0u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02
                          ) const
{
    const int numArguments =  2u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04
                          ) const
{
    const int numArguments =  4u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06
                          ) const
{
    const int numArguments =  6u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08
                          ) const
{
    const int numArguments =  8u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10
                          ) const
{
    const int numArguments = 10u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12
                          ) const
{
    const int numArguments = 12u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14
                          ) const
{
    const int numArguments = 14u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16
                          ) const
{
    const int numArguments = 16u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18
                          ) const
{
    const int numArguments = 18u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18,
                          const ENTRIES_19& entries_19,
                          const ENTRIES_20& entries_20
                          ) const
{
    const int numArguments = 20u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18,
                          const ENTRIES_19& entries_19,
                          const ENTRIES_20& entries_20,
                          const ENTRIES_21& entries_21,
                          const ENTRIES_22& entries_22
                          ) const
{
    const int numArguments = 22u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18,
                          const ENTRIES_19& entries_19,
                          const ENTRIES_20& entries_20,
                          const ENTRIES_21& entries_21,
                          const ENTRIES_22& entries_22,
                          const ENTRIES_23& entries_23,
                          const ENTRIES_24& entries_24
                          ) const
{
    const int numArguments = 24u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18,
                          const ENTRIES_19& entries_19,
                          const ENTRIES_20& entries_20,
                          const ENTRIES_21& entries_21,
                          const ENTRIES_22& entries_22,
                          const ENTRIES_23& entries_23,
                          const ENTRIES_24& entries_24,
                          const ENTRIES_25& entries_25,
                          const ENTRIES_26& entries_26
                          ) const
{
    const int numArguments = 26u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26,
          typename ENTRIES_27,
          typename ENTRIES_28>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18,
                          const ENTRIES_19& entries_19,
                          const ENTRIES_20& entries_20,
                          const ENTRIES_21& entries_21,
                          const ENTRIES_22& entries_22,
                          const ENTRIES_23& entries_23,
                          const ENTRIES_24& entries_24,
                          const ENTRIES_25& entries_25,
                          const ENTRIES_26& entries_26,
                          const ENTRIES_27& entries_27,
                          const ENTRIES_28& entries_28
                          ) const
{
    const int numArguments = 28u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26,
                             entries_27,
                             entries_28);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26,
          typename ENTRIES_27,
          typename ENTRIES_28,
          typename ENTRIES_29,
          typename ENTRIES_30>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18,
                          const ENTRIES_19& entries_19,
                          const ENTRIES_20& entries_20,
                          const ENTRIES_21& entries_21,
                          const ENTRIES_22& entries_22,
                          const ENTRIES_23& entries_23,
                          const ENTRIES_24& entries_24,
                          const ENTRIES_25& entries_25,
                          const ENTRIES_26& entries_26,
                          const ENTRIES_27& entries_27,
                          const ENTRIES_28& entries_28,
                          const ENTRIES_29& entries_29,
                          const ENTRIES_30& entries_30
                          ) const
{
    const int numArguments = 30u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26,
                             entries_27,
                             entries_28,
                             entries_29,
                             entries_30);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26,
          typename ENTRIES_27,
          typename ENTRIES_28,
          typename ENTRIES_29,
          typename ENTRIES_30,
          typename ENTRIES_31,
          typename ENTRIES_32>
inline
bdld::Datum DatumMaker::m(const ENTRIES_01& entries_01,
                          const ENTRIES_02& entries_02,
                          const ENTRIES_03& entries_03,
                          const ENTRIES_04& entries_04,
                          const ENTRIES_05& entries_05,
                          const ENTRIES_06& entries_06,
                          const ENTRIES_07& entries_07,
                          const ENTRIES_08& entries_08,
                          const ENTRIES_09& entries_09,
                          const ENTRIES_10& entries_10,
                          const ENTRIES_11& entries_11,
                          const ENTRIES_12& entries_12,
                          const ENTRIES_13& entries_13,
                          const ENTRIES_14& entries_14,
                          const ENTRIES_15& entries_15,
                          const ENTRIES_16& entries_16,
                          const ENTRIES_17& entries_17,
                          const ENTRIES_18& entries_18,
                          const ENTRIES_19& entries_19,
                          const ENTRIES_20& entries_20,
                          const ENTRIES_21& entries_21,
                          const ENTRIES_22& entries_22,
                          const ENTRIES_23& entries_23,
                          const ENTRIES_24& entries_24,
                          const ENTRIES_25& entries_25,
                          const ENTRIES_26& entries_26,
                          const ENTRIES_27& entries_27,
                          const ENTRIES_28& entries_28,
                          const ENTRIES_29& entries_29,
                          const ENTRIES_30& entries_30,
                          const ENTRIES_31& entries_31,
                          const ENTRIES_32& entries_32
                          ) const
{
    const int numArguments = 32u;

    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26,
                             entries_27,
                             entries_28,
                             entries_29,
                             entries_30,
                             entries_31,
                             entries_32);
    return builder.commit();
}

#endif

#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
template <typename... ENTRIES>
inline
bdld::Datum DatumMaker::mok(const ENTRIES&... entries) const
{
    const int numArguments = sizeof...(ENTRIES);

    // Due to MSVC not recognizing bitwise and of a constant expression and a
    // string literal as a constant expression, we don't use a meaningful error
    // as part of this assert.
    //
    // See: https://connect.microsoft.com/VisualStudio/feedback/details/1523001
    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries...);
    return builder.commit();
}
#else
inline
bdld::Datum DatumMaker::mok() const
{
    const int numArguments =  0u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02
                            ) const
{
    const int numArguments =  2u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04
                            ) const
{
    const int numArguments =  4u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06
                            ) const
{
    const int numArguments =  6u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08
                            ) const
{
    const int numArguments =  8u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10
                            ) const
{
    const int numArguments = 10u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12
                            ) const
{
    const int numArguments = 12u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14
                            ) const
{
    const int numArguments = 14u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16
                            ) const
{
    const int numArguments = 16u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18
                            ) const
{
    const int numArguments = 18u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18,
                            const ENTRIES_19& entries_19,
                            const ENTRIES_20& entries_20
                            ) const
{
    const int numArguments = 20u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18,
                            const ENTRIES_19& entries_19,
                            const ENTRIES_20& entries_20,
                            const ENTRIES_21& entries_21,
                            const ENTRIES_22& entries_22
                            ) const
{
    const int numArguments = 22u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18,
                            const ENTRIES_19& entries_19,
                            const ENTRIES_20& entries_20,
                            const ENTRIES_21& entries_21,
                            const ENTRIES_22& entries_22,
                            const ENTRIES_23& entries_23,
                            const ENTRIES_24& entries_24
                            ) const
{
    const int numArguments = 24u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18,
                            const ENTRIES_19& entries_19,
                            const ENTRIES_20& entries_20,
                            const ENTRIES_21& entries_21,
                            const ENTRIES_22& entries_22,
                            const ENTRIES_23& entries_23,
                            const ENTRIES_24& entries_24,
                            const ENTRIES_25& entries_25,
                            const ENTRIES_26& entries_26
                            ) const
{
    const int numArguments = 26u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26,
          typename ENTRIES_27,
          typename ENTRIES_28>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18,
                            const ENTRIES_19& entries_19,
                            const ENTRIES_20& entries_20,
                            const ENTRIES_21& entries_21,
                            const ENTRIES_22& entries_22,
                            const ENTRIES_23& entries_23,
                            const ENTRIES_24& entries_24,
                            const ENTRIES_25& entries_25,
                            const ENTRIES_26& entries_26,
                            const ENTRIES_27& entries_27,
                            const ENTRIES_28& entries_28
                            ) const
{
    const int numArguments = 28u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26,
                             entries_27,
                             entries_28);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26,
          typename ENTRIES_27,
          typename ENTRIES_28,
          typename ENTRIES_29,
          typename ENTRIES_30>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18,
                            const ENTRIES_19& entries_19,
                            const ENTRIES_20& entries_20,
                            const ENTRIES_21& entries_21,
                            const ENTRIES_22& entries_22,
                            const ENTRIES_23& entries_23,
                            const ENTRIES_24& entries_24,
                            const ENTRIES_25& entries_25,
                            const ENTRIES_26& entries_26,
                            const ENTRIES_27& entries_27,
                            const ENTRIES_28& entries_28,
                            const ENTRIES_29& entries_29,
                            const ENTRIES_30& entries_30
                            ) const
{
    const int numArguments = 30u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26,
                             entries_27,
                             entries_28,
                             entries_29,
                             entries_30);
    return builder.commit();
}

template <typename ENTRIES_01,
          typename ENTRIES_02,
          typename ENTRIES_03,
          typename ENTRIES_04,
          typename ENTRIES_05,
          typename ENTRIES_06,
          typename ENTRIES_07,
          typename ENTRIES_08,
          typename ENTRIES_09,
          typename ENTRIES_10,
          typename ENTRIES_11,
          typename ENTRIES_12,
          typename ENTRIES_13,
          typename ENTRIES_14,
          typename ENTRIES_15,
          typename ENTRIES_16,
          typename ENTRIES_17,
          typename ENTRIES_18,
          typename ENTRIES_19,
          typename ENTRIES_20,
          typename ENTRIES_21,
          typename ENTRIES_22,
          typename ENTRIES_23,
          typename ENTRIES_24,
          typename ENTRIES_25,
          typename ENTRIES_26,
          typename ENTRIES_27,
          typename ENTRIES_28,
          typename ENTRIES_29,
          typename ENTRIES_30,
          typename ENTRIES_31,
          typename ENTRIES_32>
inline
bdld::Datum DatumMaker::mok(const ENTRIES_01& entries_01,
                            const ENTRIES_02& entries_02,
                            const ENTRIES_03& entries_03,
                            const ENTRIES_04& entries_04,
                            const ENTRIES_05& entries_05,
                            const ENTRIES_06& entries_06,
                            const ENTRIES_07& entries_07,
                            const ENTRIES_08& entries_08,
                            const ENTRIES_09& entries_09,
                            const ENTRIES_10& entries_10,
                            const ENTRIES_11& entries_11,
                            const ENTRIES_12& entries_12,
                            const ENTRIES_13& entries_13,
                            const ENTRIES_14& entries_14,
                            const ENTRIES_15& entries_15,
                            const ENTRIES_16& entries_16,
                            const ENTRIES_17& entries_17,
                            const ENTRIES_18& entries_18,
                            const ENTRIES_19& entries_19,
                            const ENTRIES_20& entries_20,
                            const ENTRIES_21& entries_21,
                            const ENTRIES_22& entries_22,
                            const ENTRIES_23& entries_23,
                            const ENTRIES_24& entries_24,
                            const ENTRIES_25& entries_25,
                            const ENTRIES_26& entries_26,
                            const ENTRIES_27& entries_27,
                            const ENTRIES_28& entries_28,
                            const ENTRIES_29& entries_29,
                            const ENTRIES_30& entries_30,
                            const ENTRIES_31& entries_31,
                            const ENTRIES_32& entries_32
                            ) const
{
    const int numArguments = 32u;

    BSLMF_ASSERT(0 == numArguments % 2);

    bdld::DatumMapOwningKeysBuilder builder(d_allocator);
    pushBackHelper(&builder, entries_01,
                             entries_02,
                             entries_03,
                             entries_04,
                             entries_05,
                             entries_06,
                             entries_07,
                             entries_08,
                             entries_09,
                             entries_10,
                             entries_11,
                             entries_12,
                             entries_13,
                             entries_14,
                             entries_15,
                             entries_16,
                             entries_17,
                             entries_18,
                             entries_19,
                             entries_20,
                             entries_21,
                             entries_22,
                             entries_23,
                             entries_24,
                             entries_25,
                             entries_26,
                             entries_27,
                             entries_28,
                             entries_29,
                             entries_30,
                             entries_31,
                             entries_32);
    return builder.commit();
}

#endif


#if !BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
template <typename... ENTRIES>
inline
bdld::Datum DatumMaker::im(const ENTRIES&... entries) const
{
    const int numArguments = sizeof...(ENTRIES);

    // Due to MSVC not recognizing bitwise and of a constant expression and a
    // string literal as a constant expression, we don't use a meaningful error
    // as part of this assert.
    //
    // See: https://connect.microsoft.com/VisualStudio/feedback/details/1523001
    BSLMF_ASSERT(0 == numArguments % 2);

    const int mapElements = numArguments / 2;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, entries...);
    return builder.commit();
}
#else
inline
bdld::Datum DatumMaker::im() const
{
    const int mapElements = 0;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder);
    return builder.commit();
}

template <typename ENTRY_01>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01
                           ) const
{
    const int mapElements = 1;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02
                           ) const
{
    const int mapElements = 2;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03
                           ) const
{
    const int mapElements = 3;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04
                           ) const
{
    const int mapElements = 4;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05
                           ) const
{
    const int mapElements = 5;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06
                           ) const
{
    const int mapElements = 6;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07
                           ) const
{
    const int mapElements = 7;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08
                           ) const
{
    const int mapElements = 8;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09
                           ) const
{
    const int mapElements = 9;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09,
          typename ENTRY_10>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09,
                           int             key_10,
                           const ENTRY_10& entry_10
                           ) const
{
    const int mapElements = 10;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09,
                             key_10, entry_10);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09,
          typename ENTRY_10,
          typename ENTRY_11>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09,
                           int             key_10,
                           const ENTRY_10& entry_10,
                           int             key_11,
                           const ENTRY_11& entry_11
                           ) const
{
    const int mapElements = 11;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09,
                             key_10, entry_10,
                             key_11, entry_11);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09,
          typename ENTRY_10,
          typename ENTRY_11,
          typename ENTRY_12>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09,
                           int             key_10,
                           const ENTRY_10& entry_10,
                           int             key_11,
                           const ENTRY_11& entry_11,
                           int             key_12,
                           const ENTRY_12& entry_12
                           ) const
{
    const int mapElements = 12;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09,
                             key_10, entry_10,
                             key_11, entry_11,
                             key_12, entry_12);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09,
          typename ENTRY_10,
          typename ENTRY_11,
          typename ENTRY_12,
          typename ENTRY_13>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09,
                           int             key_10,
                           const ENTRY_10& entry_10,
                           int             key_11,
                           const ENTRY_11& entry_11,
                           int             key_12,
                           const ENTRY_12& entry_12,
                           int             key_13,
                           const ENTRY_13& entry_13
                           ) const
{
    const int mapElements = 13;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09,
                             key_10, entry_10,
                             key_11, entry_11,
                             key_12, entry_12,
                             key_13, entry_13);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09,
          typename ENTRY_10,
          typename ENTRY_11,
          typename ENTRY_12,
          typename ENTRY_13,
          typename ENTRY_14>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09,
                           int             key_10,
                           const ENTRY_10& entry_10,
                           int             key_11,
                           const ENTRY_11& entry_11,
                           int             key_12,
                           const ENTRY_12& entry_12,
                           int             key_13,
                           const ENTRY_13& entry_13,
                           int             key_14,
                           const ENTRY_14& entry_14
                           ) const
{
    const int mapElements = 14;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09,
                             key_10, entry_10,
                             key_11, entry_11,
                             key_12, entry_12,
                             key_13, entry_13,
                             key_14, entry_14);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09,
          typename ENTRY_10,
          typename ENTRY_11,
          typename ENTRY_12,
          typename ENTRY_13,
          typename ENTRY_14,
          typename ENTRY_15>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09,
                           int             key_10,
                           const ENTRY_10& entry_10,
                           int             key_11,
                           const ENTRY_11& entry_11,
                           int             key_12,
                           const ENTRY_12& entry_12,
                           int             key_13,
                           const ENTRY_13& entry_13,
                           int             key_14,
                           const ENTRY_14& entry_14,
                           int             key_15,
                           const ENTRY_15& entry_15
                           ) const
{
    const int mapElements = 15;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09,
                             key_10, entry_10,
                             key_11, entry_11,
                             key_12, entry_12,
                             key_13, entry_13,
                             key_14, entry_14,
                             key_15, entry_15);
    return builder.commit();
}

template <typename ENTRY_01,
          typename ENTRY_02,
          typename ENTRY_03,
          typename ENTRY_04,
          typename ENTRY_05,
          typename ENTRY_06,
          typename ENTRY_07,
          typename ENTRY_08,
          typename ENTRY_09,
          typename ENTRY_10,
          typename ENTRY_11,
          typename ENTRY_12,
          typename ENTRY_13,
          typename ENTRY_14,
          typename ENTRY_15,
          typename ENTRY_16>
inline
bdld::Datum DatumMaker::im(int             key_01,
                           const ENTRY_01& entry_01,
                           int             key_02,
                           const ENTRY_02& entry_02,
                           int             key_03,
                           const ENTRY_03& entry_03,
                           int             key_04,
                           const ENTRY_04& entry_04,
                           int             key_05,
                           const ENTRY_05& entry_05,
                           int             key_06,
                           const ENTRY_06& entry_06,
                           int             key_07,
                           const ENTRY_07& entry_07,
                           int             key_08,
                           const ENTRY_08& entry_08,
                           int             key_09,
                           const ENTRY_09& entry_09,
                           int             key_10,
                           const ENTRY_10& entry_10,
                           int             key_11,
                           const ENTRY_11& entry_11,
                           int             key_12,
                           const ENTRY_12& entry_12,
                           int             key_13,
                           const ENTRY_13& entry_13,
                           int             key_14,
                           const ENTRY_14& entry_14,
                           int             key_15,
                           const ENTRY_15& entry_15,
                           int             key_16,
                           const ENTRY_16& entry_16
                           ) const
{
    const int mapElements = 16;
    bdld::DatumIntMapBuilder builder(mapElements, d_allocator);
    pushBackHelper(&builder, key_01, entry_01,
                             key_02, entry_02,
                             key_03, entry_03,
                             key_04, entry_04,
                             key_05, entry_05,
                             key_06, entry_06,
                             key_07, entry_07,
                             key_08, entry_08,
                             key_09, entry_09,
                             key_10, entry_10,
                             key_11, entry_11,
                             key_12, entry_12,
                             key_13, entry_13,
                             key_14, entry_14,
                             key_15, entry_15,
                             key_16, entry_16);
    return builder.commit();
}

#endif

inline
bdld::Datum DatumMaker::ref(const bslstl::StringRef& string) const
{
    return bdld::Datum::createStringRef(string, d_allocator);
}

}  // close package namespace
}  // close enterprise namespace

#endif

// ----------------------------------------------------------------------------
// Copyright 2016 Bloomberg Finance L.P.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------- END-OF-FILE ----------------------------------
