BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bslma_sharedptrinplacerep_cpp03.h
Go to the documentation of this file.
1/// @file bslma_sharedptrinplacerep_cpp03.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bslma_sharedptrinplacerep_cpp03.h -*-C++-*-
8
9// Automatically generated file. **DO NOT EDIT**
10
11#ifndef INCLUDED_BSLMA_SHAREDPTRINPLACEREP_CPP03
12#define INCLUDED_BSLMA_SHAREDPTRINPLACEREP_CPP03
13
14/// @defgroup bslma_sharedptrinplacerep_cpp03 bslma_sharedptrinplacerep_cpp03
15/// @brief Provide C++03 implementation for bslma_sharedptrinplacerep.h
16/// @addtogroup bsl
17/// @{
18/// @addtogroup bslma
19/// @{
20/// @addtogroup bslma_sharedptrinplacerep_cpp03
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bslma_sharedptrinplacerep_cpp03-purpose"> Purpose</a>
25/// * <a href="#bslma_sharedptrinplacerep_cpp03-classes"> Classes </a>
26/// * <a href="#bslma_sharedptrinplacerep_cpp03-description"> Description </a>
27///
28/// # Purpose {#bslma_sharedptrinplacerep_cpp03-purpose}
29/// Provide C++03 implementation for bslma_sharedptrinplacerep.h
30///
31/// # Classes {#bslma_sharedptrinplacerep_cpp03-classes}
32/// See bslma_sharedptrinplacerep.h for list of classes
33///
34/// @see bslma_sharedptrinplacerep
35///
36/// # Description {#bslma_sharedptrinplacerep_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 05:38:38 2024
48/// Command line: sim_cpp11_features.pl bslma_sharedptrinplacerep.h
49/// @}
50/** @} */
51/** @} */
52
53/** @addtogroup bsl
54 * @{
55 */
56/** @addtogroup bslma
57 * @{
58 */
59/** @addtogroup bslma_sharedptrinplacerep_cpp03
60 * @{
61 */
62
63#ifdef COMPILING_BSLMA_SHAREDPTRINPLACEREP_H
64
65
66namespace bslma {
67
68 // =========================
69 // class SharedPtrInplaceRep
70 // =========================
71
72/// This class provides a concrete implementation of the `SharedPtrRep`
73/// protocol for "in-place" instances of the parameterized `TYPE`. Upon
74/// destruction of this object, the destructor of `TYPE` is invoked.
75///
76/// See @ref bslma_sharedptrinplacerep_cpp03
77template <class TYPE>
78class SharedPtrInplaceRep : public SharedPtrRep {
79
80 // DATA
81 Allocator *d_allocator_p; // memory allocator (held, not owned)
82
83 TYPE d_instance; // Beginning of the in-place buffer. Note that
84 // this must be last in this layout to allow for
85 // the possibility of creating in-place
86 // uninitialized buffer, where it is possible to
87 // access memory beyond the 'd_instance'
88 // footprint (refer to 'bsl::shared_ptr::
89 // createInplaceUninitializedBuffer' for sample
90 // usage)
91
92 private:
93 // NOT IMPLEMENTED
94 SharedPtrInplaceRep(const SharedPtrInplaceRep&);
95 SharedPtrInplaceRep& operator=(const SharedPtrInplaceRep&);
96
97 // PRIVATE CREATORS
98
99 /// Destroy this representation object and the embedded instance of parameterized `TYPE`.
100 ///
101 /// \note Note that this destructor is never called.
102 /// Instead, `disposeObject` destroys the in-place object and
103 /// `disposeRep` deallocates this representation object (including the
104 /// shared object's footprint).
105 ~SharedPtrInplaceRep() BSLS_KEYWORD_OVERRIDE;
106
107 public:
108 // CREATORS
109#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
110// {{{ BEGIN GENERATED CODE
111// Command line: sim_cpp11_features.pl bslma_sharedptrinplacerep.h
112#ifndef BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT
113#define BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT 14
114#endif
115#ifndef BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A
116#define BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT
117#endif
118
119#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 0
120 explicit SharedPtrInplaceRep(Allocator *basicAllocator);
121#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 0
122
123#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 1
124 template <class ARGS_01>
125 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
126 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01);
127#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 1
128
129#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 2
130 template <class ARGS_01,
131 class ARGS_02>
132 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
133 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
134 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02);
135#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 2
136
137#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 3
138 template <class ARGS_01,
139 class ARGS_02,
140 class ARGS_03>
141 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
142 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
143 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
144 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03);
145#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 3
146
147#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 4
148 template <class ARGS_01,
149 class ARGS_02,
150 class ARGS_03,
151 class ARGS_04>
152 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
153 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
154 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
155 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
156 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04);
157#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 4
158
159#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 5
160 template <class ARGS_01,
161 class ARGS_02,
162 class ARGS_03,
163 class ARGS_04,
164 class ARGS_05>
165 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
166 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
167 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
168 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
169 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
170 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05);
171#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 5
172
173#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 6
174 template <class ARGS_01,
175 class ARGS_02,
176 class ARGS_03,
177 class ARGS_04,
178 class ARGS_05,
179 class ARGS_06>
180 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
181 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
182 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
183 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
184 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
185 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
186 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06);
187#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 6
188
189#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 7
190 template <class ARGS_01,
191 class ARGS_02,
192 class ARGS_03,
193 class ARGS_04,
194 class ARGS_05,
195 class ARGS_06,
196 class ARGS_07>
197 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
198 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
199 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
200 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
201 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
202 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
203 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
204 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07);
205#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 7
206
207#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 8
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 class ARGS_08>
216 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
217 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
218 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
219 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
220 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
221 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
222 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
223 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
224 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08);
225#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 8
226
227#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 9
228 template <class ARGS_01,
229 class ARGS_02,
230 class ARGS_03,
231 class ARGS_04,
232 class ARGS_05,
233 class ARGS_06,
234 class ARGS_07,
235 class ARGS_08,
236 class ARGS_09>
237 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
238 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
239 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
240 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
241 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
242 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
243 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
244 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
245 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
246 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09);
247#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 9
248
249#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 10
250 template <class ARGS_01,
251 class ARGS_02,
252 class ARGS_03,
253 class ARGS_04,
254 class ARGS_05,
255 class ARGS_06,
256 class ARGS_07,
257 class ARGS_08,
258 class ARGS_09,
259 class ARGS_10>
260 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
261 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
262 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
263 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
264 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
265 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
266 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
267 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
268 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
269 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
270 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10);
271#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 10
272
273#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 11
274 template <class ARGS_01,
275 class ARGS_02,
276 class ARGS_03,
277 class ARGS_04,
278 class ARGS_05,
279 class ARGS_06,
280 class ARGS_07,
281 class ARGS_08,
282 class ARGS_09,
283 class ARGS_10,
284 class ARGS_11>
285 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
286 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
287 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
288 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
289 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
290 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
291 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
292 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
293 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
294 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
295 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
296 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11);
297#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 11
298
299#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 12
300 template <class ARGS_01,
301 class ARGS_02,
302 class ARGS_03,
303 class ARGS_04,
304 class ARGS_05,
305 class ARGS_06,
306 class ARGS_07,
307 class ARGS_08,
308 class ARGS_09,
309 class ARGS_10,
310 class ARGS_11,
311 class ARGS_12>
312 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
313 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
314 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
315 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
316 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
317 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
318 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
319 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
320 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
321 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
322 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
323 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11,
324 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) args_12);
325#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 12
326
327#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 13
328 template <class ARGS_01,
329 class ARGS_02,
330 class ARGS_03,
331 class ARGS_04,
332 class ARGS_05,
333 class ARGS_06,
334 class ARGS_07,
335 class ARGS_08,
336 class ARGS_09,
337 class ARGS_10,
338 class ARGS_11,
339 class ARGS_12,
340 class ARGS_13>
341 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
342 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
343 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
344 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
345 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
346 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
347 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
348 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
349 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
350 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
351 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
352 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11,
353 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) args_12,
354 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) args_13);
355#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 13
356
357#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 14
358 template <class ARGS_01,
359 class ARGS_02,
360 class ARGS_03,
361 class ARGS_04,
362 class ARGS_05,
363 class ARGS_06,
364 class ARGS_07,
365 class ARGS_08,
366 class ARGS_09,
367 class ARGS_10,
368 class ARGS_11,
369 class ARGS_12,
370 class ARGS_13,
371 class ARGS_14>
372 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
373 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
374 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
375 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
376 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
377 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
378 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
379 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
380 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
381 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
382 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
383 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11,
384 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) args_12,
385 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) args_13,
386 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) args_14);
387#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_A >= 14
388
389#else
390// The generated code below is a workaround for the absence of perfect
391// forwarding in some compilers.
392
393 template <class... ARGS>
394 explicit SharedPtrInplaceRep(Allocator *basicAllocator,
396// }}} END GENERATED CODE
397#endif
398
399 // MANIPULATORS
400
401 /// Destroy the object being referred to by this representation. This
402 /// method is automatically invoked by `releaseRef` when the number of
403 /// shared references reaches zero and should not be explicitly invoked otherwise.
404 ///
405 /// \note Note that this function calls the destructor for the
406 /// shared object, but does not deallocate its footprint.
408
409 /// Deallocate the memory associated with this representation object
410 /// (including the shared object's footprint). This method is
411 /// automatically invoked by `releaseRef` and `releaseWeakRef` when the
412 /// number of weak references and the number of shared references both
413 /// reach zero and should not be explicitly invoked otherwise.
414 ///
415 /// \pre The behavior is undefined unless `disposeObject` has already been called for this representation.
416 ///
417 /// \note Note that this `disposeRep` method
418 /// effectively serves as the representation object's destructor.
420
421 /// Return a null pointer.
422 /// \note Note that the specified `type` is not used
423 /// as an in-place representation for a shared pointer can never store a
424 /// user-supplied deleter (there is no function that might try to create
425 /// one).
426 void *getDeleter(const std::type_info& type) BSLS_KEYWORD_OVERRIDE;
427
428 /// Return the address of the modifiable (in-place) object referred to
429 /// by this representation object.
430 TYPE *ptr();
431
432 // ACCESSORS
433
434 /// Return the (untyped) address of the modifiable (in-place) object
435 /// referred to by this representation object.
437};
438
439 //============================
440 // SharedPtrInplaceRep_ImpUtil
441 //============================
442
443/// This struct provides a namespace for several static methods that ease
444/// the implementation of many methods of the `SharedPtrInplaceRep` class.
445///
446/// See @ref bslma_sharedptrinplacerep_cpp03
447struct SharedPtrInplaceRep_ImpUtil {
448
449 // CLASS METHODS
450
451 /// Return the specified `reference`.
452 /// \note Note that this pair of overloaded
453 /// functions is necessary to correctly forward movable references when
454 /// providing explicit move-semantics for C++03; otherwise the
455 /// `MovableRef` is likely to be wrapped in multiple layers of reference
456 /// wrappers, and not be recognized as the movable vocabulary type.
457 template <class TYPE>
458 static const TYPE& forward(const TYPE& reference);
459 template <class TYPE>
460 static BloombergLP::bslmf::MovableRef<TYPE> forward(
461 const BloombergLP::bslmf::MovableRef<TYPE>& reference);
462
463 /// Destroy the specified `object`.
464 template <class TYPE>
465 static void dispose(const TYPE& object);
466
467 /// Destroy each element of the specified `object`.
468 template <class TYPE, size_t SIZE>
469 static void dispose(const TYPE (&object)[SIZE]);
470};
471
472// ============================================================================
473// INLINE DEFINITIONS
474// ============================================================================
475
476
477 // ---------------------------
478 // SharedPtrInplaceRep_ImpUtil
479 // ---------------------------
480
481template <class TYPE>
482inline
483const TYPE& SharedPtrInplaceRep_ImpUtil::forward(const TYPE& reference)
484{
485 return reference;
486}
487
488template <class TYPE>
489inline
490BloombergLP::bslmf::MovableRef<TYPE> SharedPtrInplaceRep_ImpUtil::forward(
491 const BloombergLP::bslmf::MovableRef<TYPE>& reference)
492{
493 return reference;
494}
495
496template <class TYPE>
497inline
498void SharedPtrInplaceRep_ImpUtil::dispose(const TYPE& object)
499{
500 object.~TYPE();
501}
502
503template <class TYPE, size_t SIZE>
504inline
505void SharedPtrInplaceRep_ImpUtil::dispose(const TYPE (&object)[SIZE])
506{
507 for (size_t i = 0; i < SIZE; ++i) {
508 dispose(object[i]);
509 }
510}
511
512 // -------------------------
513 // class SharedPtrInplaceRep
514 // -------------------------
515
516// CREATORS
517#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
518// {{{ BEGIN GENERATED CODE
519// Command line: sim_cpp11_features.pl bslma_sharedptrinplacerep.h
520#ifndef BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT
521#define BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT 14
522#endif
523#ifndef BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B
524#define BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT
525#endif
526#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 0
527template <class TYPE>
528SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator)
529: d_allocator_p(basicAllocator)
530, d_instance()
531{
532}
533#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 0
534
535#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 1
536template <class TYPE>
537template <class ARGS_01>
538SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
539 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01)
540: d_allocator_p(basicAllocator)
541, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01))
542{
543}
544#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 1
545
546#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 2
547template <class TYPE>
548template <class ARGS_01,
549 class ARGS_02>
550SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
551 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
552 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02)
553: d_allocator_p(basicAllocator)
554, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
555 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02))
556{
557}
558#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 2
559
560#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 3
561template <class TYPE>
562template <class ARGS_01,
563 class ARGS_02,
564 class ARGS_03>
565SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
566 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
567 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
568 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03)
569: d_allocator_p(basicAllocator)
570, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
571 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
572 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03))
573{
574}
575#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 3
576
577#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 4
578template <class TYPE>
579template <class ARGS_01,
580 class ARGS_02,
581 class ARGS_03,
582 class ARGS_04>
583SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
584 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
585 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
586 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
587 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04)
588: d_allocator_p(basicAllocator)
589, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
590 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
591 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
592 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04))
593{
594}
595#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 4
596
597#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 5
598template <class TYPE>
599template <class ARGS_01,
600 class ARGS_02,
601 class ARGS_03,
602 class ARGS_04,
603 class ARGS_05>
604SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
605 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
606 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
607 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
608 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
609 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05)
610: d_allocator_p(basicAllocator)
611, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
612 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
613 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
614 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
615 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05))
616{
617}
618#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 5
619
620#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 6
621template <class TYPE>
622template <class ARGS_01,
623 class ARGS_02,
624 class ARGS_03,
625 class ARGS_04,
626 class ARGS_05,
627 class ARGS_06>
628SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
629 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
630 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
631 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
632 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
633 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
634 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06)
635: d_allocator_p(basicAllocator)
636, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
637 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
638 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
639 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
640 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
641 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06))
642{
643}
644#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 6
645
646#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 7
647template <class TYPE>
648template <class ARGS_01,
649 class ARGS_02,
650 class ARGS_03,
651 class ARGS_04,
652 class ARGS_05,
653 class ARGS_06,
654 class ARGS_07>
655SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
656 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
657 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
658 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
659 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
660 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
661 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
662 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07)
663: d_allocator_p(basicAllocator)
664, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
665 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
666 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
667 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
668 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
669 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
670 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07))
671{
672}
673#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 7
674
675#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 8
676template <class TYPE>
677template <class ARGS_01,
678 class ARGS_02,
679 class ARGS_03,
680 class ARGS_04,
681 class ARGS_05,
682 class ARGS_06,
683 class ARGS_07,
684 class ARGS_08>
685SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
686 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
687 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
688 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
689 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
690 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
691 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
692 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
693 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08)
694: d_allocator_p(basicAllocator)
695, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
696 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
697 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
698 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
699 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
700 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
701 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07),
702 BSLS_COMPILERFEATURES_FORWARD(ARGS_08,args_08))
703{
704}
705#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 8
706
707#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 9
708template <class TYPE>
709template <class ARGS_01,
710 class ARGS_02,
711 class ARGS_03,
712 class ARGS_04,
713 class ARGS_05,
714 class ARGS_06,
715 class ARGS_07,
716 class ARGS_08,
717 class ARGS_09>
718SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
719 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
720 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
721 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
722 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
723 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
724 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
725 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
726 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
727 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09)
728: d_allocator_p(basicAllocator)
729, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
730 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
731 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
732 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
733 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
734 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
735 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07),
736 BSLS_COMPILERFEATURES_FORWARD(ARGS_08,args_08),
737 BSLS_COMPILERFEATURES_FORWARD(ARGS_09,args_09))
738{
739}
740#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 9
741
742#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 10
743template <class TYPE>
744template <class ARGS_01,
745 class ARGS_02,
746 class ARGS_03,
747 class ARGS_04,
748 class ARGS_05,
749 class ARGS_06,
750 class ARGS_07,
751 class ARGS_08,
752 class ARGS_09,
753 class ARGS_10>
754SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
755 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
756 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
757 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
758 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
759 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
760 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
761 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
762 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
763 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
764 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10)
765: d_allocator_p(basicAllocator)
766, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
767 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
768 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
769 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
770 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
771 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
772 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07),
773 BSLS_COMPILERFEATURES_FORWARD(ARGS_08,args_08),
774 BSLS_COMPILERFEATURES_FORWARD(ARGS_09,args_09),
775 BSLS_COMPILERFEATURES_FORWARD(ARGS_10,args_10))
776{
777}
778#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 10
779
780#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 11
781template <class TYPE>
782template <class ARGS_01,
783 class ARGS_02,
784 class ARGS_03,
785 class ARGS_04,
786 class ARGS_05,
787 class ARGS_06,
788 class ARGS_07,
789 class ARGS_08,
790 class ARGS_09,
791 class ARGS_10,
792 class ARGS_11>
793SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
794 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
795 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
796 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
797 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
798 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
799 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
800 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
801 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
802 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
803 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
804 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11)
805: d_allocator_p(basicAllocator)
806, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
807 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
808 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
809 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
810 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
811 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
812 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07),
813 BSLS_COMPILERFEATURES_FORWARD(ARGS_08,args_08),
814 BSLS_COMPILERFEATURES_FORWARD(ARGS_09,args_09),
815 BSLS_COMPILERFEATURES_FORWARD(ARGS_10,args_10),
816 BSLS_COMPILERFEATURES_FORWARD(ARGS_11,args_11))
817{
818}
819#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 11
820
821#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 12
822template <class TYPE>
823template <class ARGS_01,
824 class ARGS_02,
825 class ARGS_03,
826 class ARGS_04,
827 class ARGS_05,
828 class ARGS_06,
829 class ARGS_07,
830 class ARGS_08,
831 class ARGS_09,
832 class ARGS_10,
833 class ARGS_11,
834 class ARGS_12>
835SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
836 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
837 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
838 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
839 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
840 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
841 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
842 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
843 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
844 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
845 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
846 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11,
847 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) args_12)
848: d_allocator_p(basicAllocator)
849, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
850 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
851 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
852 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
853 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
854 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
855 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07),
856 BSLS_COMPILERFEATURES_FORWARD(ARGS_08,args_08),
857 BSLS_COMPILERFEATURES_FORWARD(ARGS_09,args_09),
858 BSLS_COMPILERFEATURES_FORWARD(ARGS_10,args_10),
859 BSLS_COMPILERFEATURES_FORWARD(ARGS_11,args_11),
860 BSLS_COMPILERFEATURES_FORWARD(ARGS_12,args_12))
861{
862}
863#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 12
864
865#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 13
866template <class TYPE>
867template <class ARGS_01,
868 class ARGS_02,
869 class ARGS_03,
870 class ARGS_04,
871 class ARGS_05,
872 class ARGS_06,
873 class ARGS_07,
874 class ARGS_08,
875 class ARGS_09,
876 class ARGS_10,
877 class ARGS_11,
878 class ARGS_12,
879 class ARGS_13>
880SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
881 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
882 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
883 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
884 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
885 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
886 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
887 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
888 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
889 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
890 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
891 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11,
892 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) args_12,
893 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) args_13)
894: d_allocator_p(basicAllocator)
895, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
896 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
897 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
898 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
899 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
900 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
901 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07),
902 BSLS_COMPILERFEATURES_FORWARD(ARGS_08,args_08),
903 BSLS_COMPILERFEATURES_FORWARD(ARGS_09,args_09),
904 BSLS_COMPILERFEATURES_FORWARD(ARGS_10,args_10),
905 BSLS_COMPILERFEATURES_FORWARD(ARGS_11,args_11),
906 BSLS_COMPILERFEATURES_FORWARD(ARGS_12,args_12),
907 BSLS_COMPILERFEATURES_FORWARD(ARGS_13,args_13))
908{
909}
910#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 13
911
912#if BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 14
913template <class TYPE>
914template <class ARGS_01,
915 class ARGS_02,
916 class ARGS_03,
917 class ARGS_04,
918 class ARGS_05,
919 class ARGS_06,
920 class ARGS_07,
921 class ARGS_08,
922 class ARGS_09,
923 class ARGS_10,
924 class ARGS_11,
925 class ARGS_12,
926 class ARGS_13,
927 class ARGS_14>
928SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
929 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_01) args_01,
930 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_02) args_02,
931 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_03) args_03,
932 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_04) args_04,
933 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_05) args_05,
934 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_06) args_06,
935 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_07) args_07,
936 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_08) args_08,
937 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_09) args_09,
938 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_10) args_10,
939 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_11) args_11,
940 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_12) args_12,
941 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_13) args_13,
942 BSLS_COMPILERFEATURES_FORWARD_REF(ARGS_14) args_14)
943: d_allocator_p(basicAllocator)
944, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS_01,args_01),
945 BSLS_COMPILERFEATURES_FORWARD(ARGS_02,args_02),
946 BSLS_COMPILERFEATURES_FORWARD(ARGS_03,args_03),
947 BSLS_COMPILERFEATURES_FORWARD(ARGS_04,args_04),
948 BSLS_COMPILERFEATURES_FORWARD(ARGS_05,args_05),
949 BSLS_COMPILERFEATURES_FORWARD(ARGS_06,args_06),
950 BSLS_COMPILERFEATURES_FORWARD(ARGS_07,args_07),
951 BSLS_COMPILERFEATURES_FORWARD(ARGS_08,args_08),
952 BSLS_COMPILERFEATURES_FORWARD(ARGS_09,args_09),
953 BSLS_COMPILERFEATURES_FORWARD(ARGS_10,args_10),
954 BSLS_COMPILERFEATURES_FORWARD(ARGS_11,args_11),
955 BSLS_COMPILERFEATURES_FORWARD(ARGS_12,args_12),
956 BSLS_COMPILERFEATURES_FORWARD(ARGS_13,args_13),
957 BSLS_COMPILERFEATURES_FORWARD(ARGS_14,args_14))
958{
959}
960#endif // BSLMA_SHAREDPTRINPLACEREP_VARIADIC_LIMIT_B >= 14
961
962#else
963// The generated code below is a workaround for the absence of perfect
964// forwarding in some compilers.
965template <class TYPE>
966template <class... ARGS>
967SharedPtrInplaceRep<TYPE>::SharedPtrInplaceRep(Allocator *basicAllocator,
969: d_allocator_p(basicAllocator)
970, d_instance(BSLS_COMPILERFEATURES_FORWARD(ARGS,args)...)
971{
972}
973// }}} END GENERATED CODE
974#endif
975
976template <class TYPE>
977SharedPtrInplaceRep<TYPE>::~SharedPtrInplaceRep()
978{
979 BSLS_ASSERT(0);
980}
981
982// MANIPULATORS
983template <class TYPE>
984inline
985void SharedPtrInplaceRep<TYPE>::disposeObject()
986{
987 SharedPtrInplaceRep_ImpUtil::dispose(d_instance);
988}
989
990template <class TYPE>
991inline
992void SharedPtrInplaceRep<TYPE>::disposeRep()
993{
994 d_allocator_p->deallocate(this);
995}
996
997template <class TYPE>
998inline
999void *SharedPtrInplaceRep<TYPE>::getDeleter(const std::type_info&)
1000{
1001 return 0;
1002}
1003
1004template <class TYPE>
1005inline
1006TYPE *SharedPtrInplaceRep<TYPE>::ptr()
1007{
1008 return bsls::Util::addressOf(d_instance);
1009}
1010
1011// ACCESSORS
1012template <class TYPE>
1013inline
1014void *SharedPtrInplaceRep<TYPE>::originalPtr() const
1015{
1016 return PointerUtil::voidify(bsls::Util::addressOf(d_instance));
1017}
1018
1019// ============================================================================
1020// TYPE TRAITS
1021// ============================================================================
1022
1023/// The class template `SharedPtrInplaceRep` appears to use allocators, but
1024/// passes its allocator argument in the first position, rather than in the
1025/// last position, so is not compatible with BDE APIs that use this trait.
1026template <class ELEMENT_TYPE>
1027struct UsesBslmaAllocator<SharedPtrInplaceRep<ELEMENT_TYPE> >
1028 : bsl::false_type {
1029};
1030
1031} // close package namespace
1032
1033
1034#else // if ! defined(DEFINED_BSLMA_SHAREDPTRINPLACEREP_H)
1035# error Not valid except when included from bslma_sharedptrinplacerep.h
1036#endif // ! defined(COMPILING_BSLMA_SHAREDPTRINPLACEREP_H)
1037
1038#endif // ! defined(INCLUDED_BSLMA_SHAREDPTRINPLACEREP_CPP03)
1039
1040// ----------------------------------------------------------------------------
1041// Copyright 2013 Bloomberg Finance L.P.
1042//
1043// Licensed under the Apache License, Version 2.0 (the "License");
1044// you may not use this file except in compliance with the License.
1045// You may obtain a copy of the License at
1046//
1047// http://www.apache.org/licenses/LICENSE-2.0
1048//
1049// Unless required by applicable law or agreed to in writing, software
1050// distributed under the License is distributed on an "AS IS" BASIS,
1051// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1052// See the License for the specific language governing permissions and
1053// limitations under the License.
1054// ----------------------------- END-OF-FILE ----------------------------------
1055
1056/** @} */
1057/** @} */
1058/** @} */
void * getDeleter(const std::type_info &type) BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptrinplacerep.h:434
void * originalPtr() const BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptrinplacerep.h:449
void disposeObject() BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptrinplacerep.h:420
void disposeRep() BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptrinplacerep.h:427
TYPE * ptr()
Definition bslma_sharedptrinplacerep.h:441
#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_OVERRIDE
Definition bsls_keyword.h:695
Definition baljsn_encoder_testtypes.h:76
Definition bdldfp_decimal.h:5549
Definition bslmf_integralconstant.h:261
static const TYPE & forward(const TYPE &reference)
Definition bslma_sharedptrinplacerep.h:366
static void dispose(const TYPE &object)
Destroy the specified object.
Definition bslma_sharedptrinplacerep.h:381
static TYPE * addressOf(TYPE &obj)
Definition bsls_util.h:312