make_shared_object.hpp
Go to the documentation of this file.
1 #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
2 #define BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
3 
4 // make_shared_object.hpp
5 //
6 // Copyright (c) 2007, 2008, 2012 Peter Dimov
7 //
8 // Distributed under the Boost Software License, Version 1.0.
9 // See accompanying file LICENSE_1_0.txt or copy at
10 // http://www.boost.org/LICENSE_1_0.txt
11 //
12 // See http://www.boost.org/libs/smart_ptr/make_shared.html
13 // for documentation.
14 
15 #include <boost/config.hpp>
20 #include <cstddef>
21 #include <new>
22 
23 namespace boost
24 {
25 
26 namespace detail
27 {
28 
29 template< std::size_t N, std::size_t A > struct sp_aligned_storage
30 {
31  union type
32  {
33  char data_[ N ];
35  };
36 };
37 
38 template< class T > class sp_ms_deleter
39 {
40 private:
41 
43 
46 
47 private:
48 
49  void destroy()
50  {
51  if( initialized_ )
52  {
53 #if defined( __GNUC__ )
54 
55  // fixes incorrect aliasing warning
56  T * p = reinterpret_cast< T* >( storage_.data_ );
57  p->~T();
58 
59 #else
60 
61  reinterpret_cast< T* >( storage_.data_ )->~T();
62 
63 #endif
64 
65  initialized_ = false;
66  }
67  }
68 
69 public:
70 
72  {
73  }
74 
75  template<class A> explicit sp_ms_deleter( A const & ) BOOST_NOEXCEPT : initialized_( false )
76  {
77  }
78 
79  // optimization: do not copy storage_
81  {
82  }
83 
85  {
86  destroy();
87  }
88 
89  void operator()( T * )
90  {
91  destroy();
92  }
93 
94  static void operator_fn( T* ) // operator() can't be static
95  {
96  }
97 
99  {
100  return storage_.data_;
101  }
102 
104  {
105  initialized_ = true;
106  }
107 };
108 
109 template< class T, class A > class sp_as_deleter
110 {
111 private:
112 
114 
116  A a_;
118 
119 private:
120 
121  void destroy()
122  {
123  if( initialized_ )
124  {
125  T * p = reinterpret_cast< T* >( storage_.data_ );
126 
127 #if !defined( BOOST_NO_CXX11_ALLOCATOR )
128 
130 
131 #else
132 
133  p->~T();
134 
135 #endif
136 
137  initialized_ = false;
138  }
139  }
140 
141 public:
142 
143  sp_as_deleter( A const & a ) BOOST_NOEXCEPT : a_( a ), initialized_( false )
144  {
145  }
146 
147  // optimization: do not copy storage_
148  sp_as_deleter( sp_as_deleter const & r ) BOOST_NOEXCEPT : a_( r.a_), initialized_( false )
149  {
150  }
151 
153  {
154  destroy();
155  }
156 
157  void operator()( T * )
158  {
159  destroy();
160  }
161 
162  static void operator_fn( T* ) // operator() can't be static
163  {
164  }
165 
167  {
168  return storage_.data_;
169  }
170 
172  {
173  initialized_ = true;
174  }
175 };
176 
177 template< class T > struct sp_if_not_array
178 {
180 };
181 
182 #if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
183 
184 template< class T > struct sp_if_not_array< T[] >
185 {
186 };
187 
188 #if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
189 
190 template< class T, std::size_t N > struct sp_if_not_array< T[N] >
191 {
192 };
193 
194 #endif
195 
196 #endif
197 
198 } // namespace detail
199 
200 #if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
201 # define BOOST_SP_MSD( T ) boost::detail::sp_inplace_tag< boost::detail::sp_ms_deleter< T > >()
202 #else
203 # define BOOST_SP_MSD( T ) boost::detail::sp_ms_deleter< T >()
204 #endif
205 
206 // _noinit versions
207 
209 {
210  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
211 
212  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
213 
214  void * pv = pd->address();
215 
216  ::new( pv ) T;
217  pd->set_initialized();
218 
219  T * pt2 = static_cast< T* >( pv );
220 
222  return boost::shared_ptr< T >( pt, pt2 );
223 }
224 
225 template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared_noinit( A const & a )
226 {
227  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
228 
229  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
230 
231  void * pv = pd->address();
232 
233  ::new( pv ) T;
234  pd->set_initialized();
235 
236  T * pt2 = static_cast< T* >( pv );
237 
239  return boost::shared_ptr< T >( pt, pt2 );
240 }
241 
242 #if !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
243 
244 // Variadic templates, rvalue reference
245 
246 template< class T, class... Args > typename boost::detail::sp_if_not_array< T >::type make_shared( Args && ... args )
247 {
248  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
249 
250  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
251 
252  void * pv = pd->address();
253 
254  ::new( pv ) T( boost::detail::sp_forward<Args>( args )... );
255  pd->set_initialized();
256 
257  T * pt2 = static_cast< T* >( pv );
258 
260  return boost::shared_ptr< T >( pt, pt2 );
261 }
262 
263 template< class T, class A, class... Args > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, Args && ... args )
264 {
265 #if !defined( BOOST_NO_CXX11_ALLOCATOR )
266 
267  typedef typename std::allocator_traits<A>::template rebind_alloc<T> A2;
268  A2 a2( a );
269 
271 
272  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), boost::detail::sp_inplace_tag<D>(), a2 );
273 
274 #else
275 
277 
278  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), boost::detail::sp_inplace_tag<D>(), a );
279 
280 #endif
281 
282  D * pd = static_cast< D* >( pt._internal_get_untyped_deleter() );
283  void * pv = pd->address();
284 
285 #if !defined( BOOST_NO_CXX11_ALLOCATOR )
286 
287  std::allocator_traits<A2>::construct( a2, static_cast< T* >( pv ), boost::detail::sp_forward<Args>( args )... );
288 
289 #else
290 
291  ::new( pv ) T( boost::detail::sp_forward<Args>( args )... );
292 
293 #endif
294 
295  pd->set_initialized();
296 
297  T * pt2 = static_cast< T* >( pv );
298 
300  return boost::shared_ptr< T >( pt, pt2 );
301 }
302 
303 #else // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
304 
305 // Common zero-argument versions
306 
307 template< class T > typename boost::detail::sp_if_not_array< T >::type make_shared()
308 {
309  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
310 
311  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
312 
313  void * pv = pd->address();
314 
315  ::new( pv ) T();
316  pd->set_initialized();
317 
318  T * pt2 = static_cast< T* >( pv );
319 
321  return boost::shared_ptr< T >( pt, pt2 );
322 }
323 
324 template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a )
325 {
326  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
327 
328  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
329 
330  void * pv = pd->address();
331 
332  ::new( pv ) T();
333  pd->set_initialized();
334 
335  T * pt2 = static_cast< T* >( pv );
336 
338  return boost::shared_ptr< T >( pt, pt2 );
339 }
340 
341 #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
342 
343 // For example MSVC 10.0
344 
345 template< class T, class A1 >
347 {
348  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
349 
350  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
351 
352  void * pv = pd->address();
353 
354  ::new( pv ) T(
355  boost::detail::sp_forward<A1>( a1 )
356  );
357 
358  pd->set_initialized();
359 
360  T * pt2 = static_cast< T* >( pv );
361 
363  return boost::shared_ptr< T >( pt, pt2 );
364 }
365 
366 template< class T, class A, class A1 >
367 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1 )
368 {
369  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
370 
371  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
372 
373  void * pv = pd->address();
374 
375  ::new( pv ) T(
376  boost::detail::sp_forward<A1>( a1 )
377  );
378 
379  pd->set_initialized();
380 
381  T * pt2 = static_cast< T* >( pv );
382 
384  return boost::shared_ptr< T >( pt, pt2 );
385 }
386 
387 template< class T, class A1, class A2 >
389 {
390  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
391 
392  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
393 
394  void * pv = pd->address();
395 
396  ::new( pv ) T(
397  boost::detail::sp_forward<A1>( a1 ),
398  boost::detail::sp_forward<A2>( a2 )
399  );
400 
401  pd->set_initialized();
402 
403  T * pt2 = static_cast< T* >( pv );
404 
406  return boost::shared_ptr< T >( pt, pt2 );
407 }
408 
409 template< class T, class A, class A1, class A2 >
410 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2 )
411 {
412  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
413 
414  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
415 
416  void * pv = pd->address();
417 
418  ::new( pv ) T(
419  boost::detail::sp_forward<A1>( a1 ),
420  boost::detail::sp_forward<A2>( a2 )
421  );
422 
423  pd->set_initialized();
424 
425  T * pt2 = static_cast< T* >( pv );
426 
428  return boost::shared_ptr< T >( pt, pt2 );
429 }
430 
431 template< class T, class A1, class A2, class A3 >
432 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3 )
433 {
434  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
435 
436  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
437 
438  void * pv = pd->address();
439 
440  ::new( pv ) T(
441  boost::detail::sp_forward<A1>( a1 ),
442  boost::detail::sp_forward<A2>( a2 ),
443  boost::detail::sp_forward<A3>( a3 )
444  );
445 
446  pd->set_initialized();
447 
448  T * pt2 = static_cast< T* >( pv );
449 
451  return boost::shared_ptr< T >( pt, pt2 );
452 }
453 
454 template< class T, class A, class A1, class A2, class A3 >
455 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3 )
456 {
457  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
458 
459  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
460 
461  void * pv = pd->address();
462 
463  ::new( pv ) T(
464  boost::detail::sp_forward<A1>( a1 ),
465  boost::detail::sp_forward<A2>( a2 ),
466  boost::detail::sp_forward<A3>( a3 )
467  );
468 
469  pd->set_initialized();
470 
471  T * pt2 = static_cast< T* >( pv );
472 
474  return boost::shared_ptr< T >( pt, pt2 );
475 }
476 
477 template< class T, class A1, class A2, class A3, class A4 >
478 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
479 {
480  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
481 
482  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
483 
484  void * pv = pd->address();
485 
486  ::new( pv ) T(
487  boost::detail::sp_forward<A1>( a1 ),
488  boost::detail::sp_forward<A2>( a2 ),
489  boost::detail::sp_forward<A3>( a3 ),
490  boost::detail::sp_forward<A4>( a4 )
491  );
492 
493  pd->set_initialized();
494 
495  T * pt2 = static_cast< T* >( pv );
496 
498  return boost::shared_ptr< T >( pt, pt2 );
499 }
500 
501 template< class T, class A, class A1, class A2, class A3, class A4 >
502 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
503 {
504  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
505 
506  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
507 
508  void * pv = pd->address();
509 
510  ::new( pv ) T(
511  boost::detail::sp_forward<A1>( a1 ),
512  boost::detail::sp_forward<A2>( a2 ),
513  boost::detail::sp_forward<A3>( a3 ),
514  boost::detail::sp_forward<A4>( a4 )
515  );
516 
517  pd->set_initialized();
518 
519  T * pt2 = static_cast< T* >( pv );
520 
522  return boost::shared_ptr< T >( pt, pt2 );
523 }
524 
525 template< class T, class A1, class A2, class A3, class A4, class A5 >
526 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
527 {
528  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
529 
530  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
531 
532  void * pv = pd->address();
533 
534  ::new( pv ) T(
535  boost::detail::sp_forward<A1>( a1 ),
536  boost::detail::sp_forward<A2>( a2 ),
537  boost::detail::sp_forward<A3>( a3 ),
538  boost::detail::sp_forward<A4>( a4 ),
539  boost::detail::sp_forward<A5>( a5 )
540  );
541 
542  pd->set_initialized();
543 
544  T * pt2 = static_cast< T* >( pv );
545 
547  return boost::shared_ptr< T >( pt, pt2 );
548 }
549 
550 template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
551 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
552 {
553  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
554 
555  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
556 
557  void * pv = pd->address();
558 
559  ::new( pv ) T(
560  boost::detail::sp_forward<A1>( a1 ),
561  boost::detail::sp_forward<A2>( a2 ),
562  boost::detail::sp_forward<A3>( a3 ),
563  boost::detail::sp_forward<A4>( a4 ),
564  boost::detail::sp_forward<A5>( a5 )
565  );
566 
567  pd->set_initialized();
568 
569  T * pt2 = static_cast< T* >( pv );
570 
572  return boost::shared_ptr< T >( pt, pt2 );
573 }
574 
575 template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
576 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
577 {
578  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
579 
580  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
581 
582  void * pv = pd->address();
583 
584  ::new( pv ) T(
585  boost::detail::sp_forward<A1>( a1 ),
586  boost::detail::sp_forward<A2>( a2 ),
587  boost::detail::sp_forward<A3>( a3 ),
588  boost::detail::sp_forward<A4>( a4 ),
589  boost::detail::sp_forward<A5>( a5 ),
590  boost::detail::sp_forward<A6>( a6 )
591  );
592 
593  pd->set_initialized();
594 
595  T * pt2 = static_cast< T* >( pv );
596 
598  return boost::shared_ptr< T >( pt, pt2 );
599 }
600 
601 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
602 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
603 {
604  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
605 
606  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
607 
608  void * pv = pd->address();
609 
610  ::new( pv ) T(
611  boost::detail::sp_forward<A1>( a1 ),
612  boost::detail::sp_forward<A2>( a2 ),
613  boost::detail::sp_forward<A3>( a3 ),
614  boost::detail::sp_forward<A4>( a4 ),
615  boost::detail::sp_forward<A5>( a5 ),
616  boost::detail::sp_forward<A6>( a6 )
617  );
618 
619  pd->set_initialized();
620 
621  T * pt2 = static_cast< T* >( pv );
622 
624  return boost::shared_ptr< T >( pt, pt2 );
625 }
626 
627 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
628 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
629 {
630  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
631 
632  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
633 
634  void * pv = pd->address();
635 
636  ::new( pv ) T(
637  boost::detail::sp_forward<A1>( a1 ),
638  boost::detail::sp_forward<A2>( a2 ),
639  boost::detail::sp_forward<A3>( a3 ),
640  boost::detail::sp_forward<A4>( a4 ),
641  boost::detail::sp_forward<A5>( a5 ),
642  boost::detail::sp_forward<A6>( a6 ),
643  boost::detail::sp_forward<A7>( a7 )
644  );
645 
646  pd->set_initialized();
647 
648  T * pt2 = static_cast< T* >( pv );
649 
651  return boost::shared_ptr< T >( pt, pt2 );
652 }
653 
654 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
655 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
656 {
657  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
658 
659  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
660 
661  void * pv = pd->address();
662 
663  ::new( pv ) T(
664  boost::detail::sp_forward<A1>( a1 ),
665  boost::detail::sp_forward<A2>( a2 ),
666  boost::detail::sp_forward<A3>( a3 ),
667  boost::detail::sp_forward<A4>( a4 ),
668  boost::detail::sp_forward<A5>( a5 ),
669  boost::detail::sp_forward<A6>( a6 ),
670  boost::detail::sp_forward<A7>( a7 )
671  );
672 
673  pd->set_initialized();
674 
675  T * pt2 = static_cast< T* >( pv );
676 
678  return boost::shared_ptr< T >( pt, pt2 );
679 }
680 
681 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
682 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
683 {
684  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
685 
686  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
687 
688  void * pv = pd->address();
689 
690  ::new( pv ) T(
691  boost::detail::sp_forward<A1>( a1 ),
692  boost::detail::sp_forward<A2>( a2 ),
693  boost::detail::sp_forward<A3>( a3 ),
694  boost::detail::sp_forward<A4>( a4 ),
695  boost::detail::sp_forward<A5>( a5 ),
696  boost::detail::sp_forward<A6>( a6 ),
697  boost::detail::sp_forward<A7>( a7 ),
698  boost::detail::sp_forward<A8>( a8 )
699  );
700 
701  pd->set_initialized();
702 
703  T * pt2 = static_cast< T* >( pv );
704 
706  return boost::shared_ptr< T >( pt, pt2 );
707 }
708 
709 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
710 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
711 {
712  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
713 
714  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
715 
716  void * pv = pd->address();
717 
718  ::new( pv ) T(
719  boost::detail::sp_forward<A1>( a1 ),
720  boost::detail::sp_forward<A2>( a2 ),
721  boost::detail::sp_forward<A3>( a3 ),
722  boost::detail::sp_forward<A4>( a4 ),
723  boost::detail::sp_forward<A5>( a5 ),
724  boost::detail::sp_forward<A6>( a6 ),
725  boost::detail::sp_forward<A7>( a7 ),
726  boost::detail::sp_forward<A8>( a8 )
727  );
728 
729  pd->set_initialized();
730 
731  T * pt2 = static_cast< T* >( pv );
732 
734  return boost::shared_ptr< T >( pt, pt2 );
735 }
736 
737 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
738 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
739 {
740  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
741 
742  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
743 
744  void * pv = pd->address();
745 
746  ::new( pv ) T(
747  boost::detail::sp_forward<A1>( a1 ),
748  boost::detail::sp_forward<A2>( a2 ),
749  boost::detail::sp_forward<A3>( a3 ),
750  boost::detail::sp_forward<A4>( a4 ),
751  boost::detail::sp_forward<A5>( a5 ),
752  boost::detail::sp_forward<A6>( a6 ),
753  boost::detail::sp_forward<A7>( a7 ),
754  boost::detail::sp_forward<A8>( a8 ),
755  boost::detail::sp_forward<A9>( a9 )
756  );
757 
758  pd->set_initialized();
759 
760  T * pt2 = static_cast< T* >( pv );
761 
763  return boost::shared_ptr< T >( pt, pt2 );
764 }
765 
766 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
767 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
768 {
769  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
770 
771  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
772 
773  void * pv = pd->address();
774 
775  ::new( pv ) T(
776  boost::detail::sp_forward<A1>( a1 ),
777  boost::detail::sp_forward<A2>( a2 ),
778  boost::detail::sp_forward<A3>( a3 ),
779  boost::detail::sp_forward<A4>( a4 ),
780  boost::detail::sp_forward<A5>( a5 ),
781  boost::detail::sp_forward<A6>( a6 ),
782  boost::detail::sp_forward<A7>( a7 ),
783  boost::detail::sp_forward<A8>( a8 ),
784  boost::detail::sp_forward<A9>( a9 )
785  );
786 
787  pd->set_initialized();
788 
789  T * pt2 = static_cast< T* >( pv );
790 
792  return boost::shared_ptr< T >( pt, pt2 );
793 }
794 
795 #else // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
796 
797 // C++03 version
798 
799 template< class T, class A1 >
801 {
802  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
803 
804  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
805 
806  void * pv = pd->address();
807 
808  ::new( pv ) T( a1 );
809  pd->set_initialized();
810 
811  T * pt2 = static_cast< T* >( pv );
812 
814  return boost::shared_ptr< T >( pt, pt2 );
815 }
816 
817 template< class T, class A, class A1 >
818 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1 )
819 {
820  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
821 
822  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
823 
824  void * pv = pd->address();
825 
826  ::new( pv ) T( a1 );
827  pd->set_initialized();
828 
829  T * pt2 = static_cast< T* >( pv );
830 
832  return boost::shared_ptr< T >( pt, pt2 );
833 }
834 
835 template< class T, class A1, class A2 >
836 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2 )
837 {
838  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
839 
840  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
841 
842  void * pv = pd->address();
843 
844  ::new( pv ) T( a1, a2 );
845  pd->set_initialized();
846 
847  T * pt2 = static_cast< T* >( pv );
848 
850  return boost::shared_ptr< T >( pt, pt2 );
851 }
852 
853 template< class T, class A, class A1, class A2 >
854 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2 )
855 {
856  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
857 
858  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
859 
860  void * pv = pd->address();
861 
862  ::new( pv ) T( a1, a2 );
863  pd->set_initialized();
864 
865  T * pt2 = static_cast< T* >( pv );
866 
868  return boost::shared_ptr< T >( pt, pt2 );
869 }
870 
871 template< class T, class A1, class A2, class A3 >
872 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3 )
873 {
874  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
875 
876  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
877 
878  void * pv = pd->address();
879 
880  ::new( pv ) T( a1, a2, a3 );
881  pd->set_initialized();
882 
883  T * pt2 = static_cast< T* >( pv );
884 
886  return boost::shared_ptr< T >( pt, pt2 );
887 }
888 
889 template< class T, class A, class A1, class A2, class A3 >
890 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 )
891 {
892  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
893 
894  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
895 
896  void * pv = pd->address();
897 
898  ::new( pv ) T( a1, a2, a3 );
899  pd->set_initialized();
900 
901  T * pt2 = static_cast< T* >( pv );
902 
904  return boost::shared_ptr< T >( pt, pt2 );
905 }
906 
907 template< class T, class A1, class A2, class A3, class A4 >
908 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
909 {
910  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
911 
912  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
913 
914  void * pv = pd->address();
915 
916  ::new( pv ) T( a1, a2, a3, a4 );
917  pd->set_initialized();
918 
919  T * pt2 = static_cast< T* >( pv );
920 
922  return boost::shared_ptr< T >( pt, pt2 );
923 }
924 
925 template< class T, class A, class A1, class A2, class A3, class A4 >
926 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
927 {
928  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
929 
930  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
931 
932  void * pv = pd->address();
933 
934  ::new( pv ) T( a1, a2, a3, a4 );
935  pd->set_initialized();
936 
937  T * pt2 = static_cast< T* >( pv );
938 
940  return boost::shared_ptr< T >( pt, pt2 );
941 }
942 
943 template< class T, class A1, class A2, class A3, class A4, class A5 >
944 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
945 {
946  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
947 
948  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
949 
950  void * pv = pd->address();
951 
952  ::new( pv ) T( a1, a2, a3, a4, a5 );
953  pd->set_initialized();
954 
955  T * pt2 = static_cast< T* >( pv );
956 
958  return boost::shared_ptr< T >( pt, pt2 );
959 }
960 
961 template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
962 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
963 {
964  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
965 
966  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
967 
968  void * pv = pd->address();
969 
970  ::new( pv ) T( a1, a2, a3, a4, a5 );
971  pd->set_initialized();
972 
973  T * pt2 = static_cast< T* >( pv );
974 
976  return boost::shared_ptr< T >( pt, pt2 );
977 }
978 
979 template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
980 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
981 {
982  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
983 
984  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
985 
986  void * pv = pd->address();
987 
988  ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
989  pd->set_initialized();
990 
991  T * pt2 = static_cast< T* >( pv );
992 
994  return boost::shared_ptr< T >( pt, pt2 );
995 }
996 
997 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
998 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
999 {
1000  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1001 
1002  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1003 
1004  void * pv = pd->address();
1005 
1006  ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
1007  pd->set_initialized();
1008 
1009  T * pt2 = static_cast< T* >( pv );
1010 
1012  return boost::shared_ptr< T >( pt, pt2 );
1013 }
1014 
1015 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
1016 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
1017 {
1018  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1019 
1020  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1021 
1022  void * pv = pd->address();
1023 
1024  ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
1025  pd->set_initialized();
1026 
1027  T * pt2 = static_cast< T* >( pv );
1028 
1030  return boost::shared_ptr< T >( pt, pt2 );
1031 }
1032 
1033 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
1034 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
1035 {
1036  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1037 
1038  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1039 
1040  void * pv = pd->address();
1041 
1042  ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
1043  pd->set_initialized();
1044 
1045  T * pt2 = static_cast< T* >( pv );
1046 
1048  return boost::shared_ptr< T >( pt, pt2 );
1049 }
1050 
1051 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
1052 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
1053 {
1054  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1055 
1056  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1057 
1058  void * pv = pd->address();
1059 
1060  ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
1061  pd->set_initialized();
1062 
1063  T * pt2 = static_cast< T* >( pv );
1064 
1066  return boost::shared_ptr< T >( pt, pt2 );
1067 }
1068 
1069 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
1070 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
1071 {
1072  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1073 
1074  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1075 
1076  void * pv = pd->address();
1077 
1078  ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
1079  pd->set_initialized();
1080 
1081  T * pt2 = static_cast< T* >( pv );
1082 
1084  return boost::shared_ptr< T >( pt, pt2 );
1085 }
1086 
1087 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
1088 typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
1089 {
1090  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1091 
1092  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1093 
1094  void * pv = pd->address();
1095 
1096  ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1097  pd->set_initialized();
1098 
1099  T * pt2 = static_cast< T* >( pv );
1100 
1102  return boost::shared_ptr< T >( pt, pt2 );
1103 }
1104 
1105 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
1106 typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
1107 {
1108  boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1109 
1110  boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1111 
1112  void * pv = pd->address();
1113 
1114  ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1115  pd->set_initialized();
1116 
1117  T * pt2 = static_cast< T* >( pv );
1118 
1120  return boost::shared_ptr< T >( pt, pt2 );
1121 }
1122 
1123 #endif // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
1124 
1125 #endif // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
1126 
1127 #undef BOOST_SP_MSD
1128 
1129 } // namespace boost
1130 
1131 #endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
boost::detail::sp_as_deleter::initialized_
bool initialized_
Definition: make_shared_object.hpp:117
boost::allocate_shared_noinit
boost::detail::sp_if_array< T >::type allocate_shared_noinit(const A &allocator, std::size_t size)
Definition: allocate_shared_array.hpp:136
boost::detail::sp_as_deleter::operator()
void operator()(T *)
Definition: make_shared_object.hpp:157
boost::detail::sp_as_deleter::~sp_as_deleter
~sp_as_deleter()
Definition: make_shared_object.hpp:152
boost::detail::sp_ms_deleter::sp_ms_deleter
sp_ms_deleter(sp_ms_deleter const &) BOOST_NOEXCEPT
Definition: make_shared_object.hpp:80
boost::shared_ptr
Definition: exception.hpp:148
T
T
Definition: mem_fn_cc.hpp:25
config.hpp
boost::detail::sp_aligned_storage::type::data_
char data_[N]
Definition: make_shared_object.hpp:33
boost::type_with_alignment
Definition: type_with_alignment.hpp:82
boost::property_tree
Definition: exception_implementation.hpp:14
boost::detail::sp_ms_deleter::operator_fn
static void operator_fn(T *)
Definition: make_shared_object.hpp:94
A1
A1
Definition: mem_fn_cc.hpp:35
boost::detail::sp_if_not_array
Definition: make_shared_object.hpp:177
boost::type
Definition: type.hpp:14
alignment_of.hpp
boost::detail::sp_aligned_storage::type::align_
boost::type_with_alignment< A >::type align_
Definition: make_shared_object.hpp:34
boost::detail::sp_as_deleter::set_initialized
void set_initialized() BOOST_NOEXCEPT
Definition: make_shared_object.hpp:171
boost
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
A7
A7
Definition: mem_fn_cc.hpp:95
sp_forward.hpp
boost::detail::sp_ms_deleter::sp_ms_deleter
sp_ms_deleter(A const &) BOOST_NOEXCEPT
Definition: make_shared_object.hpp:75
A3
A3
Definition: mem_fn_cc.hpp:55
boost::detail::sp_as_deleter::sp_as_deleter
sp_as_deleter(A const &a) BOOST_NOEXCEPT
Definition: make_shared_object.hpp:143
boost::detail::sp_as_deleter::storage_
storage_type storage_
Definition: make_shared_object.hpp:115
boost::detail::sp_as_deleter::operator_fn
static void operator_fn(T *)
Definition: make_shared_object.hpp:162
boost::detail::sp_as_deleter::sp_as_deleter
sp_as_deleter(sp_as_deleter const &r) BOOST_NOEXCEPT
Definition: make_shared_object.hpp:148
boost::detail::sp_aligned_storage
Definition: make_shared_object.hpp:29
A5
A5
Definition: mem_fn_cc.hpp:75
boost::allocate_shared
boost::detail::sp_if_array< T >::type allocate_shared(const A &allocator, std::size_t size)
Definition: allocate_shared_array.hpp:18
boost::detail::sp_ms_deleter::address
void * address() BOOST_NOEXCEPT
Definition: make_shared_object.hpp:98
boost::detail::sp_inplace_tag
Definition: shared_count.hpp:73
BOOST_NOEXCEPT
#define BOOST_NOEXCEPT
Definition: suffix.hpp:938
boost::detail::sp_ms_deleter
Definition: make_shared_object.hpp:38
boost::detail::sp_ms_deleter::initialized_
bool initialized_
Definition: make_shared_object.hpp:44
BOOST_SP_MSD
#define BOOST_SP_MSD(T)
Definition: make_shared_object.hpp:201
boost::detail::sp_ms_deleter::destroy
void destroy()
Definition: make_shared_object.hpp:49
boost::make_shared
boost::detail::sp_if_array< T >::type make_shared(std::size_t size)
Definition: make_shared_array.hpp:18
boost::detail::sp_ms_deleter::storage_type
sp_aligned_storage< sizeof(T), ::boost::alignment_of< T >::value >::type storage_type
Definition: make_shared_object.hpp:42
boost::detail::sp_as_deleter::address
void * address() BOOST_NOEXCEPT
Definition: make_shared_object.hpp:166
boost::alignment_of
Definition: alignment_of.hpp:28
boost::make_shared_noinit
boost::detail::sp_if_array< T >::type make_shared_noinit(std::size_t size)
Definition: make_shared_array.hpp:115
boost::detail::sp_enable_shared_from_this
void sp_enable_shared_from_this(boost::shared_ptr< X > const *ppx, Y const *py, boost::enable_shared_from_this< T > const *pe)
Definition: smart_ptr/shared_ptr.hpp:216
boost::detail::allocator::construct
void construct(void *p, const Type &t)
Definition: allocator_utilities.hpp:151
type_with_alignment.hpp
boost::detail::sp_as_deleter::a_
A a_
Definition: make_shared_object.hpp:116
A6
A6
Definition: mem_fn_cc.hpp:85
boost::detail::sp_if_not_array::type
boost::shared_ptr< T > type
Definition: make_shared_object.hpp:179
boost::detail::sp_as_deleter::storage_type
sp_aligned_storage< sizeof(T), ::boost::alignment_of< T >::value >::type storage_type
Definition: make_shared_object.hpp:113
A4
A4
Definition: mem_fn_cc.hpp:65
boost::detail::sp_ms_deleter::operator()
void operator()(T *)
Definition: make_shared_object.hpp:89
boost::detail::sp_as_deleter::destroy
void destroy()
Definition: make_shared_object.hpp:121
boost::detail::sp_ms_deleter::~sp_ms_deleter
~sp_ms_deleter()
Definition: make_shared_object.hpp:84
boost::detail::sp_ms_deleter::sp_ms_deleter
sp_ms_deleter() BOOST_NOEXCEPT
Definition: make_shared_object.hpp:71
A2
A2
Definition: mem_fn_cc.hpp:45
args
boost::detail::sp_aligned_storage::type
Definition: make_shared_object.hpp:31
boost::detail::sp_ms_deleter::storage_
storage_type storage_
Definition: make_shared_object.hpp:45
boost::detail::allocator::destroy
void destroy(const Type *p)
Definition: allocator_utilities.hpp:166
boost::detail::sp_as_deleter
Definition: make_shared_object.hpp:109
boost::detail::sp_ms_deleter::set_initialized
void set_initialized() BOOST_NOEXCEPT
Definition: make_shared_object.hpp:103
shared_ptr.hpp


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:43:36