1 #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
2 #define BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
53 #if defined( __GNUC__ )
56 T * p =
reinterpret_cast< T*
>(
storage_.data_ );
61 reinterpret_cast< T*
>(
storage_.data_ )->~
T();
125 T * p =
reinterpret_cast< T*
>(
storage_.data_ );
127 #if !defined( BOOST_NO_CXX11_ALLOCATOR )
182 #if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
188 #if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
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 > >()
203 # define BOOST_SP_MSD( T ) boost::detail::sp_ms_deleter< T >()
219 T * pt2 =
static_cast< T*
>( pv );
236 T * pt2 =
static_cast< T*
>( pv );
242 #if !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
254 ::new( pv )
T( boost::detail::sp_forward<Args>(
args )... );
257 T * pt2 =
static_cast< T*
>( pv );
265 #if !defined( BOOST_NO_CXX11_ALLOCATOR )
267 typedef typename std::allocator_traits<A>::template rebind_alloc<T>
A2;
282 D * pd =
static_cast< D*
>(
pt._internal_get_untyped_deleter() );
283 void * pv = pd->address();
285 #if !defined( BOOST_NO_CXX11_ALLOCATOR )
291 ::new( pv )
T( boost::detail::sp_forward<Args>(
args )... );
295 pd->set_initialized();
297 T * pt2 =
static_cast< T*
>( pv );
303 #else // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
318 T * pt2 =
static_cast< T*
>( pv );
335 T * pt2 =
static_cast< T*
>( pv );
341 #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
345 template<
class T,
class A1 >
355 boost::detail::sp_forward<A1>( a1 )
360 T * pt2 =
static_cast< T*
>( pv );
366 template<
class T,
class A,
class A1 >
376 boost::detail::sp_forward<A1>( a1 )
381 T * pt2 =
static_cast< T*
>( pv );
387 template<
class T,
class A1,
class A2 >
397 boost::detail::sp_forward<A1>( a1 ),
398 boost::detail::sp_forward<A2>( a2 )
403 T * pt2 =
static_cast< T*
>( pv );
409 template<
class T,
class A,
class A1,
class A2 >
419 boost::detail::sp_forward<A1>( a1 ),
420 boost::detail::sp_forward<A2>( a2 )
425 T * pt2 =
static_cast< T*
>( pv );
431 template<
class T,
class A1,
class A2,
class A3 >
441 boost::detail::sp_forward<A1>( a1 ),
442 boost::detail::sp_forward<A2>( a2 ),
443 boost::detail::sp_forward<A3>( a3 )
448 T * pt2 =
static_cast< T*
>( pv );
454 template<
class T,
class A,
class A1,
class A2,
class A3 >
464 boost::detail::sp_forward<A1>( a1 ),
465 boost::detail::sp_forward<A2>( a2 ),
466 boost::detail::sp_forward<A3>( a3 )
471 T * pt2 =
static_cast< T*
>( pv );
477 template<
class T,
class A1,
class A2,
class A3,
class A4 >
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 )
495 T * pt2 =
static_cast< T*
>( pv );
501 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4 >
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 )
519 T * pt2 =
static_cast< T*
>( pv );
525 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5 >
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 )
544 T * pt2 =
static_cast< T*
>( pv );
550 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5 >
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 )
569 T * pt2 =
static_cast< T*
>( pv );
575 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6 >
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 )
595 T * pt2 =
static_cast< T*
>( pv );
601 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6 >
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 )
621 T * pt2 =
static_cast< T*
>( pv );
627 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7 >
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 )
648 T * pt2 =
static_cast< T*
>( pv );
654 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7 >
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 )
675 T * pt2 =
static_cast< T*
>( pv );
681 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8 >
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 )
703 T * pt2 =
static_cast< T*
>( pv );
709 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8 >
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 )
731 T * pt2 =
static_cast< T*
>( pv );
737 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8,
class A9 >
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 )
760 T * pt2 =
static_cast< T*
>( pv );
766 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8,
class A9 >
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 )
789 T * pt2 =
static_cast< T*
>( pv );
795 #else // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
799 template<
class T,
class A1 >
811 T * pt2 =
static_cast< T*
>( pv );
817 template<
class T,
class A,
class A1 >
829 T * pt2 =
static_cast< T*
>( pv );
835 template<
class T,
class A1,
class A2 >
844 ::new( pv )
T( a1, a2 );
847 T * pt2 =
static_cast< T*
>( pv );
853 template<
class T,
class A,
class A1,
class A2 >
862 ::new( pv )
T( a1, a2 );
865 T * pt2 =
static_cast< T*
>( pv );
871 template<
class T,
class A1,
class A2,
class A3 >
880 ::new( pv )
T( a1, a2, a3 );
883 T * pt2 =
static_cast< T*
>( pv );
889 template<
class T,
class A,
class A1,
class A2,
class A3 >
898 ::new( pv )
T( a1, a2, a3 );
901 T * pt2 =
static_cast< T*
>( pv );
907 template<
class T,
class A1,
class A2,
class A3,
class A4 >
916 ::new( pv )
T( a1, a2, a3, a4 );
919 T * pt2 =
static_cast< T*
>( pv );
925 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4 >
934 ::new( pv )
T( a1, a2, a3, a4 );
937 T * pt2 =
static_cast< T*
>( pv );
943 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5 >
952 ::new( pv )
T( a1, a2, a3, a4, a5 );
955 T * pt2 =
static_cast< T*
>( pv );
961 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5 >
970 ::new( pv )
T( a1, a2, a3, a4, a5 );
973 T * pt2 =
static_cast< T*
>( pv );
979 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6 >
988 ::new( pv )
T( a1, a2, a3, a4, a5, a6 );
991 T * pt2 =
static_cast< T*
>( pv );
997 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6 >
1006 ::new( pv )
T( a1, a2, a3, a4, a5, a6 );
1009 T * pt2 =
static_cast< T*
>( pv );
1015 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7 >
1024 ::new( pv )
T( a1, a2, a3, a4, a5, a6, a7 );
1027 T * pt2 =
static_cast< T*
>( pv );
1033 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7 >
1042 ::new( pv )
T( a1, a2, a3, a4, a5, a6, a7 );
1045 T * pt2 =
static_cast< T*
>( pv );
1051 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8 >
1060 ::new( pv )
T( a1, a2, a3, a4, a5, a6, a7, a8 );
1063 T * pt2 =
static_cast< T*
>( pv );
1069 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8 >
1078 ::new( pv )
T( a1, a2, a3, a4, a5, a6, a7, a8 );
1081 T * pt2 =
static_cast< T*
>( pv );
1087 template<
class T,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8,
class A9 >
1096 ::new( pv )
T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1099 T * pt2 =
static_cast< T*
>( pv );
1105 template<
class T,
class A,
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
class A8,
class A9 >
1114 ::new( pv )
T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1117 T * pt2 =
static_cast< T*
>( pv );
1123 #endif // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
1125 #endif // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
1131 #endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED