BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bslma_polymorphicallocator_cpp03.h
Go to the documentation of this file.
1/// @file bslma_polymorphicallocator_cpp03.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bslma_polymorphicallocator_cpp03.h -*-C++-*-
8
9// Automatically generated file. **DO NOT EDIT**
10
11#ifndef INCLUDED_BSLMA_POLYMORPHICALLOCATOR_CPP03
12#define INCLUDED_BSLMA_POLYMORPHICALLOCATOR_CPP03
13
14/// @defgroup bslma_polymorphicallocator_cpp03 bslma_polymorphicallocator_cpp03
15/// @brief Provide C++03 implementation for bslma_polymorphicallocator.h
16/// @addtogroup bsl
17/// @{
18/// @addtogroup bslma
19/// @{
20/// @addtogroup bslma_polymorphicallocator_cpp03
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bslma_polymorphicallocator_cpp03-purpose"> Purpose</a>
25/// * <a href="#bslma_polymorphicallocator_cpp03-classes"> Classes </a>
26/// * <a href="#bslma_polymorphicallocator_cpp03-description"> Description </a>
27///
28/// # Purpose {#bslma_polymorphicallocator_cpp03-purpose}
29/// Provide C++03 implementation for bslma_polymorphicallocator.h
30///
31/// # Classes {#bslma_polymorphicallocator_cpp03-classes}
32/// See bslma_polymorphicallocator.h for list of classes
33///
34/// @see bslma_polymorphicallocator
35///
36/// # Description {#bslma_polymorphicallocator_cpp03-description}
37/// This component is the C++03 translation of a C++11 component,
38/// generated by the 'sim_cpp11_features.pl' program. If the original header
39/// contains any specially delimited regions of C++11 code, then this generated
40/// file contains the C++03 equivalent, i.e., with variadic templates expanded
41/// and rvalue-references replaced by 'bslmf::MovableRef' objects. The header
42/// code in this file is designed to be '#include'd into the original header
43/// when compiling with a C++03 compiler. If there are no specially delimited
44/// regions of C++11 code, then this header contains no code and is not
45/// '#include'd in the original header.
46///
47/// Generated on Sun Sep 1 09:58:46 2024
48/// Command line: sim_cpp11_features.pl bslma_polymorphicallocator.h
49/// @}
50/** @} */
51/** @} */
52
53/** @addtogroup bsl
54 * @{
55 */
56/** @addtogroup bslma
57 * @{
58 */
59/** @addtogroup bslma_polymorphicallocator_cpp03
60 * @{
61 */
62
63#ifdef COMPILING_BSLMA_POLYMORPHICALLOCATOR_H
64
65#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR
66// Use `polymorphic_allocator` from native C++17 library, if available.
67
68# include <memory_resource>
69
70namespace bsl {
71
72// Import 'polymorphic_allocator' into the 'bsl' namespace.
73template <class TYPE = std::byte>
74using polymorphic_allocator = std::pmr::polymorphic_allocator<TYPE>;
75
76} // close namespace bsl
77
78// FREE FUNCTIONS
79
80// As per issue LWG 3683 (https://cplusplus.github.io/LWG/issue3683), the C++20
81// standard as published does not provide `operator==` for comparing a
82// `polymorphic_allocator` to a type convertible to `polymorphic_allocator`,
83// e.g., a `pmr::memory_resource`. The workaround below corresponds to
84// proposed resolution 2, which differs from the accepted issue resolution
85// (proposed resolution 3) because the accepted resolution requires modifying
86// the library class itself. This workaround does not depend on C++20
87// automatic generation of multiple `operator==` and `operator!=` from a single
88// declaration of `operator==`. Because `bsl::polymorphic_allocator` is an
89// alias for `std::pmr::polymorphic_allocator`, these operators must be defined
90// in namespace `std::pmr` to be found by ADL.
91
92
93
94#if defined(BSLS_PLATFORM_CMP_MSVC)
95// The MSVC compiler, up to and including version 19.33 (aka VS 2022), has a
96// bug whereby supressing argument deduction using @ref type_identity causes a
97// linker error. The `BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T` macro below
98// provides a non-deduced `polymorphic_allocator` argument that works around
99// this problem.
100//
101// Note that this workaround will not work for a type convertible to
102// `polymorphic_allocator` via a conversion operator:
103//..
104// class C { operator bsl::polymorphic_allocator<short>() const; };
105// assert(bsl::polymorphic_allocator<short>() == C()); // won`t compile
106//..
107// As this is a rare-to-nonexistant use case, we won`t bother to fix that for
108// now.
109
110struct PolymorphicAllocator_Unique
111{
112 // A unique type not used for anything else
113};
114
115#define BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(VAL_T) \
116 std::pmr::polymorphic_allocator< \
117 BloombergLP::bslma::PolymorphicAllocator_Unique>
118
119#else // Not MSVC compiler
120
121#define BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(VAL_T) \
122 typename bsl::type_identity<std::pmr::polymorphic_allocator<VAL_T>>::type
123
124#endif
125
126
127
128namespace std::pmr {
129
130/// Return `true` if the specified `a` and specified `b` polymorphic
131/// allocators have equal memory resources; otherwise `false`.
132template <class TYPE>
133bool operator==(const polymorphic_allocator<TYPE>& a,
134 const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& b)
136
137/// Return `true` if the specified `a` and specified `b` polymorphic
138/// allocators have equal memory resources; otherwise `false`.
139template <class TYPE>
140bool operator==(const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& a,
141 const polymorphic_allocator<TYPE>& b)
143
144/// Return `false` if the specified `a` and specified `b` polymorphic
145/// allocators have equal memory resources; otherwise `true`.
146template <class TYPE>
147bool operator!=(const polymorphic_allocator<TYPE>& a,
148 const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& b)
150
151/// Return `false` if the specified `a` and specified `b` polymorphic
152/// allocators have equal memory resources; otherwise `true`.
153template <class TYPE>
154bool operator!=(const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& a,
155 const polymorphic_allocator<TYPE>& b)
157
158} // close namespace std::pmr
159
160#else // If C++17 library is not available
161
162 // =========================================
163 // class template bsl::polymorphic_allocator
164 // =========================================
165
166namespace bsl {
167
168/// An STL-compatible proxy for any resource class derived from
169/// `bsl::memory_resource`. This class template is a pre-C++17
170/// implementation of `std::pmr::polymorphic_allocator` from the C++17 Standard Library.
171///
172/// \note Note that there are a number of methods (e.g.,
173/// @ref max_size ) that are not in the C++17 version of this class. These
174/// members exist for compatibility with C++03 versions of the standard
175/// library, which don't use `allocator_traits`.
176///
177/// See @ref bslma_polymorphicallocator_cpp03
178template <class TYPE = unsigned char>
179class polymorphic_allocator {
180
181 // DATA
182 memory_resource *d_resource;
183
184 private:
185 // NOT IMPLEMENTED
188
189 public:
190 // TYPES
191 typedef std::size_t size_type;
192 typedef std::ptrdiff_t difference_type;
193 typedef TYPE *pointer;
194 typedef const TYPE *const_pointer;
195 typedef TYPE& reference;
196 typedef const TYPE& const_reference;
197 typedef TYPE value_type;
198
199 /// This nested `struct` template, parameterized by `ANY_TYPE`, provides
200 /// a namespace for an `other` type alias, which is an allocator type
201 /// following the same template as this one but that allocates elements of `ANY_TYPE`.
202 ///
203 /// \note Note that this allocator type is convertible to and
204 /// from `other` for any type, including `void`.
205 ///
206 /// See @ref bslma_polymorphicallocator_cpp03
207 template <class ANY_TYPE>
208 struct rebind {
209 typedef polymorphic_allocator<ANY_TYPE> other;
210 };
211
212 // CREATORS
213
214 /// Create an allocator that will forward allocation calls to the
215 /// object pointed to by `bslma::Default::defaultAllocator()`.
216 /// Postcondition:
217 /// @code
218 /// this->resource() == bslma::Default::defaultAllocator()
219 /// @endcode
220 ///
221 /// \note Note that in this C++03 implementation, the default memory resource
222 /// is the same as `bslma::Default::defaultAllocator()`.
224
225 /// Convert a `memory_resource` pointer to a `polymorphic_allocator`
226 /// object that forwards allocation calls to the object pointed to by
227 /// the specified `r`. Postcondition:
228 /// @code
229 /// this->resource() == r
230 /// @endcode
231 ///
232 /// \pre The behavior is undefined if `r` is null.
233 polymorphic_allocator(memory_resource *r); // IMPLICIT
234
235 /// Create an allocator sharing the same resource object as the
236 /// specified `original`. The newly constructed allocator will compare
237 /// equal to `original`, even though they may be instantiated on
238 /// different types. Postconditions:
239 /// @code
240 /// *this == original
241 /// this->resource() == original.resource();
242 /// @endcode
243#ifdef BSLS_COMPILERFEATURES_SUPPORT_DEFAULTED_FUNCTIONS
245 BSLS_KEYWORD_NOEXCEPT = default;
246#else
249#endif
250 template<class ANY_TYPE>
251 polymorphic_allocator(const polymorphic_allocator<ANY_TYPE>& original)
253
254 /// Destroy this object.
255 /// \note Note that this does not delete the object
256 /// pointed to by 'resource()'.
257 ~polymorphic_allocator() = default;
258
259 // MANIPULATORS
260
261 /// Return a block of memory having sufficient size and alignment to
262 /// hold the specified `n` objects of `value_type`, allocated from the
263 /// memory resource held by this allocator.
264 BSLS_ANNOTATION_NODISCARD TYPE *allocate(std::size_t n);
265
266#ifndef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
267 /// Return a block of memory having sufficient size and alignment to
268 /// hold the specified `n` objects of `value_type`, allocated from the
269 /// memory resource held by this allocator, ignoring the specified
270 /// `hint`, which is used by other allocators as a locality hint.
271 ///
272 /// \note Note that this overload is not part of C++17
273 /// `std::pmr::polymorphic_allocator` but it is a requirement for all
274 /// C++03 allocators.
275 BSLS_ANNOTATION_NODISCARD TYPE *allocate(std::size_t n, const void *hint);
276#endif
277
278 /// Deallocate a block of memory having sufficient size and alignment to
279 /// hold the specified `n` objects of `value_type` by returning it to
280 /// the memory resource held by this allocator.
281 ///
282 /// \pre The behavior is undefined unless `p` is the address of a block previously allocated
283 /// by a call to `allocate` with the same `n` and not yet deallocated.
284 void deallocate(TYPE *p, std::size_t n);
285
286 /// Create a default-constructed object of (template parameter)
287 /// `ELEMENT_TYPE` at the specified `address`. If `ELEMENT_TYPE`
288 /// supports `bslma`-style allocation, this allocator passes itself to
289 /// the extended default constructor. If the constructor throws, the
290 /// memory at `address` is left in an unspecified state.
291 ///
292 /// \pre The behavior is undefined unless `address` refers to a block of memory having
293 /// sufficient size and alignment for an object of `ELEMENT_TYPE`.
294 template <class ELEMENT_TYPE>
295 void construct(ELEMENT_TYPE *address);
296
297 /// Create an object of (template parameter) `ELEMENT_TYPE` at the
298 /// specified `address`, constructed by forwarding the specified
299 /// `argument1` and the (variable number of) additional specified
300 /// `arguments` to the corresponding constructor of `ELEMENT_TYPE`. If
301 /// `ELEMENT_TYPE` supports `bslma`-style allocation, this allocator
302 /// passes itself to the constructor. If the constructor throws, the memory at `address` is left in an unspecified state.
303 ///
304 /// \note Note that, in
305 /// C++03, perfect forwarding is limited such that any lvalue reference
306 /// in the `arguments` parameter pack is const-qualified when forwarded
307 /// to the `ELEMENT_TYPE` constructor; only `argument1` can be forwarded as an unqualified lvalue.
308 ///
309 /// \pre The behavior is undefined unless
310 /// `address` refers to a block of memory having sufficient size and
311 /// alignment for an object of `ELEMENT_TYPE`.
312#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
313// {{{ BEGIN GENERATED CODE
314// Command line: sim_cpp11_features.pl bslma_polymorphicallocator.h
315#ifndef BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT
316#define BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT 14
317#endif
318#ifndef BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A
319#define BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT
320#endif
321#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 0
322 template <class ELEMENT_TYPE, class ARG1>
323 void construct(ELEMENT_TYPE *address,
324 ARG1& argument1);
325#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 0
326
327#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 1
328 template <class ELEMENT_TYPE, class ARG1, class ARGS_01>
329 void construct(ELEMENT_TYPE *address,
330 ARG1& argument1,
331 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01);
332#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 1
333
334#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 2
335 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
336 class ARGS_02>
337 void construct(ELEMENT_TYPE *address,
338 ARG1& argument1,
339 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
340 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02);
341#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 2
342
343#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 3
344 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
345 class ARGS_02,
346 class ARGS_03>
347 void construct(ELEMENT_TYPE *address,
348 ARG1& argument1,
349 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
350 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
351 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03);
352#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 3
353
354#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 4
355 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
356 class ARGS_02,
357 class ARGS_03,
358 class ARGS_04>
359 void construct(ELEMENT_TYPE *address,
360 ARG1& argument1,
361 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
362 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
363 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
364 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04);
365#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 4
366
367#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 5
368 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
369 class ARGS_02,
370 class ARGS_03,
371 class ARGS_04,
372 class ARGS_05>
373 void construct(ELEMENT_TYPE *address,
374 ARG1& argument1,
375 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
376 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
377 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
378 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
379 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05);
380#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 5
381
382#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 6
383 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
384 class ARGS_02,
385 class ARGS_03,
386 class ARGS_04,
387 class ARGS_05,
388 class ARGS_06>
389 void construct(ELEMENT_TYPE *address,
390 ARG1& argument1,
391 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
392 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
393 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
394 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
395 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
396 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06);
397#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 6
398
399#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 7
400 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
401 class ARGS_02,
402 class ARGS_03,
403 class ARGS_04,
404 class ARGS_05,
405 class ARGS_06,
406 class ARGS_07>
407 void construct(ELEMENT_TYPE *address,
408 ARG1& argument1,
409 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
410 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
411 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
412 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
413 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
414 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
415 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07);
416#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 7
417
418#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 8
419 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
420 class ARGS_02,
421 class ARGS_03,
422 class ARGS_04,
423 class ARGS_05,
424 class ARGS_06,
425 class ARGS_07,
426 class ARGS_08>
427 void construct(ELEMENT_TYPE *address,
428 ARG1& argument1,
429 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
430 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
431 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
432 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
433 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
434 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
435 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
436 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08);
437#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 8
438
439#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 9
440 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
441 class ARGS_02,
442 class ARGS_03,
443 class ARGS_04,
444 class ARGS_05,
445 class ARGS_06,
446 class ARGS_07,
447 class ARGS_08,
448 class ARGS_09>
449 void construct(ELEMENT_TYPE *address,
450 ARG1& argument1,
451 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
452 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
453 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
454 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
455 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
456 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
457 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
458 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
459 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09);
460#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 9
461
462#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 10
463 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
464 class ARGS_02,
465 class ARGS_03,
466 class ARGS_04,
467 class ARGS_05,
468 class ARGS_06,
469 class ARGS_07,
470 class ARGS_08,
471 class ARGS_09,
472 class ARGS_10>
473 void construct(ELEMENT_TYPE *address,
474 ARG1& argument1,
475 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
476 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
477 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
478 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
479 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
480 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
481 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
482 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
483 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
484 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10);
485#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 10
486
487#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 11
488 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
489 class ARGS_02,
490 class ARGS_03,
491 class ARGS_04,
492 class ARGS_05,
493 class ARGS_06,
494 class ARGS_07,
495 class ARGS_08,
496 class ARGS_09,
497 class ARGS_10,
498 class ARGS_11>
499 void construct(ELEMENT_TYPE *address,
500 ARG1& argument1,
501 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
502 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
503 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
504 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
505 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
506 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
507 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
508 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
509 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
510 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
511 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11);
512#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 11
513
514#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 12
515 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
516 class ARGS_02,
517 class ARGS_03,
518 class ARGS_04,
519 class ARGS_05,
520 class ARGS_06,
521 class ARGS_07,
522 class ARGS_08,
523 class ARGS_09,
524 class ARGS_10,
525 class ARGS_11,
526 class ARGS_12>
527 void construct(ELEMENT_TYPE *address,
528 ARG1& argument1,
529 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
530 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
531 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
532 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
533 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
534 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
535 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
536 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
537 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
538 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
539 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
540 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12);
541#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 12
542
543#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 13
544 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
545 class ARGS_02,
546 class ARGS_03,
547 class ARGS_04,
548 class ARGS_05,
549 class ARGS_06,
550 class ARGS_07,
551 class ARGS_08,
552 class ARGS_09,
553 class ARGS_10,
554 class ARGS_11,
555 class ARGS_12,
556 class ARGS_13>
557 void construct(ELEMENT_TYPE *address,
558 ARG1& argument1,
559 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
560 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
561 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
562 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
563 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
564 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
565 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
566 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
567 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
568 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
569 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
570 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
571 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13);
572#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 13
573
574#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 14
575 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
576 class ARGS_02,
577 class ARGS_03,
578 class ARGS_04,
579 class ARGS_05,
580 class ARGS_06,
581 class ARGS_07,
582 class ARGS_08,
583 class ARGS_09,
584 class ARGS_10,
585 class ARGS_11,
586 class ARGS_12,
587 class ARGS_13,
588 class ARGS_14>
589 void construct(ELEMENT_TYPE *address,
590 ARG1& argument1,
591 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
592 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
593 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
594 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
595 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
596 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
597 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
598 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
599 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
600 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
601 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
602 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
603 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13,
604 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) arguments_14);
605#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 14
606
607#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 0
608 template <class ELEMENT_TYPE, class ARG1>
609 void construct(ELEMENT_TYPE *address,
610 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1);
611#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 0
612
613#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 1
614 template <class ELEMENT_TYPE, class ARG1, class ARGS_01>
615 void construct(ELEMENT_TYPE *address,
616 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
617 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01);
618#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 1
619
620#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 2
621 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
622 class ARGS_02>
623 void construct(ELEMENT_TYPE *address,
624 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
625 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
626 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02);
627#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 2
628
629#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 3
630 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
631 class ARGS_02,
632 class ARGS_03>
633 void construct(ELEMENT_TYPE *address,
634 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
635 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
636 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
637 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03);
638#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 3
639
640#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 4
641 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
642 class ARGS_02,
643 class ARGS_03,
644 class ARGS_04>
645 void construct(ELEMENT_TYPE *address,
646 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
647 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
648 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
649 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
650 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04);
651#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 4
652
653#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 5
654 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
655 class ARGS_02,
656 class ARGS_03,
657 class ARGS_04,
658 class ARGS_05>
659 void construct(ELEMENT_TYPE *address,
660 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
661 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
662 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
663 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
664 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
665 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05);
666#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 5
667
668#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 6
669 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
670 class ARGS_02,
671 class ARGS_03,
672 class ARGS_04,
673 class ARGS_05,
674 class ARGS_06>
675 void construct(ELEMENT_TYPE *address,
676 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
677 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
678 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
679 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
680 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
681 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
682 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06);
683#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 6
684
685#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 7
686 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
687 class ARGS_02,
688 class ARGS_03,
689 class ARGS_04,
690 class ARGS_05,
691 class ARGS_06,
692 class ARGS_07>
693 void construct(ELEMENT_TYPE *address,
694 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
695 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
696 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
697 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
698 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
699 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
700 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
701 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07);
702#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 7
703
704#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 8
705 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
706 class ARGS_02,
707 class ARGS_03,
708 class ARGS_04,
709 class ARGS_05,
710 class ARGS_06,
711 class ARGS_07,
712 class ARGS_08>
713 void construct(ELEMENT_TYPE *address,
714 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
715 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
716 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
717 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
718 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
719 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
720 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
721 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
722 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08);
723#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 8
724
725#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 9
726 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
727 class ARGS_02,
728 class ARGS_03,
729 class ARGS_04,
730 class ARGS_05,
731 class ARGS_06,
732 class ARGS_07,
733 class ARGS_08,
734 class ARGS_09>
735 void construct(ELEMENT_TYPE *address,
736 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
737 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
738 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
739 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
740 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
741 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
742 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
743 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
744 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
745 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09);
746#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 9
747
748#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 10
749 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
750 class ARGS_02,
751 class ARGS_03,
752 class ARGS_04,
753 class ARGS_05,
754 class ARGS_06,
755 class ARGS_07,
756 class ARGS_08,
757 class ARGS_09,
758 class ARGS_10>
759 void construct(ELEMENT_TYPE *address,
760 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
761 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
762 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
763 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
764 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
765 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
766 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
767 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
768 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
769 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
770 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10);
771#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 10
772
773#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 11
774 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
775 class ARGS_02,
776 class ARGS_03,
777 class ARGS_04,
778 class ARGS_05,
779 class ARGS_06,
780 class ARGS_07,
781 class ARGS_08,
782 class ARGS_09,
783 class ARGS_10,
784 class ARGS_11>
785 void construct(ELEMENT_TYPE *address,
786 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
787 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
788 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
789 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
790 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
791 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
792 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
793 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
794 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
795 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
796 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
797 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11);
798#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 11
799
800#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 12
801 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
802 class ARGS_02,
803 class ARGS_03,
804 class ARGS_04,
805 class ARGS_05,
806 class ARGS_06,
807 class ARGS_07,
808 class ARGS_08,
809 class ARGS_09,
810 class ARGS_10,
811 class ARGS_11,
812 class ARGS_12>
813 void construct(ELEMENT_TYPE *address,
814 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
815 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
816 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
817 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
818 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
819 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
820 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
821 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
822 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
823 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
824 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
825 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
826 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12);
827#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 12
828
829#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 13
830 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
831 class ARGS_02,
832 class ARGS_03,
833 class ARGS_04,
834 class ARGS_05,
835 class ARGS_06,
836 class ARGS_07,
837 class ARGS_08,
838 class ARGS_09,
839 class ARGS_10,
840 class ARGS_11,
841 class ARGS_12,
842 class ARGS_13>
843 void construct(ELEMENT_TYPE *address,
844 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
845 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
846 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
847 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
848 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
849 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
850 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
851 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
852 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
853 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
854 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
855 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
856 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
857 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13);
858#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 13
859
860#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 14
861 template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
862 class ARGS_02,
863 class ARGS_03,
864 class ARGS_04,
865 class ARGS_05,
866 class ARGS_06,
867 class ARGS_07,
868 class ARGS_08,
869 class ARGS_09,
870 class ARGS_10,
871 class ARGS_11,
872 class ARGS_12,
873 class ARGS_13,
874 class ARGS_14>
875 void construct(ELEMENT_TYPE *address,
876 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
877 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
878 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
879 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
880 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
881 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
882 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
883 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
884 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
885 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
886 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
887 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
888 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
889 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13,
890 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) arguments_14);
891#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_A >= 14
892
893#else
894// The generated code below is a workaround for the absence of perfect
895// forwarding in some compilers.
896 template <class ELEMENT_TYPE, class ARG1, class... ARGS>
897 void construct(ELEMENT_TYPE *address,
898 ARG1& argument1,
899 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... arguments);
900 template <class ELEMENT_TYPE, class ARG1, class... ARGS>
901 void construct(ELEMENT_TYPE *address,
902 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
903 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... arguments);
904// }}} END GENERATED CODE
905#endif
906
907 /// Call the `ELEMENT_TYPE` destructor for the object at the specified
908 /// `address` but do not deallocate the memory at `address`.
909 template <class ELEMENT_TYPE>
910 void destroy(ELEMENT_TYPE *address);
911
912 // ACCESSORS
913
914 /// Return the address of the object referred to by the specified `x`
915 /// reference, even if the (template parameter) `TYPE` overloads the
916 /// unary `operator&`.
917 pointer address(reference x) const;
919
920 /// Return the maximum number of elements of (template parameter) `TYPE` that can be allocated using this allocator.
921 ///
922 /// \note Note that there is no
923 /// guarantee that attempts at allocating fewer elements than the value
924 /// returned by @ref max_size will not throw.
926
927 /// Return the address of the memory resource supplied on construction.
928 memory_resource *resource() const;
929
930 /// Return a default-constructed `polymorphic_allocator`.
932
933 // HIDDEN FRIENDS
934
935 /// Return `true` if memory allocated from either of the specified `a`
936 /// or `b` allocators can be deallocated from the other; otherwise
937 /// return `false`. This operator is selected by overload resolution if
938 /// at least one argument is a specialization of `polymorphic_allocator`
939 /// and the other is either the same specialization or is convertible to `polymorphic_allocator`.
940 ///
941 /// \note Note that this operator is a "hidden
942 /// friend" so that it is found by only by ADL and is not considered
943 /// during overload resoution if neither argument is a specialization of
944 /// `polymorphic_allocator`; see
945 /// https://cplusplus.github.io/LWG/issue3683.
946 friend
947 bool operator==(const polymorphic_allocator& a,
949 {
950 return a.resource() == b.resource() || *a.resource() == *b.resource();
951 }
952
953 /// Return `true` if memory allocated from either of the specified `a`
954 /// or `b` allocators cannot necessarily be deallocated from the other;
955 /// otherwise return `false`. This operator is selected by overload
956 /// resolution if at least one argument is a specialization of
957 /// `polymorphic_allocator` and the other is either the same
958 /// specialization or is convertible to `polymorphic_allocator`.
959 ///
960 /// \note Note that this operator is a "hidden friend" so that it is found by only
961 /// by ADL and is not considered during overload resoution if neither
962 /// argument is a specialization of `polymorphic_allocator`; see
963 /// https://cplusplus.github.io/LWG/issue3683.
964 friend
965 bool operator!=(const polymorphic_allocator& a,
967 {
968 return a.resource() != b.resource() && *a.resource() != *b.resource();
969 }
970};
971
972// FREE FUNCTIONS
973
974/// Return `true` if memory allocated from either of the specified `a` or
975/// `b` allocators can be deallocated from the other; otherwise return `false`.
976///
977/// \note Note that, when `T1` and `T2` are different, this free
978/// operator is a better match than the hidden friend operator, which would
979/// otherwise be ambiguous.
980template <class T1, class T2>
981bool operator==(const polymorphic_allocator<T1>& a,
982 const polymorphic_allocator<T2>& b) BSLS_KEYWORD_NOEXCEPT;
983
984/// Return `true` if memory allocated from either of the specified `a` or
985/// `b` allocators cannot necessarily be deallocated from the other; otherwise return `false`.
986///
987/// \note Note that, when `T1` and `T2` are different,
988/// this free operator is a better match than the hidden friend operator,
989/// which would otherwise be ambiguous.
990template <class T1, class T2>
991bool operator!=(const polymorphic_allocator<T1>& a,
992 const polymorphic_allocator<T2>& b) BSLS_KEYWORD_NOEXCEPT;
993
994} // close namespace bsl
995
996#endif // End C++03 code
997
998namespace bsl {
999
1000 // ====================================================
1001 // class allocator_traits<polymorphic_allocator<TYPE> >
1002 // ====================================================
1003
1004/// This `struct` template provides a specialization of the
1005/// `allocator_traits` class template for `bsl::polymorphic_allocator`.
1006/// This specialization is not strictly necessary, but its presence speeds
1007/// up compilation by bypassing a significant amount of metaprogramming.
1008template <class TYPE>
1009struct allocator_traits<polymorphic_allocator<TYPE> > {
1010
1011 // PUBLIC TYPES
1012 typedef polymorphic_allocator<TYPE> allocator_type;
1013 typedef TYPE value_type;
1014
1015 typedef TYPE *pointer;
1016 typedef const TYPE *const_pointer;
1017 typedef void *void_pointer;
1018 typedef const void *const_void_pointer;
1019 typedef std::ptrdiff_t difference_type;
1020 typedef std::size_t size_type;
1021
1022#ifdef BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES
1023 template <class TYPE2>
1024 using rebind_alloc = polymorphic_allocator<TYPE2>;
1025
1026 template <class TYPE2>
1027 using rebind_traits = allocator_traits<polymorphic_allocator<TYPE2> >;
1028#else
1029 template <class TYPE2>
1030 struct rebind_alloc : polymorphic_allocator<TYPE2> {
1031 rebind_alloc()
1032 : polymorphic_allocator<TYPE2>()
1033 {
1034 }
1035
1036 /// Convert from anything that can be used to cosntruct the base type.
1037 /// This might be better if SFINAE-ed out using `is_convertible`, but
1038 /// stressing older compilers more seems unwise.
1039 template <typename ARG>
1040 rebind_alloc(const ARG& allocatorArg)
1041 : polymorphic_allocator<TYPE2>(allocatorArg)
1042 {
1043 }
1044 };
1045
1046 template <class TYPE2>
1047 struct rebind_traits : allocator_traits<polymorphic_allocator<TYPE2> > {
1048 };
1049#endif
1050
1052 {
1053 return m.allocate(n);
1054 }
1055
1057 size_type n,
1058 const_void_pointer /* hint */)
1059 {
1060 return m.allocate(n);
1061 }
1062
1063 static void deallocate(allocator_type& m, pointer p, size_type n)
1064 {
1065 m.deallocate(p, n);
1066 }
1067
1068 template <class TYPE2>
1069 static void construct(allocator_type& m,
1070 TYPE2 *p)
1071 {
1072 m.construct(p);
1073 }
1074
1075#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
1076// {{{ BEGIN GENERATED CODE
1077// Command line: sim_cpp11_features.pl bslma_polymorphicallocator.h
1078#ifndef BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT
1079#define BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT 14
1080#endif
1081#ifndef BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B
1082#define BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT
1083#endif
1084#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 0
1085 template <class TYPE2, class ARG1>
1086 static void construct(allocator_type& m,
1087 TYPE2 *p,
1088 ARG1& argument1)
1089 {
1090 m.construct(p,
1091 argument1);
1092 }
1093#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 0
1094
1095#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 1
1096 template <class TYPE2, class ARG1, class ARGS_01>
1097 static void construct(allocator_type& m,
1098 TYPE2 *p,
1099 ARG1& argument1,
1100 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01)
1101 {
1102 m.construct(p,
1103 argument1,
1104 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01));
1105 }
1106#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 1
1107
1108#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 2
1109 template <class TYPE2, class ARG1, class ARGS_01,
1110 class ARGS_02>
1111 static void construct(allocator_type& m,
1112 TYPE2 *p,
1113 ARG1& argument1,
1114 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1115 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02)
1116 {
1117 m.construct(p,
1118 argument1,
1119 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1120 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02));
1121 }
1122#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 2
1123
1124#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 3
1125 template <class TYPE2, class ARG1, class ARGS_01,
1126 class ARGS_02,
1127 class ARGS_03>
1128 static void construct(allocator_type& m,
1129 TYPE2 *p,
1130 ARG1& argument1,
1131 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1132 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1133 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03)
1134 {
1135 m.construct(p,
1136 argument1,
1137 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1138 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1139 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03));
1140 }
1141#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 3
1142
1143#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 4
1144 template <class TYPE2, class ARG1, class ARGS_01,
1145 class ARGS_02,
1146 class ARGS_03,
1147 class ARGS_04>
1148 static void construct(allocator_type& m,
1149 TYPE2 *p,
1150 ARG1& argument1,
1151 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1152 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1153 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1154 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04)
1155 {
1156 m.construct(p,
1157 argument1,
1158 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1159 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1160 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1161 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04));
1162 }
1163#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 4
1164
1165#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 5
1166 template <class TYPE2, class ARG1, class ARGS_01,
1167 class ARGS_02,
1168 class ARGS_03,
1169 class ARGS_04,
1170 class ARGS_05>
1171 static void construct(allocator_type& m,
1172 TYPE2 *p,
1173 ARG1& argument1,
1174 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1175 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1176 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1177 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1178 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05)
1179 {
1180 m.construct(p,
1181 argument1,
1182 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1183 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1184 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1185 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1186 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05));
1187 }
1188#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 5
1189
1190#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 6
1191 template <class TYPE2, class ARG1, class ARGS_01,
1192 class ARGS_02,
1193 class ARGS_03,
1194 class ARGS_04,
1195 class ARGS_05,
1196 class ARGS_06>
1197 static void construct(allocator_type& m,
1198 TYPE2 *p,
1199 ARG1& argument1,
1200 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1201 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1202 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1203 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1204 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1205 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06)
1206 {
1207 m.construct(p,
1208 argument1,
1209 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1210 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1211 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1212 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1213 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1214 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06));
1215 }
1216#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 6
1217
1218#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 7
1219 template <class TYPE2, class ARG1, class ARGS_01,
1220 class ARGS_02,
1221 class ARGS_03,
1222 class ARGS_04,
1223 class ARGS_05,
1224 class ARGS_06,
1225 class ARGS_07>
1226 static void construct(allocator_type& m,
1227 TYPE2 *p,
1228 ARG1& argument1,
1229 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1230 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1231 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1232 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1233 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1234 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1235 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07)
1236 {
1237 m.construct(p,
1238 argument1,
1239 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1240 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1241 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1242 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1243 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1244 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1245 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07));
1246 }
1247#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 7
1248
1249#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 8
1250 template <class TYPE2, class ARG1, class ARGS_01,
1251 class ARGS_02,
1252 class ARGS_03,
1253 class ARGS_04,
1254 class ARGS_05,
1255 class ARGS_06,
1256 class ARGS_07,
1257 class ARGS_08>
1258 static void construct(allocator_type& m,
1259 TYPE2 *p,
1260 ARG1& argument1,
1261 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1262 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1263 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1264 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1265 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1266 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1267 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1268 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08)
1269 {
1270 m.construct(p,
1271 argument1,
1272 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1273 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1274 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1275 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1276 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1277 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1278 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1279 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08));
1280 }
1281#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 8
1282
1283#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 9
1284 template <class TYPE2, class ARG1, class ARGS_01,
1285 class ARGS_02,
1286 class ARGS_03,
1287 class ARGS_04,
1288 class ARGS_05,
1289 class ARGS_06,
1290 class ARGS_07,
1291 class ARGS_08,
1292 class ARGS_09>
1293 static void construct(allocator_type& m,
1294 TYPE2 *p,
1295 ARG1& argument1,
1296 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1297 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1298 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1299 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1300 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1301 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1302 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1303 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1304 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09)
1305 {
1306 m.construct(p,
1307 argument1,
1308 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1309 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1310 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1311 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1312 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1313 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1314 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1315 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1316 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09));
1317 }
1318#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 9
1319
1320#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 10
1321 template <class TYPE2, class ARG1, class ARGS_01,
1322 class ARGS_02,
1323 class ARGS_03,
1324 class ARGS_04,
1325 class ARGS_05,
1326 class ARGS_06,
1327 class ARGS_07,
1328 class ARGS_08,
1329 class ARGS_09,
1330 class ARGS_10>
1331 static void construct(allocator_type& m,
1332 TYPE2 *p,
1333 ARG1& argument1,
1334 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1335 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1336 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1337 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1338 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1339 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1340 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1341 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1342 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1343 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10)
1344 {
1345 m.construct(p,
1346 argument1,
1347 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1348 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1349 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1350 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1351 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1352 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1353 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1354 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1355 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1356 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10));
1357 }
1358#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 10
1359
1360#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 11
1361 template <class TYPE2, class ARG1, class ARGS_01,
1362 class ARGS_02,
1363 class ARGS_03,
1364 class ARGS_04,
1365 class ARGS_05,
1366 class ARGS_06,
1367 class ARGS_07,
1368 class ARGS_08,
1369 class ARGS_09,
1370 class ARGS_10,
1371 class ARGS_11>
1372 static void construct(allocator_type& m,
1373 TYPE2 *p,
1374 ARG1& argument1,
1375 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1376 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1377 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1378 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1379 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1380 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1381 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1382 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1383 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1384 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1385 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11)
1386 {
1387 m.construct(p,
1388 argument1,
1389 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1390 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1391 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1392 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1393 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1394 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1395 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1396 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1397 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1398 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
1399 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11));
1400 }
1401#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 11
1402
1403#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 12
1404 template <class TYPE2, class ARG1, class ARGS_01,
1405 class ARGS_02,
1406 class ARGS_03,
1407 class ARGS_04,
1408 class ARGS_05,
1409 class ARGS_06,
1410 class ARGS_07,
1411 class ARGS_08,
1412 class ARGS_09,
1413 class ARGS_10,
1414 class ARGS_11,
1415 class ARGS_12>
1416 static void construct(allocator_type& m,
1417 TYPE2 *p,
1418 ARG1& argument1,
1419 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1420 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1421 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1422 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1423 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1424 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1425 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1426 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1427 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1428 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1429 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
1430 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12)
1431 {
1432 m.construct(p,
1433 argument1,
1434 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1435 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1436 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1437 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1438 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1439 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1440 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1441 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1442 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1443 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
1444 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
1445 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12));
1446 }
1447#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 12
1448
1449#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 13
1450 template <class TYPE2, class ARG1, class ARGS_01,
1451 class ARGS_02,
1452 class ARGS_03,
1453 class ARGS_04,
1454 class ARGS_05,
1455 class ARGS_06,
1456 class ARGS_07,
1457 class ARGS_08,
1458 class ARGS_09,
1459 class ARGS_10,
1460 class ARGS_11,
1461 class ARGS_12,
1462 class ARGS_13>
1463 static void construct(allocator_type& m,
1464 TYPE2 *p,
1465 ARG1& argument1,
1466 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1467 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1468 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1469 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1470 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1471 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1472 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1473 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1474 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1475 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1476 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
1477 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
1478 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13)
1479 {
1480 m.construct(p,
1481 argument1,
1482 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1483 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1484 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1485 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1486 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1487 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1488 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1489 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1490 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1491 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
1492 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
1493 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
1494 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13));
1495 }
1496#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 13
1497
1498#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 14
1499 template <class TYPE2, class ARG1, class ARGS_01,
1500 class ARGS_02,
1501 class ARGS_03,
1502 class ARGS_04,
1503 class ARGS_05,
1504 class ARGS_06,
1505 class ARGS_07,
1506 class ARGS_08,
1507 class ARGS_09,
1508 class ARGS_10,
1509 class ARGS_11,
1510 class ARGS_12,
1511 class ARGS_13,
1512 class ARGS_14>
1513 static void construct(allocator_type& m,
1514 TYPE2 *p,
1515 ARG1& argument1,
1516 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1517 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1518 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1519 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1520 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1521 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1522 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1523 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1524 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1525 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1526 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
1527 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
1528 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13,
1529 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) arguments_14)
1530 {
1531 m.construct(p,
1532 argument1,
1533 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1534 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1535 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1536 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1537 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1538 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1539 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1540 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1541 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1542 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
1543 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
1544 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
1545 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13),
1546 BSLS_COMPILERFEATURES_FORWARD(ARGS_14, arguments_14));
1547 }
1548#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 14
1549
1550
1551#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 0
1552 template <class TYPE2, class ARG1>
1553 static void construct(allocator_type& m,
1554 TYPE2 *p,
1555 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1)
1556 {
1557 m.construct(p,
1558 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1));
1559 }
1560#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 0
1561
1562#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 1
1563 template <class TYPE2, class ARG1, class ARGS_01>
1564 static void construct(allocator_type& m,
1565 TYPE2 *p,
1566 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1567 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01)
1568 {
1569 m.construct(p,
1570 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1571 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01));
1572 }
1573#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 1
1574
1575#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 2
1576 template <class TYPE2, class ARG1, class ARGS_01,
1577 class ARGS_02>
1578 static void construct(allocator_type& m,
1579 TYPE2 *p,
1580 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1581 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1582 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02)
1583 {
1584 m.construct(p,
1585 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1586 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1587 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02));
1588 }
1589#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 2
1590
1591#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 3
1592 template <class TYPE2, class ARG1, class ARGS_01,
1593 class ARGS_02,
1594 class ARGS_03>
1595 static void construct(allocator_type& m,
1596 TYPE2 *p,
1597 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1598 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1599 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1600 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03)
1601 {
1602 m.construct(p,
1603 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1604 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1605 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1606 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03));
1607 }
1608#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 3
1609
1610#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 4
1611 template <class TYPE2, class ARG1, class ARGS_01,
1612 class ARGS_02,
1613 class ARGS_03,
1614 class ARGS_04>
1615 static void construct(allocator_type& m,
1616 TYPE2 *p,
1617 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1618 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1619 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1620 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1621 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04)
1622 {
1623 m.construct(p,
1624 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1625 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1626 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1627 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1628 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04));
1629 }
1630#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 4
1631
1632#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 5
1633 template <class TYPE2, class ARG1, class ARGS_01,
1634 class ARGS_02,
1635 class ARGS_03,
1636 class ARGS_04,
1637 class ARGS_05>
1638 static void construct(allocator_type& m,
1639 TYPE2 *p,
1640 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1641 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1642 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1643 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1644 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1645 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05)
1646 {
1647 m.construct(p,
1648 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1649 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1650 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1651 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1652 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1653 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05));
1654 }
1655#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 5
1656
1657#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 6
1658 template <class TYPE2, class ARG1, class ARGS_01,
1659 class ARGS_02,
1660 class ARGS_03,
1661 class ARGS_04,
1662 class ARGS_05,
1663 class ARGS_06>
1664 static void construct(allocator_type& m,
1665 TYPE2 *p,
1666 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1667 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1668 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1669 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1670 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1671 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1672 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06)
1673 {
1674 m.construct(p,
1675 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1676 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1677 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1678 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1679 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1680 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1681 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06));
1682 }
1683#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 6
1684
1685#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 7
1686 template <class TYPE2, class ARG1, class ARGS_01,
1687 class ARGS_02,
1688 class ARGS_03,
1689 class ARGS_04,
1690 class ARGS_05,
1691 class ARGS_06,
1692 class ARGS_07>
1693 static void construct(allocator_type& m,
1694 TYPE2 *p,
1695 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1696 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1697 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1698 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1699 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1700 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1701 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1702 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07)
1703 {
1704 m.construct(p,
1705 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1706 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1707 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1708 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1709 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1710 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1711 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1712 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07));
1713 }
1714#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 7
1715
1716#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 8
1717 template <class TYPE2, class ARG1, class ARGS_01,
1718 class ARGS_02,
1719 class ARGS_03,
1720 class ARGS_04,
1721 class ARGS_05,
1722 class ARGS_06,
1723 class ARGS_07,
1724 class ARGS_08>
1725 static void construct(allocator_type& m,
1726 TYPE2 *p,
1727 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1728 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1729 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1730 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1731 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1732 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1733 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1734 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1735 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08)
1736 {
1737 m.construct(p,
1738 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1739 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1740 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1741 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1742 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1743 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1744 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1745 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1746 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08));
1747 }
1748#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 8
1749
1750#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 9
1751 template <class TYPE2, class ARG1, class ARGS_01,
1752 class ARGS_02,
1753 class ARGS_03,
1754 class ARGS_04,
1755 class ARGS_05,
1756 class ARGS_06,
1757 class ARGS_07,
1758 class ARGS_08,
1759 class ARGS_09>
1760 static void construct(allocator_type& m,
1761 TYPE2 *p,
1762 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1763 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1764 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1765 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1766 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1767 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1768 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1769 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1770 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1771 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09)
1772 {
1773 m.construct(p,
1774 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1775 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1776 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1777 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1778 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1779 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1780 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1781 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1782 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1783 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09));
1784 }
1785#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 9
1786
1787#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 10
1788 template <class TYPE2, class ARG1, class ARGS_01,
1789 class ARGS_02,
1790 class ARGS_03,
1791 class ARGS_04,
1792 class ARGS_05,
1793 class ARGS_06,
1794 class ARGS_07,
1795 class ARGS_08,
1796 class ARGS_09,
1797 class ARGS_10>
1798 static void construct(allocator_type& m,
1799 TYPE2 *p,
1800 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1801 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1802 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1803 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1804 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1805 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1806 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1807 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1808 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1809 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1810 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10)
1811 {
1812 m.construct(p,
1813 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1814 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1815 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1816 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1817 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1818 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1819 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1820 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1821 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1822 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1823 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10));
1824 }
1825#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 10
1826
1827#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 11
1828 template <class TYPE2, class ARG1, class ARGS_01,
1829 class ARGS_02,
1830 class ARGS_03,
1831 class ARGS_04,
1832 class ARGS_05,
1833 class ARGS_06,
1834 class ARGS_07,
1835 class ARGS_08,
1836 class ARGS_09,
1837 class ARGS_10,
1838 class ARGS_11>
1839 static void construct(allocator_type& m,
1840 TYPE2 *p,
1841 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1842 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1843 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1844 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1845 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1846 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1847 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1848 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1849 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1850 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1851 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1852 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11)
1853 {
1854 m.construct(p,
1855 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1856 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1857 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1858 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1859 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1860 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1861 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1862 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1863 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1864 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1865 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
1866 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11));
1867 }
1868#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 11
1869
1870#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 12
1871 template <class TYPE2, class ARG1, class ARGS_01,
1872 class ARGS_02,
1873 class ARGS_03,
1874 class ARGS_04,
1875 class ARGS_05,
1876 class ARGS_06,
1877 class ARGS_07,
1878 class ARGS_08,
1879 class ARGS_09,
1880 class ARGS_10,
1881 class ARGS_11,
1882 class ARGS_12>
1883 static void construct(allocator_type& m,
1884 TYPE2 *p,
1885 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1886 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1887 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1888 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1889 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1890 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1891 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1892 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1893 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1894 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1895 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1896 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
1897 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12)
1898 {
1899 m.construct(p,
1900 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1901 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1902 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1903 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1904 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1905 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1906 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1907 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1908 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1909 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1910 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
1911 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
1912 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12));
1913 }
1914#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 12
1915
1916#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 13
1917 template <class TYPE2, class ARG1, class ARGS_01,
1918 class ARGS_02,
1919 class ARGS_03,
1920 class ARGS_04,
1921 class ARGS_05,
1922 class ARGS_06,
1923 class ARGS_07,
1924 class ARGS_08,
1925 class ARGS_09,
1926 class ARGS_10,
1927 class ARGS_11,
1928 class ARGS_12,
1929 class ARGS_13>
1930 static void construct(allocator_type& m,
1931 TYPE2 *p,
1932 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1933 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1934 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1935 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1936 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1937 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1938 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1939 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1940 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1941 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1942 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1943 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
1944 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
1945 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13)
1946 {
1947 m.construct(p,
1948 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
1949 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
1950 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
1951 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
1952 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
1953 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
1954 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
1955 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
1956 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
1957 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
1958 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
1959 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
1960 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
1961 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13));
1962 }
1963#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 13
1964
1965#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 14
1966 template <class TYPE2, class ARG1, class ARGS_01,
1967 class ARGS_02,
1968 class ARGS_03,
1969 class ARGS_04,
1970 class ARGS_05,
1971 class ARGS_06,
1972 class ARGS_07,
1973 class ARGS_08,
1974 class ARGS_09,
1975 class ARGS_10,
1976 class ARGS_11,
1977 class ARGS_12,
1978 class ARGS_13,
1979 class ARGS_14>
1980 static void construct(allocator_type& m,
1981 TYPE2 *p,
1982 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
1983 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
1984 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
1985 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
1986 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
1987 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
1988 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
1989 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
1990 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
1991 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
1992 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
1993 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
1994 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
1995 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13,
1996 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) arguments_14)
1997 {
1998 m.construct(p,
1999 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2000 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2001 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2002 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2003 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2004 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2005 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2006 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2007 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
2008 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
2009 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
2010 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
2011 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
2012 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13),
2013 BSLS_COMPILERFEATURES_FORWARD(ARGS_14, arguments_14));
2014 }
2015#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_B >= 14
2016
2017#else
2018// The generated code below is a workaround for the absence of perfect
2019// forwarding in some compilers.
2020 template <class TYPE2, class ARG1, class... ARGS>
2021 static void construct(allocator_type& m,
2022 TYPE2 *p,
2023 ARG1& argument1,
2024 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... arguments)
2025 {
2026 m.construct(p,
2027 argument1,
2028 BSLS_COMPILERFEATURES_FORWARD(ARGS, arguments)...);
2029 }
2030
2031 template <class TYPE2, class ARG1, class... ARGS>
2032 static void construct(allocator_type& m,
2033 TYPE2 *p,
2034 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2035 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... arguments)
2036 {
2037 m.construct(p,
2038 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2039 BSLS_COMPILERFEATURES_FORWARD(ARGS, arguments)...);
2040 }
2041// }}} END GENERATED CODE
2042#endif
2043
2044 template <class TYPE2>
2045 static void destroy(allocator_type&, TYPE2 *p)
2046 {
2047 p->~TYPE2();
2048 }
2049
2051 static size_type max_size(const allocator_type&)
2052 {
2053 // Return the largest value, 'v', such that 'v * sizeof(T)' fits in a
2054 // 'size_type'. Note that we cannot call
2055 // 'allocator_type::max_size()' because that method does not exist in
2056 // the C++17 standard library.
2057
2058 return (~size_type(0)) / sizeof(TYPE);
2059 }
2060
2061 // Allocator propagation traits
2062 static allocator_type
2064 {
2065 return allocator_type();
2066 }
2067
2072};
2073
2074} // close namespace bsl
2075
2076// ============================================================================
2077// TEMPLATES AND INLINE FUNCTION DEFINITIONS
2078// ============================================================================
2079
2080// TRAITS
2081namespace bsl {
2082
2083///
2084/// \note Note that the `bsl::is_trivially_copyable` trait automatically sets the
2085/// `bslmf::IsBitwiseMoveable` trait.
2086template <class TYPE>
2087struct is_trivially_copyable<polymorphic_allocator<TYPE> > : true_type { };
2088} // close namespace bsl
2089
2090
2091namespace bslma {
2092
2093/// Declare `polymorphic_allocator` as a C++11 compatible allocator for
2094/// all versions of C++.
2095template <class TYPE>
2096struct IsStdAllocator< ::bsl::polymorphic_allocator<TYPE> >
2098{
2099};
2100
2101/// An allocator is not *itself* an allocator-aware type, even though it is
2102/// convertible from `bsl::Allocator *`.
2103template <class TYPE>
2104struct UsesBslmaAllocator< ::bsl::polymorphic_allocator<TYPE> >
2105 : bsl::false_type {
2106};
2107
2108} // close namespace bslma
2109
2110namespace bslmf {
2111
2112template <class TYPE>
2113struct IsBitwiseEqualityComparable< ::bsl::polymorphic_allocator<TYPE> >
2114 : bsl::true_type { };
2115
2116} // close namespace bslmf
2117
2118
2119#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR
2120
2121 // ----------------------------------------------
2122 // class template std::pmr::polymorphic_allocator
2123 // ----------------------------------------------
2124
2125// FREE FUNCTIONS
2126
2127// Put extra operators in the 'std::pmr' namespace, not 'bsl' namespace.
2128template <class TYPE>
2129inline
2130bool std::pmr::operator==(const std::pmr::polymorphic_allocator<TYPE>& a,
2131 const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& b)
2133{
2134 return a.resource() == b.resource() || *a.resource() == *b.resource();
2135}
2136
2137template <class TYPE>
2138inline
2139bool std::pmr::operator==(const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& a,
2140 const std::pmr::polymorphic_allocator<TYPE>& b)
2142{
2143 return a.resource() == b.resource() || *a.resource() == *b.resource();
2144}
2145
2146template <class TYPE>
2147inline
2148bool std::pmr::operator!=(const std::pmr::polymorphic_allocator<TYPE>& a,
2149 const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& b)
2151{
2152 return a.resource() != b.resource() && *a.resource() != *b.resource();
2153}
2154
2155template <class TYPE>
2156inline
2157bool std::pmr::operator!=(const BSLMF_POLYMORPHICALLOCATOR_NODEDUCE_T(TYPE)& a,
2158 const std::pmr::polymorphic_allocator<TYPE>& b)
2160{
2161 return a.resource() != b.resource() && *a.resource() != *b.resource();
2162}
2163
2164#else // if ! defined(BSLS_LIBRARYFEATURES_HAS_CPP17_PMR)
2165
2166namespace bsl {
2167
2168 // -----------------------------------------
2169 // class template bsl::polymorphic_allocator
2170 // -----------------------------------------
2171
2172// CREATORS
2173template <class TYPE>
2175: d_resource(BloombergLP::bslma::Default::defaultAllocator())
2176{
2177}
2178
2179template <class TYPE>
2180inline
2182: d_resource(r)
2183{
2184 BSLS_ASSERT(r != 0);
2185}
2186
2187#ifndef BSLS_COMPILERFEATURES_SUPPORT_DEFAULTED_FUNCTIONS
2188// In C++11 or later, this copy constructor is defaulted.
2189template <class TYPE>
2190inline
2191polymorphic_allocator<TYPE>::
2192polymorphic_allocator(const polymorphic_allocator& other) BSLS_KEYWORD_NOEXCEPT
2193: d_resource(other.resource())
2194{
2195}
2196#endif
2197
2198template <class TYPE>
2199template<class ANY_TYPE>
2200inline
2201polymorphic_allocator<TYPE>::
2202polymorphic_allocator(const polymorphic_allocator<ANY_TYPE>& other)
2204: d_resource(other.resource())
2205{
2206}
2207
2208// MANIPULATORS
2209template <class TYPE>
2210inline
2211TYPE *polymorphic_allocator<TYPE>::allocate(std::size_t n)
2212{
2213 const size_t k_TYPE_ALIGNMENT =
2214 BloombergLP::bsls::AlignmentFromType<TYPE>::VALUE;
2215
2216 if (n > this->max_size()) {
2217 BloombergLP::bsls::BslExceptionUtil::throwBadAlloc();
2218 }
2219
2220 return static_cast<TYPE *>(d_resource->allocate(n * sizeof(TYPE),
2221 k_TYPE_ALIGNMENT));
2222}
2223
2224#ifndef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
2225template <class TYPE>
2226inline
2227TYPE *
2228polymorphic_allocator<TYPE>::allocate(std::size_t n, const void * /* hint */)
2229{
2230 return this->allocate(n);
2231}
2232#endif
2233
2234template <class TYPE>
2235inline
2236void polymorphic_allocator<TYPE>::deallocate(TYPE *p, std::size_t n)
2237{
2238 const std::size_t k_TYPE_ALIGNMENT =
2239 BloombergLP::bsls::AlignmentFromType<TYPE>::VALUE;
2240
2241 d_resource->deallocate(p, n * sizeof(TYPE), k_TYPE_ALIGNMENT);
2242}
2243
2244template <class TYPE>
2245template <class ELEMENT_TYPE>
2246inline
2247void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address)
2248{
2249 BloombergLP::bslma::ConstructionUtil::construct(address, *this);
2250}
2251
2252#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
2253// {{{ BEGIN GENERATED CODE
2254// Command line: sim_cpp11_features.pl bslma_polymorphicallocator.h
2255#ifndef BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT
2256#define BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT 14
2257#endif
2258#ifndef BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C
2259#define BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT
2260#endif
2261#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 0
2262template <class TYPE>
2263template <class ELEMENT_TYPE, class ARG1>
2264inline
2265void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2266 ARG1& argument1)
2267{
2268 BloombergLP::bslma::ConstructionUtil::construct(
2269 address,
2270 *this,
2271 argument1);
2272}
2273#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 0
2274
2275#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 1
2276template <class TYPE>
2277template <class ELEMENT_TYPE, class ARG1, class ARGS_01>
2278inline
2279void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2280 ARG1& argument1,
2281 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01)
2282{
2283 BloombergLP::bslma::ConstructionUtil::construct(
2284 address,
2285 *this,
2286 argument1,
2287 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01));
2288}
2289#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 1
2290
2291#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 2
2292template <class TYPE>
2293template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2294 class ARGS_02>
2295inline
2296void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2297 ARG1& argument1,
2298 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2299 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02)
2300{
2301 BloombergLP::bslma::ConstructionUtil::construct(
2302 address,
2303 *this,
2304 argument1,
2305 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2306 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02));
2307}
2308#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 2
2309
2310#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 3
2311template <class TYPE>
2312template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2313 class ARGS_02,
2314 class ARGS_03>
2315inline
2316void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2317 ARG1& argument1,
2318 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2319 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2320 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03)
2321{
2322 BloombergLP::bslma::ConstructionUtil::construct(
2323 address,
2324 *this,
2325 argument1,
2326 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2327 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2328 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03));
2329}
2330#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 3
2331
2332#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 4
2333template <class TYPE>
2334template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2335 class ARGS_02,
2336 class ARGS_03,
2337 class ARGS_04>
2338inline
2339void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2340 ARG1& argument1,
2341 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2342 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2343 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2344 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04)
2345{
2346 BloombergLP::bslma::ConstructionUtil::construct(
2347 address,
2348 *this,
2349 argument1,
2350 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2351 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2352 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2353 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04));
2354}
2355#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 4
2356
2357#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 5
2358template <class TYPE>
2359template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2360 class ARGS_02,
2361 class ARGS_03,
2362 class ARGS_04,
2363 class ARGS_05>
2364inline
2365void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2366 ARG1& argument1,
2367 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2368 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2369 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2370 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2371 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05)
2372{
2373 BloombergLP::bslma::ConstructionUtil::construct(
2374 address,
2375 *this,
2376 argument1,
2377 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2378 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2379 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2380 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2381 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05));
2382}
2383#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 5
2384
2385#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 6
2386template <class TYPE>
2387template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2388 class ARGS_02,
2389 class ARGS_03,
2390 class ARGS_04,
2391 class ARGS_05,
2392 class ARGS_06>
2393inline
2394void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2395 ARG1& argument1,
2396 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2397 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2398 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2399 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2400 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2401 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06)
2402{
2403 BloombergLP::bslma::ConstructionUtil::construct(
2404 address,
2405 *this,
2406 argument1,
2407 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2408 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2409 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2410 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2411 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2412 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06));
2413}
2414#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 6
2415
2416#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 7
2417template <class TYPE>
2418template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2419 class ARGS_02,
2420 class ARGS_03,
2421 class ARGS_04,
2422 class ARGS_05,
2423 class ARGS_06,
2424 class ARGS_07>
2425inline
2426void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2427 ARG1& argument1,
2428 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2429 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2430 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2431 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2432 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2433 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2434 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07)
2435{
2436 BloombergLP::bslma::ConstructionUtil::construct(
2437 address,
2438 *this,
2439 argument1,
2440 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2441 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2442 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2443 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2444 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2445 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2446 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07));
2447}
2448#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 7
2449
2450#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 8
2451template <class TYPE>
2452template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2453 class ARGS_02,
2454 class ARGS_03,
2455 class ARGS_04,
2456 class ARGS_05,
2457 class ARGS_06,
2458 class ARGS_07,
2459 class ARGS_08>
2460inline
2461void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2462 ARG1& argument1,
2463 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2464 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2465 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2466 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2467 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2468 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2469 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2470 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08)
2471{
2472 BloombergLP::bslma::ConstructionUtil::construct(
2473 address,
2474 *this,
2475 argument1,
2476 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2477 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2478 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2479 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2480 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2481 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2482 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2483 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08));
2484}
2485#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 8
2486
2487#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 9
2488template <class TYPE>
2489template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2490 class ARGS_02,
2491 class ARGS_03,
2492 class ARGS_04,
2493 class ARGS_05,
2494 class ARGS_06,
2495 class ARGS_07,
2496 class ARGS_08,
2497 class ARGS_09>
2498inline
2499void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2500 ARG1& argument1,
2501 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2502 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2503 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2504 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2505 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2506 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2507 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2508 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
2509 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09)
2510{
2511 BloombergLP::bslma::ConstructionUtil::construct(
2512 address,
2513 *this,
2514 argument1,
2515 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2516 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2517 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2518 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2519 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2520 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2521 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2522 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
2523 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09));
2524}
2525#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 9
2526
2527#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 10
2528template <class TYPE>
2529template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2530 class ARGS_02,
2531 class ARGS_03,
2532 class ARGS_04,
2533 class ARGS_05,
2534 class ARGS_06,
2535 class ARGS_07,
2536 class ARGS_08,
2537 class ARGS_09,
2538 class ARGS_10>
2539inline
2540void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2541 ARG1& argument1,
2542 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2543 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2544 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2545 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2546 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2547 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2548 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2549 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
2550 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
2551 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10)
2552{
2553 BloombergLP::bslma::ConstructionUtil::construct(
2554 address,
2555 *this,
2556 argument1,
2557 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2558 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2559 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2560 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2561 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2562 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2563 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2564 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
2565 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
2566 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10));
2567}
2568#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 10
2569
2570#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 11
2571template <class TYPE>
2572template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2573 class ARGS_02,
2574 class ARGS_03,
2575 class ARGS_04,
2576 class ARGS_05,
2577 class ARGS_06,
2578 class ARGS_07,
2579 class ARGS_08,
2580 class ARGS_09,
2581 class ARGS_10,
2582 class ARGS_11>
2583inline
2584void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2585 ARG1& argument1,
2586 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2587 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2588 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2589 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2590 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2591 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2592 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2593 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
2594 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
2595 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
2596 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11)
2597{
2598 BloombergLP::bslma::ConstructionUtil::construct(
2599 address,
2600 *this,
2601 argument1,
2602 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2603 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2604 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2605 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2606 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2607 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2608 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2609 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
2610 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
2611 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
2612 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11));
2613}
2614#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 11
2615
2616#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 12
2617template <class TYPE>
2618template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2619 class ARGS_02,
2620 class ARGS_03,
2621 class ARGS_04,
2622 class ARGS_05,
2623 class ARGS_06,
2624 class ARGS_07,
2625 class ARGS_08,
2626 class ARGS_09,
2627 class ARGS_10,
2628 class ARGS_11,
2629 class ARGS_12>
2630inline
2631void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2632 ARG1& argument1,
2633 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2634 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2635 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2636 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2637 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2638 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2639 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2640 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
2641 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
2642 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
2643 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
2644 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12)
2645{
2646 BloombergLP::bslma::ConstructionUtil::construct(
2647 address,
2648 *this,
2649 argument1,
2650 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2651 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2652 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2653 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2654 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2655 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2656 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2657 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
2658 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
2659 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
2660 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
2661 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12));
2662}
2663#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 12
2664
2665#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 13
2666template <class TYPE>
2667template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2668 class ARGS_02,
2669 class ARGS_03,
2670 class ARGS_04,
2671 class ARGS_05,
2672 class ARGS_06,
2673 class ARGS_07,
2674 class ARGS_08,
2675 class ARGS_09,
2676 class ARGS_10,
2677 class ARGS_11,
2678 class ARGS_12,
2679 class ARGS_13>
2680inline
2681void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2682 ARG1& argument1,
2683 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2684 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2685 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2686 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2687 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2688 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2689 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2690 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
2691 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
2692 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
2693 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
2694 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
2695 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13)
2696{
2697 BloombergLP::bslma::ConstructionUtil::construct(
2698 address,
2699 *this,
2700 argument1,
2701 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2702 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2703 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2704 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2705 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2706 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2707 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2708 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
2709 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
2710 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
2711 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
2712 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
2713 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13));
2714}
2715#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 13
2716
2717#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 14
2718template <class TYPE>
2719template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2720 class ARGS_02,
2721 class ARGS_03,
2722 class ARGS_04,
2723 class ARGS_05,
2724 class ARGS_06,
2725 class ARGS_07,
2726 class ARGS_08,
2727 class ARGS_09,
2728 class ARGS_10,
2729 class ARGS_11,
2730 class ARGS_12,
2731 class ARGS_13,
2732 class ARGS_14>
2733inline
2734void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
2735 ARG1& argument1,
2736 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2737 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2738 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2739 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2740 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2741 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2742 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2743 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
2744 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
2745 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
2746 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
2747 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
2748 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13,
2749 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) arguments_14)
2750{
2751 BloombergLP::bslma::ConstructionUtil::construct(
2752 address,
2753 *this,
2754 argument1,
2755 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2756 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2757 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2758 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2759 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2760 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2761 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
2762 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
2763 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
2764 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
2765 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
2766 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
2767 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13),
2768 BSLS_COMPILERFEATURES_FORWARD(ARGS_14, arguments_14));
2769}
2770#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 14
2771
2772
2773#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 0
2774template <class TYPE>
2775template <class ELEMENT_TYPE, class ARG1>
2776inline
2777void polymorphic_allocator<TYPE>::construct(
2778 ELEMENT_TYPE *address,
2779 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1)
2780{
2781 BloombergLP::bslma::ConstructionUtil::construct(
2782 address,
2783 *this,
2784 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1));
2785}
2786#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 0
2787
2788#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 1
2789template <class TYPE>
2790template <class ELEMENT_TYPE, class ARG1, class ARGS_01>
2791inline
2792void polymorphic_allocator<TYPE>::construct(
2793 ELEMENT_TYPE *address,
2794 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2795 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01)
2796{
2797 BloombergLP::bslma::ConstructionUtil::construct(
2798 address,
2799 *this,
2800 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2801 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01));
2802}
2803#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 1
2804
2805#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 2
2806template <class TYPE>
2807template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2808 class ARGS_02>
2809inline
2810void polymorphic_allocator<TYPE>::construct(
2811 ELEMENT_TYPE *address,
2812 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2813 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2814 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02)
2815{
2816 BloombergLP::bslma::ConstructionUtil::construct(
2817 address,
2818 *this,
2819 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2820 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2821 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02));
2822}
2823#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 2
2824
2825#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 3
2826template <class TYPE>
2827template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2828 class ARGS_02,
2829 class ARGS_03>
2830inline
2831void polymorphic_allocator<TYPE>::construct(
2832 ELEMENT_TYPE *address,
2833 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2834 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2835 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2836 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03)
2837{
2838 BloombergLP::bslma::ConstructionUtil::construct(
2839 address,
2840 *this,
2841 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2842 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2843 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2844 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03));
2845}
2846#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 3
2847
2848#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 4
2849template <class TYPE>
2850template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2851 class ARGS_02,
2852 class ARGS_03,
2853 class ARGS_04>
2854inline
2855void polymorphic_allocator<TYPE>::construct(
2856 ELEMENT_TYPE *address,
2857 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2858 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2859 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2860 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2861 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04)
2862{
2863 BloombergLP::bslma::ConstructionUtil::construct(
2864 address,
2865 *this,
2866 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2867 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2868 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2869 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2870 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04));
2871}
2872#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 4
2873
2874#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 5
2875template <class TYPE>
2876template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2877 class ARGS_02,
2878 class ARGS_03,
2879 class ARGS_04,
2880 class ARGS_05>
2881inline
2882void polymorphic_allocator<TYPE>::construct(
2883 ELEMENT_TYPE *address,
2884 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2885 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2886 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2887 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2888 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2889 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05)
2890{
2891 BloombergLP::bslma::ConstructionUtil::construct(
2892 address,
2893 *this,
2894 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2895 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2896 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2897 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2898 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2899 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05));
2900}
2901#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 5
2902
2903#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 6
2904template <class TYPE>
2905template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2906 class ARGS_02,
2907 class ARGS_03,
2908 class ARGS_04,
2909 class ARGS_05,
2910 class ARGS_06>
2911inline
2912void polymorphic_allocator<TYPE>::construct(
2913 ELEMENT_TYPE *address,
2914 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2915 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2916 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2917 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2918 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2919 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2920 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06)
2921{
2922 BloombergLP::bslma::ConstructionUtil::construct(
2923 address,
2924 *this,
2925 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2926 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2927 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2928 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2929 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2930 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2931 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06));
2932}
2933#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 6
2934
2935#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 7
2936template <class TYPE>
2937template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2938 class ARGS_02,
2939 class ARGS_03,
2940 class ARGS_04,
2941 class ARGS_05,
2942 class ARGS_06,
2943 class ARGS_07>
2944inline
2945void polymorphic_allocator<TYPE>::construct(
2946 ELEMENT_TYPE *address,
2947 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2948 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2949 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2950 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2951 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2952 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2953 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2954 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07)
2955{
2956 BloombergLP::bslma::ConstructionUtil::construct(
2957 address,
2958 *this,
2959 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2960 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2961 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2962 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
2963 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
2964 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
2965 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
2966 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07));
2967}
2968#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 7
2969
2970#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 8
2971template <class TYPE>
2972template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
2973 class ARGS_02,
2974 class ARGS_03,
2975 class ARGS_04,
2976 class ARGS_05,
2977 class ARGS_06,
2978 class ARGS_07,
2979 class ARGS_08>
2980inline
2981void polymorphic_allocator<TYPE>::construct(
2982 ELEMENT_TYPE *address,
2983 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
2984 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
2985 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
2986 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
2987 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
2988 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
2989 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
2990 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
2991 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08)
2992{
2993 BloombergLP::bslma::ConstructionUtil::construct(
2994 address,
2995 *this,
2996 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
2997 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
2998 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
2999 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
3000 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
3001 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
3002 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
3003 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
3004 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08));
3005}
3006#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 8
3007
3008#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 9
3009template <class TYPE>
3010template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
3011 class ARGS_02,
3012 class ARGS_03,
3013 class ARGS_04,
3014 class ARGS_05,
3015 class ARGS_06,
3016 class ARGS_07,
3017 class ARGS_08,
3018 class ARGS_09>
3019inline
3020void polymorphic_allocator<TYPE>::construct(
3021 ELEMENT_TYPE *address,
3022 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
3023 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
3024 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
3025 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
3026 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
3027 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
3028 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
3029 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
3030 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
3031 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09)
3032{
3033 BloombergLP::bslma::ConstructionUtil::construct(
3034 address,
3035 *this,
3036 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
3037 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
3038 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
3039 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
3040 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
3041 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
3042 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
3043 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
3044 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
3045 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09));
3046}
3047#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 9
3048
3049#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 10
3050template <class TYPE>
3051template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
3052 class ARGS_02,
3053 class ARGS_03,
3054 class ARGS_04,
3055 class ARGS_05,
3056 class ARGS_06,
3057 class ARGS_07,
3058 class ARGS_08,
3059 class ARGS_09,
3060 class ARGS_10>
3061inline
3062void polymorphic_allocator<TYPE>::construct(
3063 ELEMENT_TYPE *address,
3064 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
3065 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
3066 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
3067 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
3068 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
3069 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
3070 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
3071 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
3072 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
3073 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
3074 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10)
3075{
3076 BloombergLP::bslma::ConstructionUtil::construct(
3077 address,
3078 *this,
3079 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
3080 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
3081 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
3082 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
3083 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
3084 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
3085 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
3086 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
3087 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
3088 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
3089 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10));
3090}
3091#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 10
3092
3093#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 11
3094template <class TYPE>
3095template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
3096 class ARGS_02,
3097 class ARGS_03,
3098 class ARGS_04,
3099 class ARGS_05,
3100 class ARGS_06,
3101 class ARGS_07,
3102 class ARGS_08,
3103 class ARGS_09,
3104 class ARGS_10,
3105 class ARGS_11>
3106inline
3107void polymorphic_allocator<TYPE>::construct(
3108 ELEMENT_TYPE *address,
3109 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
3110 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
3111 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
3112 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
3113 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
3114 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
3115 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
3116 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
3117 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
3118 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
3119 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
3120 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11)
3121{
3122 BloombergLP::bslma::ConstructionUtil::construct(
3123 address,
3124 *this,
3125 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
3126 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
3127 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
3128 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
3129 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
3130 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
3131 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
3132 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
3133 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
3134 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
3135 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
3136 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11));
3137}
3138#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 11
3139
3140#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 12
3141template <class TYPE>
3142template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
3143 class ARGS_02,
3144 class ARGS_03,
3145 class ARGS_04,
3146 class ARGS_05,
3147 class ARGS_06,
3148 class ARGS_07,
3149 class ARGS_08,
3150 class ARGS_09,
3151 class ARGS_10,
3152 class ARGS_11,
3153 class ARGS_12>
3154inline
3155void polymorphic_allocator<TYPE>::construct(
3156 ELEMENT_TYPE *address,
3157 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
3158 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
3159 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
3160 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
3161 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
3162 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
3163 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
3164 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
3165 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
3166 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
3167 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
3168 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
3169 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12)
3170{
3171 BloombergLP::bslma::ConstructionUtil::construct(
3172 address,
3173 *this,
3174 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
3175 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
3176 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
3177 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
3178 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
3179 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
3180 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
3181 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
3182 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
3183 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
3184 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
3185 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
3186 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12));
3187}
3188#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 12
3189
3190#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 13
3191template <class TYPE>
3192template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
3193 class ARGS_02,
3194 class ARGS_03,
3195 class ARGS_04,
3196 class ARGS_05,
3197 class ARGS_06,
3198 class ARGS_07,
3199 class ARGS_08,
3200 class ARGS_09,
3201 class ARGS_10,
3202 class ARGS_11,
3203 class ARGS_12,
3204 class ARGS_13>
3205inline
3206void polymorphic_allocator<TYPE>::construct(
3207 ELEMENT_TYPE *address,
3208 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
3209 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
3210 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
3211 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
3212 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
3213 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
3214 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
3215 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
3216 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
3217 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
3218 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
3219 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
3220 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
3221 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13)
3222{
3223 BloombergLP::bslma::ConstructionUtil::construct(
3224 address,
3225 *this,
3226 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
3227 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
3228 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
3229 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
3230 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
3231 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
3232 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
3233 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
3234 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
3235 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
3236 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
3237 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
3238 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
3239 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13));
3240}
3241#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 13
3242
3243#if BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 14
3244template <class TYPE>
3245template <class ELEMENT_TYPE, class ARG1, class ARGS_01,
3246 class ARGS_02,
3247 class ARGS_03,
3248 class ARGS_04,
3249 class ARGS_05,
3250 class ARGS_06,
3251 class ARGS_07,
3252 class ARGS_08,
3253 class ARGS_09,
3254 class ARGS_10,
3255 class ARGS_11,
3256 class ARGS_12,
3257 class ARGS_13,
3258 class ARGS_14>
3259inline
3260void polymorphic_allocator<TYPE>::construct(
3261 ELEMENT_TYPE *address,
3262 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
3263 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) arguments_01,
3264 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) arguments_02,
3265 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) arguments_03,
3266 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) arguments_04,
3267 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) arguments_05,
3268 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) arguments_06,
3269 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) arguments_07,
3270 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) arguments_08,
3271 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) arguments_09,
3272 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) arguments_10,
3273 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) arguments_11,
3274 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) arguments_12,
3275 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) arguments_13,
3276 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) arguments_14)
3277{
3278 BloombergLP::bslma::ConstructionUtil::construct(
3279 address,
3280 *this,
3281 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
3282 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, arguments_01),
3283 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, arguments_02),
3284 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, arguments_03),
3285 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, arguments_04),
3286 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, arguments_05),
3287 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, arguments_06),
3288 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, arguments_07),
3289 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, arguments_08),
3290 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, arguments_09),
3291 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, arguments_10),
3292 BSLS_COMPILERFEATURES_FORWARD(ARGS_11, arguments_11),
3293 BSLS_COMPILERFEATURES_FORWARD(ARGS_12, arguments_12),
3294 BSLS_COMPILERFEATURES_FORWARD(ARGS_13, arguments_13),
3295 BSLS_COMPILERFEATURES_FORWARD(ARGS_14, arguments_14));
3296}
3297#endif // BSLMA_POLYMORPHICALLOCATOR_VARIADIC_LIMIT_C >= 14
3298
3299#else
3300// The generated code below is a workaround for the absence of perfect
3301// forwarding in some compilers.
3302template <class TYPE>
3303template <class ELEMENT_TYPE, class ARG1, class... ARGS>
3304inline
3305void polymorphic_allocator<TYPE>::construct(ELEMENT_TYPE *address,
3306 ARG1& argument1,
3307 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... arguments)
3308{
3309 BloombergLP::bslma::ConstructionUtil::construct(
3310 address,
3311 *this,
3312 argument1,
3313 BSLS_COMPILERFEATURES_FORWARD(ARGS, arguments)...);
3314}
3315
3316template <class TYPE>
3317template <class ELEMENT_TYPE, class ARG1, class... ARGS>
3318inline
3319void polymorphic_allocator<TYPE>::construct(
3320 ELEMENT_TYPE *address,
3321 BSLS_COMPILERFEATURES_FORWARD_REF(ARG1) argument1,
3322 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... arguments)
3323{
3324 BloombergLP::bslma::ConstructionUtil::construct(
3325 address,
3326 *this,
3327 BSLS_COMPILERFEATURES_FORWARD(ARG1, argument1),
3328 BSLS_COMPILERFEATURES_FORWARD(ARGS, arguments)...);
3329}
3330// }}} END GENERATED CODE
3331#endif
3332
3333template <class TYPE>
3334template <class ELEMENT_TYPE>
3335inline
3336void polymorphic_allocator<TYPE>::destroy(ELEMENT_TYPE *address)
3337{
3338 BloombergLP::bslma::DestructionUtil::destroy(address);
3339}
3340
3341
3342// ACCESSORS
3343template <class TYPE>
3344inline
3345typename polymorphic_allocator<TYPE>::pointer
3346polymorphic_allocator<TYPE>::address(reference x) const
3347{
3348 return BloombergLP::bsls::Util::addressOf(x);
3349}
3350
3351template <class TYPE>
3352inline
3353typename polymorphic_allocator<TYPE>::const_pointer
3354polymorphic_allocator<TYPE>::address(const_reference x) const
3355{
3356 return BloombergLP::bsls::Util::addressOf(x);
3357}
3358
3359template <class TYPE>
3361typename polymorphic_allocator<TYPE>::size_type
3362polymorphic_allocator<TYPE>::max_size() const
3363{
3364 // Return the largest value, 'v', such that 'v * sizeof(T)' fits in a
3365 // 'size_type'.
3366
3367 return (~size_type(0)) / sizeof(TYPE);
3368}
3369
3370template <class TYPE>
3371inline
3372memory_resource *polymorphic_allocator<TYPE>::resource() const
3373{
3374 return d_resource;
3375}
3376
3377template <class TYPE>
3378inline
3379polymorphic_allocator<TYPE>
3380polymorphic_allocator<TYPE>::select_on_container_copy_construction() const
3381{
3382 return polymorphic_allocator();
3383}
3384
3385} // Close namespace bsl
3386
3387// FREE FUNCTIONS
3388template <class T1, class T2>
3389inline
3390bool
3393{
3394 return a.resource() == b.resource() || *a.resource() == *b.resource();
3395}
3396
3397template <class T1, class T2>
3398inline
3399bool
3402{
3403 return a.resource() != b.resource() && *a.resource() != *b.resource();
3404}
3405
3406#endif // defined(BSLS_LIBRARYFEATURES_HAS_CPP17_PMR)
3407
3408#else // if ! defined(DEFINED_BSLMA_POLYMORPHICALLOCATOR_H)
3409# error Not valid except when included from bslma_polymorphicallocator.h
3410#endif // ! defined(COMPILING_BSLMA_POLYMORPHICALLOCATOR_H)
3411
3412#endif // ! defined(INCLUDED_BSLMA_POLYMORPHICALLOCATOR_CPP03)
3413
3414// ----------------------------------------------------------------------------
3415// Copyright 2022 Bloomberg Finance L.P.
3416//
3417// Licensed under the Apache License, Version 2.0 (the "License");
3418// you may not use this file except in compliance with the License.
3419// You may obtain a copy of the License at
3420//
3421// http://www.apache.org/licenses/LICENSE-2.0
3422//
3423// Unless required by applicable law or agreed to in writing, software
3424// distributed under the License is distributed on an "AS IS" BASIS,
3425// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3426// See the License for the specific language governing permissions and
3427// limitations under the License.
3428// ----------------------------- END-OF-FILE ----------------------------------
3429
3430/** @} */
3431/** @} */
3432/** @} */
Definition bslma_polymorphicallocator.h:460
friend bool operator==(const polymorphic_allocator &a, const polymorphic_allocator &b) BSLS_KEYWORD_NOEXCEPT
Definition bslma_polymorphicallocator.h:644
BSLS_ANNOTATION_NODISCARD TYPE * allocate(std::size_t n)
Definition bslma_polymorphicallocator.h:963
memory_resource * resource() const
Return the address of the memory resource supplied on construction.
Definition bslma_polymorphicallocator.h:1074
TYPE * pointer
Definition bslma_polymorphicallocator.h:474
friend bool operator!=(const polymorphic_allocator &a, const polymorphic_allocator &b) BSLS_KEYWORD_NOEXCEPT
Definition bslma_polymorphicallocator.h:662
void construct(ELEMENT_TYPE *address)
Definition bslma_polymorphicallocator.h:999
const TYPE * const_pointer
Definition bslma_polymorphicallocator.h:475
polymorphic_allocator() BSLS_KEYWORD_NOEXCEPT
Definition bslma_polymorphicallocator.h:926
std::ptrdiff_t difference_type
Definition bslma_polymorphicallocator.h:473
TYPE & reference
Definition bslma_polymorphicallocator.h:476
std::size_t size_type
Definition bslma_polymorphicallocator.h:472
BSLS_KEYWORD_CONSTEXPR size_type max_size() const
Definition bslma_polymorphicallocator.h:1064
polymorphic_allocator select_on_container_copy_construction() const
Return a default-constructed polymorphic_allocator.
Definition bslma_polymorphicallocator.h:1082
TYPE value_type
Definition bslma_polymorphicallocator.h:478
void deallocate(TYPE *p, std::size_t n)
Definition bslma_polymorphicallocator.h:988
const TYPE & const_reference
Definition bslma_polymorphicallocator.h:477
pointer address(reference x) const
Definition bslma_polymorphicallocator.h:1048
void destroy(ELEMENT_TYPE *address)
Definition bslma_polymorphicallocator.h:1038
#define BSLS_ANNOTATION_NODISCARD
Definition bsls_annotation.h:368
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
#define BSLS_KEYWORD_CONSTEXPR
Definition bsls_keyword.h:624
#define BSLS_KEYWORD_DELETED
Definition bsls_keyword.h:651
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
bool operator!=(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
bool operator==(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
Definition bdlat_valuetypefunctions.h:939
integral_constant< bool, false > false_type
Definition bslmf_integralconstant.h:290
integral_constant< bool, true > true_type
Definition bslmf_integralconstant.h:296
bool operator==(const memory_resource &a, const memory_resource &b)
bool operator!=(const memory_resource &a, const memory_resource &b)
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
rebind_alloc(const ARG &allocatorArg)
Definition bslma_allocatortraits.h:1224
static pointer allocate(ALLOCATOR_TYPE &basicAllocator, size_type n)
Return basicAllocator.allocate(n).
Definition bslma_allocatortraits.h:1494
BloombergLP::bslma::AllocatorTraits_ConstPointerType< ALLOCATOR_TYPE >::type const_pointer
Definition bslma_allocatortraits.h:1183
BloombergLP::bslma::AllocatorTraits_VoidPointerType< ALLOCATOR_TYPE >::type void_pointer
Definition bslma_allocatortraits.h:1186
BloombergLP::bslma::AllocatorTraits_PropOnCopyAssign< ALLOCATOR_TYPE >::type propagate_on_container_copy_assignment
Definition bslma_allocatortraits.h:1332
BloombergLP::bslma::AllocatorTraits_PropOnMoveAssign< ALLOCATOR_TYPE >::type propagate_on_container_move_assignment
Definition bslma_allocatortraits.h:1341
static ALLOCATOR_TYPE select_on_container_copy_construction(const ALLOCATOR_TYPE &rhs)
Definition bslma_allocatortraits.h:1587
BloombergLP::bslma::AllocatorTraits_SizeType< ALLOCATOR_TYPE >::type size_type
Definition bslma_allocatortraits.h:1196
static void construct(ALLOCATOR_TYPE &basicAllocator, ELEMENT_TYPE *elementAddr, Args &&... arguments)
Definition bslma_allocatortraits.h:1527
static size_type max_size(const ALLOCATOR_TYPE &basicAllocator) BSLS_KEYWORD_NOEXCEPT
Definition bslma_allocatortraits.h:1570
BloombergLP::bslma::AllocatorTraits_PointerType< ALLOCATOR_TYPE >::type pointer
Definition bslma_allocatortraits.h:1180
static void destroy(ALLOCATOR_TYPE &basicAllocator, ELEMENT_TYPE *elementAddr)
Definition bslma_allocatortraits.h:1549
BloombergLP::bslma::AllocatorTraits_IsAlwaysEqual< ALLOCATOR_TYPE >::type is_always_equal
Definition bslma_allocatortraits.h:1323
static void deallocate(ALLOCATOR_TYPE &basicAllocator, pointer elementAddr, size_type n)
Definition bslma_allocatortraits.h:1513
BloombergLP::bslma::AllocatorTraits_PropOnSwap< ALLOCATOR_TYPE >::type propagate_on_container_swap
Definition bslma_allocatortraits.h:1350
ALLOCATOR_TYPE allocator_type
Definition bslma_allocatortraits.h:1175
BloombergLP::bslma::AllocatorTraits_ConstVoidPointerType< ALLOCATOR_TYPE >::type const_void_pointer
Definition bslma_allocatortraits.h:1189
BloombergLP::bslma::AllocatorTraits_DifferenceType< ALLOCATOR_TYPE >::type difference_type
Definition bslma_allocatortraits.h:1193
ALLOCATOR_TYPE::value_type value_type
Definition bslma_allocatortraits.h:1176
polymorphic_allocator< ANY_TYPE > other
Definition bslma_polymorphicallocator.h:490