BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bdlma_localbufferedobject_cpp03.h
Go to the documentation of this file.
1/// @file bdlma_localbufferedobject_cpp03.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bdlma_localbufferedobject_cpp03.h -*-C++-*-
8
9// Automatically generated file. **DO NOT EDIT**
10
11#ifndef INCLUDED_BDLMA_LOCALBUFFEREDOBJECT_CPP03
12#define INCLUDED_BDLMA_LOCALBUFFEREDOBJECT_CPP03
13
14/// @defgroup bdlma_localbufferedobject_cpp03 bdlma_localbufferedobject_cpp03
15/// @brief Provide C++03 implementation for bdlma_localbufferedobject.h
16/// @addtogroup bdl
17/// @{
18/// @addtogroup bdlma
19/// @{
20/// @addtogroup bdlma_localbufferedobject_cpp03
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bdlma_localbufferedobject_cpp03-purpose"> Purpose</a>
25/// * <a href="#bdlma_localbufferedobject_cpp03-classes"> Classes </a>
26/// * <a href="#bdlma_localbufferedobject_cpp03-description"> Description </a>
27///
28/// # Purpose {#bdlma_localbufferedobject_cpp03-purpose}
29/// Provide C++03 implementation for bdlma_localbufferedobject.h
30///
31/// # Classes {#bdlma_localbufferedobject_cpp03-classes}
32/// See bdlma_localbufferedobject.h for list of classes
33///
34/// @see bdlma_localbufferedobject
35///
36/// # Description {#bdlma_localbufferedobject_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 Wed Feb 19 10:30:58 2025
48/// Command line: sim_cpp11_features.pl bdlma_localbufferedobject.h
49/// @}
50/** @} */
51/** @} */
52
53/** @addtogroup bdl
54 * @{
55 */
56/** @addtogroup bdlma
57 * @{
58 */
59/** @addtogroup bdlma_localbufferedobject_cpp03
60 * @{
61 */
62
63#ifdef COMPILING_BDLMA_LOCALBUFFEREDOBJECT_H
64
65#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
66#define BDLMA_LOCAL_BUFFERED_VALUE_IS_ASSIGNABLE(DST, SRC) \
67 std::is_assignable<DST, SRC>::value
68#else
69#define BDLMA_LOCAL_BUFFERED_VALUE_IS_ASSIGNABLE(DST, SRC) true
70#endif
71
72
73namespace bdlma {
74
75 // =========================
76 // class LocalBufferedObject
77 // =========================
78
79/// This `class` contains an object of type `t_TYPE` and a local sequential
80/// allocator with an arena size of `t_BUFFER_SIZE`, from which the `t_TYPE`
81/// object allocates memory, in a single object. The
82/// `t_DISABLE_DESTRUCTION` template parameter can be used to prevent this
83/// `class` from calling `~t_TYPE()` in cases where it is known that
84/// `t_TYPE` manages no resources other than memory, since the memory will
85/// be adequately managed by the local sequential allocator.
86///
87/// See @ref bdlma_localbufferedobject_cpp03
88template <class t_TYPE,
89 bsl::size_t t_BUFFER_SIZE = 1024,
90 bool t_DISABLE_DESTRUCTION = false>
91class LocalBufferedObject {
92
94
95 public:
96 // PUBLIC TYPES
97 typedef t_TYPE value_type;
99
100 enum { k_BUFFER_SIZE = t_BUFFER_SIZE }; // The `size` template
101 // parameter to `LocalAllocator`
102 // takes an `int`, not `size_t`.
103
104 private:
105 // DATA
108
109 private:
110 // NOT IMPLEMENTED
111 LocalBufferedObject(const LocalBufferedObject&) BSLS_KEYWORD_DELETED;
112 LocalBufferedObject& operator=(const LocalBufferedObject&)
114
115 // PRIVATE MANIPULATORS
116
117 /// Call `d_arenaAllocator.release()`. If `t_DISABLE_DESTRUCTION` is
118 /// `false`, destroy the held object first.
119 void destroyHeldObject();
120
121 public:
122 // TRAITS
123 BSLMF_NESTED_TRAIT_DECLARATION(LocalBufferedObject,
124 BloombergLP::bslmf::UsesAllocatorArgT);
125
126 // CREATORS
127#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
128// {{{ BEGIN GENERATED CODE
129// Command line: sim_cpp11_features.pl bdlma_localbufferedobject.h
130#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
131#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT 10
132#endif
133#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A
134#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
135#endif
136#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 0
137 explicit LocalBufferedObject(
138 );
139#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 0
140
141#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 1
142 template <class ARGS_01>
143 explicit LocalBufferedObject(
144 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01);
145#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 1
146
147#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 2
148 template <class ARGS_01,
149 class ARGS_02>
150 explicit LocalBufferedObject(
151 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
152 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02);
153#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 2
154
155#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 3
156 template <class ARGS_01,
157 class ARGS_02,
158 class ARGS_03>
159 explicit LocalBufferedObject(
160 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
161 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
162 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03);
163#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 3
164
165#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 4
166 template <class ARGS_01,
167 class ARGS_02,
168 class ARGS_03,
169 class ARGS_04>
170 explicit LocalBufferedObject(
171 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
172 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
173 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
174 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04);
175#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 4
176
177#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 5
178 template <class ARGS_01,
179 class ARGS_02,
180 class ARGS_03,
181 class ARGS_04,
182 class ARGS_05>
183 explicit LocalBufferedObject(
184 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
185 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
186 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
187 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
188 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05);
189#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 5
190
191#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 6
192 template <class ARGS_01,
193 class ARGS_02,
194 class ARGS_03,
195 class ARGS_04,
196 class ARGS_05,
197 class ARGS_06>
198 explicit LocalBufferedObject(
199 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
200 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
201 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
202 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
203 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
204 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06);
205#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 6
206
207#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 7
208 template <class ARGS_01,
209 class ARGS_02,
210 class ARGS_03,
211 class ARGS_04,
212 class ARGS_05,
213 class ARGS_06,
214 class ARGS_07>
215 explicit LocalBufferedObject(
216 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
217 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
218 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
219 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
220 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
221 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
222 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07);
223#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 7
224
225#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 8
226 template <class ARGS_01,
227 class ARGS_02,
228 class ARGS_03,
229 class ARGS_04,
230 class ARGS_05,
231 class ARGS_06,
232 class ARGS_07,
233 class ARGS_08>
234 explicit LocalBufferedObject(
235 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
236 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
237 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
238 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
239 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
240 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
241 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
242 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08);
243#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 8
244
245#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 9
246 template <class ARGS_01,
247 class ARGS_02,
248 class ARGS_03,
249 class ARGS_04,
250 class ARGS_05,
251 class ARGS_06,
252 class ARGS_07,
253 class ARGS_08,
254 class ARGS_09>
255 explicit LocalBufferedObject(
256 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
257 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
258 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
259 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
260 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
261 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
262 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
263 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
264 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09);
265#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 9
266
267#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 10
268 template <class ARGS_01,
269 class ARGS_02,
270 class ARGS_03,
271 class ARGS_04,
272 class ARGS_05,
273 class ARGS_06,
274 class ARGS_07,
275 class ARGS_08,
276 class ARGS_09,
277 class ARGS_10>
278 explicit LocalBufferedObject(
279 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
280 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
281 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
282 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
283 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
284 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
285 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
286 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
287 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
288 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10);
289#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 10
290
291
292#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 0
293 LocalBufferedObject(bsl::allocator_arg_t ,
294 allocator_type allocator);
295#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 0
296
297#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 1
298 template <class ARGS_01>
299 LocalBufferedObject(bsl::allocator_arg_t ,
300 allocator_type allocator,
301 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01);
302#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 1
303
304#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 2
305 template <class ARGS_01,
306 class ARGS_02>
307 LocalBufferedObject(bsl::allocator_arg_t ,
308 allocator_type allocator,
309 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
310 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02);
311#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 2
312
313#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 3
314 template <class ARGS_01,
315 class ARGS_02,
316 class ARGS_03>
317 LocalBufferedObject(bsl::allocator_arg_t ,
318 allocator_type allocator,
319 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
320 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
321 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03);
322#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 3
323
324#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 4
325 template <class ARGS_01,
326 class ARGS_02,
327 class ARGS_03,
328 class ARGS_04>
329 LocalBufferedObject(bsl::allocator_arg_t ,
330 allocator_type allocator,
331 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
332 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
333 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
334 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04);
335#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 4
336
337#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 5
338 template <class ARGS_01,
339 class ARGS_02,
340 class ARGS_03,
341 class ARGS_04,
342 class ARGS_05>
343 LocalBufferedObject(bsl::allocator_arg_t ,
344 allocator_type allocator,
345 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
346 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
347 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
348 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
349 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05);
350#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 5
351
352#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 6
353 template <class ARGS_01,
354 class ARGS_02,
355 class ARGS_03,
356 class ARGS_04,
357 class ARGS_05,
358 class ARGS_06>
359 LocalBufferedObject(bsl::allocator_arg_t ,
360 allocator_type allocator,
361 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
362 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
363 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
364 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
365 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
366 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06);
367#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 6
368
369#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 7
370 template <class ARGS_01,
371 class ARGS_02,
372 class ARGS_03,
373 class ARGS_04,
374 class ARGS_05,
375 class ARGS_06,
376 class ARGS_07>
377 LocalBufferedObject(bsl::allocator_arg_t ,
378 allocator_type allocator,
379 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
380 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
381 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
382 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
383 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
384 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
385 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07);
386#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 7
387
388#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 8
389 template <class ARGS_01,
390 class ARGS_02,
391 class ARGS_03,
392 class ARGS_04,
393 class ARGS_05,
394 class ARGS_06,
395 class ARGS_07,
396 class ARGS_08>
397 LocalBufferedObject(bsl::allocator_arg_t ,
398 allocator_type allocator,
399 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
400 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
401 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
402 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
403 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
404 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
405 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
406 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08);
407#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 8
408
409#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 9
410 template <class ARGS_01,
411 class ARGS_02,
412 class ARGS_03,
413 class ARGS_04,
414 class ARGS_05,
415 class ARGS_06,
416 class ARGS_07,
417 class ARGS_08,
418 class ARGS_09>
419 LocalBufferedObject(bsl::allocator_arg_t ,
420 allocator_type allocator,
421 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
422 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
423 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
424 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
425 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
426 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
427 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
428 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
429 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09);
430#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 9
431
432#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 10
433 template <class ARGS_01,
434 class ARGS_02,
435 class ARGS_03,
436 class ARGS_04,
437 class ARGS_05,
438 class ARGS_06,
439 class ARGS_07,
440 class ARGS_08,
441 class ARGS_09,
442 class ARGS_10>
443 LocalBufferedObject(bsl::allocator_arg_t ,
444 allocator_type allocator,
445 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
446 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
447 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
448 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
449 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
450 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
451 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
452 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
453 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
454 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10);
455#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_A >= 10
456
457#else
458// The generated code below is a workaround for the absence of perfect
459// forwarding in some compilers.
460 template <class... ARGS>
461 explicit LocalBufferedObject(
463
464 template <class... ARGS>
465 LocalBufferedObject(bsl::allocator_arg_t ,
466 allocator_type allocator,
468// }}} END GENERATED CODE
469#endif
470
471#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
472 /// Create the `value_type` object using the specified
473 /// @ref initializer_list and using the sequential allocator based on a
474 /// local stack buffer of (template parameter) `t_BUFFER_SIZE` size; if
475 /// local stack memory is exausted, use the default allocator to supply
476 /// additional heap memory.
477 template <class INIT_LIST_TYPE>
478 LocalBufferedObject(std::initializer_list<INIT_LIST_TYPE> il);
479
480 /// Create the `value_type` object using the specified
481 /// @ref initializer_list and using the sequential allocator based on a
482 /// local stack buffer of (template parameter) `t_BUFFER_SIZE` size; if
483 /// local stack memory is exausted, use the specified `allocator` to
484 /// supply additional heap memory.
485 template <class INIT_LIST_TYPE>
486 LocalBufferedObject(bsl::allocator_arg_t ,
487 allocator_type allocator,
488 std::initializer_list<INIT_LIST_TYPE> il);
489
490#endif // BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
491
492 /// Destroy this object and free any memory it uses, and if the
493 /// (template parameter) `t_DISABLE_DESTRUCTION` is `true`, do this
494 /// *without* calling the destructor of `value_type` (see
495 /// `t_DISABLE_DESTRUCTION` template parameter in the component doc).
497
498 // MANIPULATORS
499// {{{ BEGIN GENERATED CODE
500// The generated code below is a workaround for the absence of perfect
501// forwarding in some compilers.
502 template <class t_ANY_TYPE>
504 t_TYPE,
506 LocalBufferedObject>::type&
507 operator=(BSLS_COMPILERFEATURES_FORWARD_REF(t_ANY_TYPE) value);
508// }}} END GENERATED CODE
509
510 /// Return a pointer providing modifiable access to the underlying
511 /// `t_TYPE` object.
513
514 /// Return a reference providing modifiable access to the underlying
515 /// `t_TYPE` object.
517
518#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
519// {{{ BEGIN GENERATED CODE
520// Command line: sim_cpp11_features.pl bdlma_localbufferedobject.h
521#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
522#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT 10
523#endif
524#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C
525#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
526#endif
527#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 0
528 void emplace();
529#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 0
530
531#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 1
532 template <class ARGS_01>
533 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01);
534#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 1
535
536#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 2
537 template <class ARGS_01,
538 class ARGS_02>
539 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
540 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02);
541#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 2
542
543#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 3
544 template <class ARGS_01,
545 class ARGS_02,
546 class ARGS_03>
547 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
548 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
549 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03);
550#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 3
551
552#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 4
553 template <class ARGS_01,
554 class ARGS_02,
555 class ARGS_03,
556 class ARGS_04>
557 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
558 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
559 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
560 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04);
561#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 4
562
563#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 5
564 template <class ARGS_01,
565 class ARGS_02,
566 class ARGS_03,
567 class ARGS_04,
568 class ARGS_05>
569 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
570 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
571 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
572 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
573 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05);
574#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 5
575
576#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 6
577 template <class ARGS_01,
578 class ARGS_02,
579 class ARGS_03,
580 class ARGS_04,
581 class ARGS_05,
582 class ARGS_06>
583 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
584 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
585 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
586 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
587 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
588 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06);
589#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 6
590
591#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 7
592 template <class ARGS_01,
593 class ARGS_02,
594 class ARGS_03,
595 class ARGS_04,
596 class ARGS_05,
597 class ARGS_06,
598 class ARGS_07>
599 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
600 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
601 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
602 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
603 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
604 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
605 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07);
606#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 7
607
608#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 8
609 template <class ARGS_01,
610 class ARGS_02,
611 class ARGS_03,
612 class ARGS_04,
613 class ARGS_05,
614 class ARGS_06,
615 class ARGS_07,
616 class ARGS_08>
617 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
618 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
619 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
620 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
621 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
622 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
623 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
624 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08);
625#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 8
626
627#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 9
628 template <class ARGS_01,
629 class ARGS_02,
630 class ARGS_03,
631 class ARGS_04,
632 class ARGS_05,
633 class ARGS_06,
634 class ARGS_07,
635 class ARGS_08,
636 class ARGS_09>
637 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
638 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
639 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
640 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
641 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
642 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
643 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
644 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
645 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09);
646#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 9
647
648#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 10
649 template <class ARGS_01,
650 class ARGS_02,
651 class ARGS_03,
652 class ARGS_04,
653 class ARGS_05,
654 class ARGS_06,
655 class ARGS_07,
656 class ARGS_08,
657 class ARGS_09,
658 class ARGS_10>
659 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
660 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
661 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
662 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
663 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
664 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
665 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
666 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
667 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
668 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10);
669#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_C >= 10
670
671#else
672// The generated code below is a workaround for the absence of perfect
673// forwarding in some compilers.
674 template <class... ARGS>
675 void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... args);
676// }}} END GENERATED CODE
677#endif
678
679#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
680 /// Destroy the `value_type` object unless `t_DISABLE_DESTRUCTION` is
681 /// true, then release all allocated memory, the re-construct a new
682 /// `value_type` object using the specified `il` and using the
683 /// sequential allocator based on the local stack buffer.
684 template <class INIT_LIST_TYPE>
685 void emplace(std::initializer_list<INIT_LIST_TYPE> il);
686
687#endif // BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
688
689 // ACCESSORS
690
691 /// Return a pointer providing const access to the underlying `t_TYPE`
692 /// object.
693 const value_type *operator->() const;
694
695 /// Return a reference providing const access to the underlying `t_TYPE`
696 /// object.
697 const value_type& operator*() const;
698
699 /// Return the alloctor passed at construction, used to provide heap memory after the local stack buffer is exhausted.
700 ///
701 /// \note Note that this
702 /// is not the arena allocator contained in this object.
704};
705
706// ============================================================================
707// INLINE & TEMPLATE DEFINITIONS
708// ============================================================================
709
710 // -------------------
711 // LocalBufferedObject
712 // -------------------
713
714// PRIVATE MANIPULATORS
715template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
716inline
717void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
718 destroyHeldObject()
719{
720 if (!t_DISABLE_DESTRUCTION) {
721 d_object.address()->~value_type();
722 }
723}
724
725// CREATORS
726#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
727// {{{ BEGIN GENERATED CODE
728// Command line: sim_cpp11_features.pl bdlma_localbufferedobject.h
729#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
730#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT 10
731#endif
732#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D
733#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
734#endif
735#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 0
736template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
737inline
738LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
739 LocalBufferedObject()
740: d_arenaAllocator()
741{
743 d_object.address(),
744 bslma::AllocatorUtil::adapt(&d_arenaAllocator));
745}
746#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 0
747
748#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 1
749template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
750template <class ARGS_01>
751inline
752LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
753 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01)
754: d_arenaAllocator()
755{
757 d_object.address(),
758 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
759 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01));
760}
761#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 1
762
763#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 2
764template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
765template <class ARGS_01,
766 class ARGS_02>
767inline
768LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
769 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
770 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02)
771: d_arenaAllocator()
772{
774 d_object.address(),
775 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
776 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
777 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02));
778}
779#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 2
780
781#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 3
782template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
783template <class ARGS_01,
784 class ARGS_02,
785 class ARGS_03>
786inline
787LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
788 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
789 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
790 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03)
791: d_arenaAllocator()
792{
794 d_object.address(),
795 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
796 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
797 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
798 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03));
799}
800#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 3
801
802#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 4
803template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
804template <class ARGS_01,
805 class ARGS_02,
806 class ARGS_03,
807 class ARGS_04>
808inline
809LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
810 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
811 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
812 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
813 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04)
814: d_arenaAllocator()
815{
817 d_object.address(),
818 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
819 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
820 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
821 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
822 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04));
823}
824#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 4
825
826#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 5
827template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
828template <class ARGS_01,
829 class ARGS_02,
830 class ARGS_03,
831 class ARGS_04,
832 class ARGS_05>
833inline
834LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
835 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
836 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
837 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
838 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
839 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05)
840: d_arenaAllocator()
841{
843 d_object.address(),
844 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
845 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
846 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
847 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
848 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
849 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05));
850}
851#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 5
852
853#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 6
854template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
855template <class ARGS_01,
856 class ARGS_02,
857 class ARGS_03,
858 class ARGS_04,
859 class ARGS_05,
860 class ARGS_06>
861inline
862LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
863 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
864 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
865 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
866 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
867 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
868 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06)
869: d_arenaAllocator()
870{
872 d_object.address(),
873 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
874 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
875 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
876 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
877 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
878 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
879 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06));
880}
881#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 6
882
883#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 7
884template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
885template <class ARGS_01,
886 class ARGS_02,
887 class ARGS_03,
888 class ARGS_04,
889 class ARGS_05,
890 class ARGS_06,
891 class ARGS_07>
892inline
893LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
894 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
895 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
896 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
897 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
898 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
899 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
900 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07)
901: d_arenaAllocator()
902{
904 d_object.address(),
905 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
906 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
907 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
908 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
909 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
910 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
911 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
912 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07));
913}
914#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 7
915
916#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 8
917template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
918template <class ARGS_01,
919 class ARGS_02,
920 class ARGS_03,
921 class ARGS_04,
922 class ARGS_05,
923 class ARGS_06,
924 class ARGS_07,
925 class ARGS_08>
926inline
927LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
928 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
929 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
930 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
931 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
932 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
933 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
934 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
935 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08)
936: d_arenaAllocator()
937{
939 d_object.address(),
940 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
941 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
942 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
943 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
944 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
945 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
946 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
947 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
948 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08));
949}
950#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 8
951
952#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 9
953template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
954template <class ARGS_01,
955 class ARGS_02,
956 class ARGS_03,
957 class ARGS_04,
958 class ARGS_05,
959 class ARGS_06,
960 class ARGS_07,
961 class ARGS_08,
962 class ARGS_09>
963inline
964LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
965 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
966 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
967 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
968 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
969 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
970 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
971 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
972 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
973 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09)
974: d_arenaAllocator()
975{
977 d_object.address(),
978 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
979 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
980 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
981 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
982 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
983 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
984 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
985 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
986 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08),
987 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, args_09));
988}
989#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 9
990
991#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 10
992template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
993template <class ARGS_01,
994 class ARGS_02,
995 class ARGS_03,
996 class ARGS_04,
997 class ARGS_05,
998 class ARGS_06,
999 class ARGS_07,
1000 class ARGS_08,
1001 class ARGS_09,
1002 class ARGS_10>
1003inline
1004LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1005 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1006 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1007 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1008 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1009 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1010 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1011 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
1012 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
1013 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
1014 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10)
1015: d_arenaAllocator()
1016{
1018 d_object.address(),
1019 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1020 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1021 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1022 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1023 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1024 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1025 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1026 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
1027 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08),
1028 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, args_09),
1029 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, args_10));
1030}
1031#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 10
1032
1033
1034#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 0
1035template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1036inline
1037LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1038 LocalBufferedObject(bsl::allocator_arg_t ,
1039 bsl::allocator<> allocator)
1040: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1041{
1043 d_object.address(),
1044 bslma::AllocatorUtil::adapt(&d_arenaAllocator));
1045}
1046#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 0
1047
1048#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 1
1049template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1050template <class ARGS_01>
1051inline
1052LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1053 LocalBufferedObject(bsl::allocator_arg_t ,
1054 bsl::allocator<> allocator,
1055 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01)
1056: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1057{
1059 d_object.address(),
1060 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1061 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01));
1062}
1063#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 1
1064
1065#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 2
1066template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1067template <class ARGS_01,
1068 class ARGS_02>
1069inline
1070LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1071 LocalBufferedObject(bsl::allocator_arg_t ,
1072 bsl::allocator<> allocator,
1073 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1074 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02)
1075: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1076{
1078 d_object.address(),
1079 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1080 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1081 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02));
1082}
1083#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 2
1084
1085#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 3
1086template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1087template <class ARGS_01,
1088 class ARGS_02,
1089 class ARGS_03>
1090inline
1091LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1092 LocalBufferedObject(bsl::allocator_arg_t ,
1093 bsl::allocator<> allocator,
1094 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1095 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1096 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03)
1097: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1098{
1100 d_object.address(),
1101 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1102 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1103 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1104 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03));
1105}
1106#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 3
1107
1108#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 4
1109template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1110template <class ARGS_01,
1111 class ARGS_02,
1112 class ARGS_03,
1113 class ARGS_04>
1114inline
1115LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1116 LocalBufferedObject(bsl::allocator_arg_t ,
1117 bsl::allocator<> allocator,
1118 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1119 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1120 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1121 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04)
1122: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1123{
1125 d_object.address(),
1126 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1127 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1128 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1129 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1130 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04));
1131}
1132#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 4
1133
1134#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 5
1135template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1136template <class ARGS_01,
1137 class ARGS_02,
1138 class ARGS_03,
1139 class ARGS_04,
1140 class ARGS_05>
1141inline
1142LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1143 LocalBufferedObject(bsl::allocator_arg_t ,
1144 bsl::allocator<> allocator,
1145 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1146 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1147 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1148 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1149 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05)
1150: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1151{
1153 d_object.address(),
1154 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1155 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1156 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1157 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1158 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1159 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05));
1160}
1161#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 5
1162
1163#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 6
1164template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1165template <class ARGS_01,
1166 class ARGS_02,
1167 class ARGS_03,
1168 class ARGS_04,
1169 class ARGS_05,
1170 class ARGS_06>
1171inline
1172LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1173 LocalBufferedObject(bsl::allocator_arg_t ,
1174 bsl::allocator<> allocator,
1175 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1176 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1177 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1178 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1179 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1180 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06)
1181: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1182{
1184 d_object.address(),
1185 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1186 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1187 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1188 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1189 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1190 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1191 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06));
1192}
1193#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 6
1194
1195#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 7
1196template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1197template <class ARGS_01,
1198 class ARGS_02,
1199 class ARGS_03,
1200 class ARGS_04,
1201 class ARGS_05,
1202 class ARGS_06,
1203 class ARGS_07>
1204inline
1205LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1206 LocalBufferedObject(bsl::allocator_arg_t ,
1207 bsl::allocator<> allocator,
1208 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1209 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1210 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1211 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1212 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1213 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1214 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07)
1215: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1216{
1218 d_object.address(),
1219 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1220 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1221 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1222 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1223 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1224 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1225 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1226 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07));
1227}
1228#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 7
1229
1230#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 8
1231template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1232template <class ARGS_01,
1233 class ARGS_02,
1234 class ARGS_03,
1235 class ARGS_04,
1236 class ARGS_05,
1237 class ARGS_06,
1238 class ARGS_07,
1239 class ARGS_08>
1240inline
1241LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1242 LocalBufferedObject(bsl::allocator_arg_t ,
1243 bsl::allocator<> allocator,
1244 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1245 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1246 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1247 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1248 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1249 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1250 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
1251 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08)
1252: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1253{
1255 d_object.address(),
1256 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1257 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1258 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1259 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1260 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1261 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1262 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1263 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
1264 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08));
1265}
1266#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 8
1267
1268#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 9
1269template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1270template <class ARGS_01,
1271 class ARGS_02,
1272 class ARGS_03,
1273 class ARGS_04,
1274 class ARGS_05,
1275 class ARGS_06,
1276 class ARGS_07,
1277 class ARGS_08,
1278 class ARGS_09>
1279inline
1280LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1281 LocalBufferedObject(bsl::allocator_arg_t ,
1282 bsl::allocator<> allocator,
1283 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1284 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1285 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1286 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1287 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1288 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1289 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
1290 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
1291 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09)
1292: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1293{
1295 d_object.address(),
1296 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1297 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1298 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1299 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1300 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1301 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1302 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1303 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
1304 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08),
1305 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, args_09));
1306}
1307#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 9
1308
1309#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 10
1310template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1311template <class ARGS_01,
1312 class ARGS_02,
1313 class ARGS_03,
1314 class ARGS_04,
1315 class ARGS_05,
1316 class ARGS_06,
1317 class ARGS_07,
1318 class ARGS_08,
1319 class ARGS_09,
1320 class ARGS_10>
1321inline
1322LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1323 LocalBufferedObject(bsl::allocator_arg_t ,
1324 bsl::allocator<> allocator,
1325 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1326 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1327 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1328 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1329 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1330 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1331 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
1332 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
1333 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
1334 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10)
1335: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1336{
1338 d_object.address(),
1339 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1340 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1341 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1342 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1343 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1344 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1345 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1346 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
1347 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08),
1348 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, args_09),
1349 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, args_10));
1350}
1351#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_D >= 10
1352
1353#else
1354// The generated code below is a workaround for the absence of perfect
1355// forwarding in some compilers.
1356template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1357template <class... ARGS>
1358inline
1359LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1360 LocalBufferedObject(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... args)
1361: d_arenaAllocator()
1362{
1364 d_object.address(),
1365 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1366 BSLS_COMPILERFEATURES_FORWARD(ARGS, args)...);
1367}
1368
1369template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1370template <class... ARGS>
1371inline
1372LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1373 LocalBufferedObject(bsl::allocator_arg_t ,
1374 bsl::allocator<> allocator,
1376: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1377{
1379 d_object.address(),
1380 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1381 BSLS_COMPILERFEATURES_FORWARD(ARGS, args)...);
1382}
1383// }}} END GENERATED CODE
1384#endif
1385
1386#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1387template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1388template <class INIT_LIST_TYPE>
1389inline
1390LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1391 LocalBufferedObject(std::initializer_list<INIT_LIST_TYPE> il)
1392: d_arenaAllocator()
1393{
1395 d_object.address(),
1396 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1397 il);
1398}
1399
1400template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1401template <class INIT_LIST_TYPE>
1402inline
1403LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1404 LocalBufferedObject(bsl::allocator_arg_t ,
1405 bsl::allocator<> allocator,
1406 std::initializer_list<INIT_LIST_TYPE> il)
1407: d_arenaAllocator(bslma::AllocatorUtil::adapt(allocator))
1408{
1410 d_object.address(),
1411 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1412 il);
1413}
1414#endif // BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1415
1416template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1417inline
1418LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1419 ~LocalBufferedObject()
1420{
1421 destroyHeldObject();
1422}
1423
1424// MANIPULATORS
1425// {{{ BEGIN GENERATED CODE
1426// The generated code below is a workaround for the absence of perfect
1427// forwarding in some compilers.
1428template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1429template <class t_ANY_TYPE>
1430typename bsl::enable_if<
1432 t_TYPE,
1434 LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION> >::type&
1435LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::operator=(
1436 BSLS_COMPILERFEATURES_FORWARD_REF(t_ANY_TYPE) value)
1437{
1438 d_object.object() = BSLS_COMPILERFEATURES_FORWARD(t_ANY_TYPE, value);
1439
1440 return *this;
1441}
1442// }}} END GENERATED CODE
1443
1444template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1445inline
1446t_TYPE *LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1447 operator->()
1448{
1449 return d_object.address();
1450}
1451
1452template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1453inline
1454t_TYPE& LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1455 operator*()
1456{
1457 return d_object.object();
1458}
1459
1460#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
1461// {{{ BEGIN GENERATED CODE
1462// Command line: sim_cpp11_features.pl bdlma_localbufferedobject.h
1463#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
1464#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT 10
1465#endif
1466#ifndef BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F
1467#define BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT
1468#endif
1469#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 0
1470template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1471void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1472 emplace()
1473{
1474 destroyHeldObject();
1475 d_arenaAllocator.release();
1477 d_object.address(),
1478 bslma::AllocatorUtil::adapt(&d_arenaAllocator));
1479}
1480#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 0
1481
1482#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 1
1483template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1484template <class ARGS_01>
1485void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1486 emplace(
1487 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01)
1488{
1489 destroyHeldObject();
1490 d_arenaAllocator.release();
1492 d_object.address(),
1493 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1494 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01));
1495}
1496#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 1
1497
1498#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 2
1499template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1500template <class ARGS_01,
1501 class ARGS_02>
1502void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1503 emplace(
1504 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1505 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02)
1506{
1507 destroyHeldObject();
1508 d_arenaAllocator.release();
1510 d_object.address(),
1511 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1512 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1513 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02));
1514}
1515#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 2
1516
1517#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 3
1518template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1519template <class ARGS_01,
1520 class ARGS_02,
1521 class ARGS_03>
1522void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1523 emplace(
1524 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1525 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1526 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03)
1527{
1528 destroyHeldObject();
1529 d_arenaAllocator.release();
1531 d_object.address(),
1532 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1533 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1534 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1535 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03));
1536}
1537#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 3
1538
1539#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 4
1540template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1541template <class ARGS_01,
1542 class ARGS_02,
1543 class ARGS_03,
1544 class ARGS_04>
1545void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1546 emplace(
1547 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1548 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1549 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1550 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04)
1551{
1552 destroyHeldObject();
1553 d_arenaAllocator.release();
1555 d_object.address(),
1556 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1557 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1558 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1559 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1560 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04));
1561}
1562#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 4
1563
1564#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 5
1565template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1566template <class ARGS_01,
1567 class ARGS_02,
1568 class ARGS_03,
1569 class ARGS_04,
1570 class ARGS_05>
1571void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1572 emplace(
1573 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1574 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1575 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1576 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1577 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05)
1578{
1579 destroyHeldObject();
1580 d_arenaAllocator.release();
1582 d_object.address(),
1583 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1584 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1585 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1586 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1587 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1588 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05));
1589}
1590#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 5
1591
1592#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 6
1593template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1594template <class ARGS_01,
1595 class ARGS_02,
1596 class ARGS_03,
1597 class ARGS_04,
1598 class ARGS_05,
1599 class ARGS_06>
1600void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1601 emplace(
1602 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1603 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1604 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1605 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1606 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1607 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06)
1608{
1609 destroyHeldObject();
1610 d_arenaAllocator.release();
1612 d_object.address(),
1613 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1614 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1615 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1616 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1617 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1618 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1619 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06));
1620}
1621#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 6
1622
1623#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 7
1624template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1625template <class ARGS_01,
1626 class ARGS_02,
1627 class ARGS_03,
1628 class ARGS_04,
1629 class ARGS_05,
1630 class ARGS_06,
1631 class ARGS_07>
1632void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1633 emplace(
1634 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1635 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1636 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1637 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1638 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1639 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1640 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07)
1641{
1642 destroyHeldObject();
1643 d_arenaAllocator.release();
1645 d_object.address(),
1646 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1647 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1648 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1649 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1650 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1651 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1652 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1653 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07));
1654}
1655#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 7
1656
1657#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 8
1658template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1659template <class ARGS_01,
1660 class ARGS_02,
1661 class ARGS_03,
1662 class ARGS_04,
1663 class ARGS_05,
1664 class ARGS_06,
1665 class ARGS_07,
1666 class ARGS_08>
1667void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1668 emplace(
1669 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1670 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1671 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1672 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1673 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1674 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1675 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
1676 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08)
1677{
1678 destroyHeldObject();
1679 d_arenaAllocator.release();
1681 d_object.address(),
1682 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1683 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1684 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1685 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1686 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1687 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1688 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1689 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
1690 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08));
1691}
1692#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 8
1693
1694#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 9
1695template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1696template <class ARGS_01,
1697 class ARGS_02,
1698 class ARGS_03,
1699 class ARGS_04,
1700 class ARGS_05,
1701 class ARGS_06,
1702 class ARGS_07,
1703 class ARGS_08,
1704 class ARGS_09>
1705void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1706 emplace(
1707 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1708 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1709 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1710 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1711 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1712 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1713 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
1714 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
1715 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09)
1716{
1717 destroyHeldObject();
1718 d_arenaAllocator.release();
1720 d_object.address(),
1721 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1722 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1723 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1724 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1725 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1726 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1727 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1728 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
1729 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08),
1730 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, args_09));
1731}
1732#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 9
1733
1734#if BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 10
1735template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1736template <class ARGS_01,
1737 class ARGS_02,
1738 class ARGS_03,
1739 class ARGS_04,
1740 class ARGS_05,
1741 class ARGS_06,
1742 class ARGS_07,
1743 class ARGS_08,
1744 class ARGS_09,
1745 class ARGS_10>
1746void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1747 emplace(
1748 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
1749 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
1750 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
1751 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
1752 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
1753 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
1754 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
1755 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
1756 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
1757 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10)
1758{
1759 destroyHeldObject();
1760 d_arenaAllocator.release();
1762 d_object.address(),
1763 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1764 BSLS_COMPILERFEATURES_FORWARD(ARGS_01, args_01),
1765 BSLS_COMPILERFEATURES_FORWARD(ARGS_02, args_02),
1766 BSLS_COMPILERFEATURES_FORWARD(ARGS_03, args_03),
1767 BSLS_COMPILERFEATURES_FORWARD(ARGS_04, args_04),
1768 BSLS_COMPILERFEATURES_FORWARD(ARGS_05, args_05),
1769 BSLS_COMPILERFEATURES_FORWARD(ARGS_06, args_06),
1770 BSLS_COMPILERFEATURES_FORWARD(ARGS_07, args_07),
1771 BSLS_COMPILERFEATURES_FORWARD(ARGS_08, args_08),
1772 BSLS_COMPILERFEATURES_FORWARD(ARGS_09, args_09),
1773 BSLS_COMPILERFEATURES_FORWARD(ARGS_10, args_10));
1774}
1775#endif // BDLMA_LOCALBUFFEREDOBJECT_VARIADIC_LIMIT_F >= 10
1776
1777#else
1778// The generated code below is a workaround for the absence of perfect
1779// forwarding in some compilers.
1780template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1781template <class... ARGS>
1782void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1783 emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... args)
1784{
1785 destroyHeldObject();
1786 d_arenaAllocator.release();
1788 d_object.address(),
1789 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1790 BSLS_COMPILERFEATURES_FORWARD(ARGS, args)...);
1791}
1792// }}} END GENERATED CODE
1793#endif
1794
1795#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1796template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1797template <class INIT_LIST_TYPE>
1798void LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1799 emplace(std::initializer_list<INIT_LIST_TYPE> il)
1800{
1801 destroyHeldObject();
1802 d_arenaAllocator.release();
1804 d_object.address(),
1805 bslma::AllocatorUtil::adapt(&d_arenaAllocator),
1806 il);
1807}
1808#endif // BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1809
1810// ACCESSORS
1811template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1812inline
1813const t_TYPE *
1814LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1815 operator->() const
1816{
1817 return d_object.address();
1818}
1819
1820template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1821inline
1822const t_TYPE&
1823LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1824 operator*() const
1825{
1826 return d_object.object();
1827}
1828
1829template <class t_TYPE, bsl::size_t t_BUFFER_SIZE, bool t_DISABLE_DESTRUCTION>
1830inline
1832LocalBufferedObject<t_TYPE, t_BUFFER_SIZE, t_DISABLE_DESTRUCTION>::
1833 get_allocator() const
1834{
1835 return allocator_type(d_arenaAllocator.allocator());
1836}
1837
1838#undef BDLMA_LOCAL_BUFFERED_VALUE_IS_ASSIGNABLE
1839
1840} // close package namespace
1841
1842
1843#else // if ! defined(DEFINED_BDLMA_LOCALBUFFEREDOBJECT_H)
1844# error Not valid except when included from bdlma_localbufferedobject.h
1845#endif // ! defined(COMPILING_BDLMA_LOCALBUFFEREDOBJECT_H)
1846
1847#endif // ! defined(INCLUDED_BDLMA_LOCALBUFFEREDOBJECT_CPP03)
1848
1849// ----------------------------------------------------------------------------
1850// Copyright 2024 Bloomberg Finance L.P.
1851//
1852// Licensed under the Apache License, Version 2.0 (the "License");
1853// you may not use this file except in compliance with the License.
1854// You may obtain a copy of the License at
1855//
1856// http://www.apache.org/licenses/LICENSE-2.0
1857//
1858// Unless required by applicable law or agreed to in writing, software
1859// distributed under the License is distributed on an "AS IS" BASIS,
1860// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1861// See the License for the specific language governing permissions and
1862// limitations under the License.
1863// ----------------------------- END-OF-FILE ----------------------------------
1864
1865/** @} */
1866/** @} */
1867/** @} */
#define BSLMF_NESTED_TRAIT_DECLARATION(t_TYPE, t_TRAIT)
Definition bslmf_nestedtraitdeclaration.h:231
bslma::Allocator * allocator() const
Return the allocator passed at construction.
Definition bdlma_bufferedsequentialallocator.h:537
void release() BSLS_KEYWORD_OVERRIDE
Definition bdlma_bufferedsequentialallocator.h:524
t_TYPE value_type
Definition bdlma_localbufferedobject.h:273
value_type & operator*()
Definition bdlma_localbufferedobject.h:524
~LocalBufferedObject()
Definition bdlma_localbufferedobject.h:489
@ k_BUFFER_SIZE
Definition bdlma_localbufferedobject.h:276
allocator_type get_allocator() const
Definition bdlma_localbufferedobject.h:582
value_type * operator->()
Definition bdlma_localbufferedobject.h:516
void emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)... args)
Definition bdlma_localbufferedobject.h:533
bsl::allocator allocator_type
Definition bdlma_localbufferedobject.h:274
Definition bdlma_localsequentialallocator.h:230
Definition bslma_bslallocator.h:588
#define BDLMA_LOCAL_BUFFERED_VALUE_IS_ASSIGNABLE(DST, SRC)
Definition bdlma_localbufferedobject.h:245
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#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_DELETED
Definition bsls_keyword.h:651
Definition bdlma_alignedallocator.h:278
Definition baljsn_encoder_testtypes.h:76
Definition bslmf_allocatorargt.h:433
Definition bslmf_enableif.h:530
static bsl::enable_if<!IsDerivedFromBslAllocator< t_ALLOC >::value, t_ALLOC >::type adapt(const t_ALLOC &from)
Definition bslma_allocatorutil.h:871
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1244
Definition bslma_usesbslmaallocator.h:344
Definition bsls_objectbuffer.h:277
TYPE * address()
Definition bsls_objectbuffer.h:335
TYPE & object()
Definition bsls_objectbuffer.h:352