diff --git a/include/boost/move/make_unique.hpp b/include/boost/move/make_unique.hpp index fb57850..8dc491b 100644 --- a/include/boost/move/make_unique.hpp +++ b/include/boost/move/make_unique.hpp @@ -21,6 +21,9 @@ #include #include //for std::size_t #include +#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES +# include +#endif //!\file //! Defines "make_unique" functions, which are factories to create instances @@ -92,419 +95,19 @@ inline BOOST_MOVE_DOC1ST(unique_ptr, { return unique_ptr(new (*boost::move_upmu::pnothrow)T(::boost::forward(args)...)); } #else - - //0 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique() - { return unique_ptr(new T()); } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow() - { return unique_ptr(new (*boost::move_upmu::pnothrow)T()); } - - //1 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow( BOOST_FWD_REF(P0) p0 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - ) - ); - } - //2 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - ) - ); - } - //3 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - ) - ); - } - //4 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - ) - ); - } - //5 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - ) - ); - } - //6 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - ) - ); - } - //7 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - ) - ); - } - - //8 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - , BOOST_FWD_REF(P7) p7 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - , ::boost::forward(p7) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - , BOOST_FWD_REF(P7) p7 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - , ::boost::forward(p7) - ) - ); - } - //9 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - , BOOST_FWD_REF(P7) p7 - , BOOST_FWD_REF(P8) p8 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - , ::boost::forward(p7) - , ::boost::forward(p8) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - , BOOST_FWD_REF(P7) p7 - , BOOST_FWD_REF(P8) p8 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - , ::boost::forward(p7) - , ::boost::forward(p8) - ) - ); - } - //10 arg - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - , BOOST_FWD_REF(P7) p7 - , BOOST_FWD_REF(P8) p8 - , BOOST_FWD_REF(P9) p9 - ) - { - return unique_ptr - ( new T( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - , ::boost::forward(p7) - , ::boost::forward(p8) - , ::boost::forward(p9) - ) - ); - } - - template - typename ::boost::move_upmu::unique_ptr_if::t_is_not_array - make_unique_nothrow ( BOOST_FWD_REF(P0) p0 - , BOOST_FWD_REF(P1) p1 - , BOOST_FWD_REF(P2) p2 - , BOOST_FWD_REF(P3) p3 - , BOOST_FWD_REF(P4) p4 - , BOOST_FWD_REF(P5) p5 - , BOOST_FWD_REF(P6) p6 - , BOOST_FWD_REF(P7) p7 - , BOOST_FWD_REF(P8) p8 - , BOOST_FWD_REF(P9) p9 - ) - { - return unique_ptr - ( new (*boost::move_upmu::pnothrow)T ( ::boost::forward(p0) - , ::boost::forward(p1) - , ::boost::forward(p2) - , ::boost::forward(p3) - , ::boost::forward(p4) - , ::boost::forward(p5) - , ::boost::forward(p6) - , ::boost::forward(p7) - , ::boost::forward(p8) - , ::boost::forward(p9) - ) - ); - } + #define BOOST_MOVE_MAKE_UNIQUE_CODE(N)\ + template\ + typename ::boost::move_upmu::unique_ptr_if::t_is_not_array\ + make_unique( BOOST_MOVE_UREF##N)\ + { return unique_ptr( new T( BOOST_MOVE_FWD##N ) ); }\ + \ + template\ + typename ::boost::move_upmu::unique_ptr_if::t_is_not_array\ + make_unique_nothrow( BOOST_MOVE_UREF##N)\ + { return unique_ptr( new (*boost::move_upmu::pnothrow)T ( BOOST_MOVE_FWD##N ) ); }\ + // + BOOST_MOVE_ITERATE_0TO9(BOOST_MOVE_MAKE_UNIQUE_CODE) + #undef BOOST_MOVE_MAKE_UNIQUE_CODE #endif