8 #if __cplusplus <= 201103L 9 #define __cpp_lib_make_unique 201304 11 template<
typename _Tp>
13 {
typedef unique_ptr<_Tp> __single_object; };
15 template<
typename _Tp>
16 struct _MakeUniq<_Tp[]>
17 {
typedef unique_ptr<_Tp[]> __array; };
19 template<
typename _Tp,
size_t _Bound>
20 struct _MakeUniq<_Tp[_Bound]>
21 {
struct __invalid_type { }; };
24 template<
typename _Tp,
typename... _Args>
25 inline typename _MakeUniq<_Tp>::__single_object
26 make_unique(_Args&&... __args)
27 {
return unique_ptr<_Tp>(
new _Tp(std::forward<_Args>(__args)...)); }
30 template<
typename _Tp>
31 inline typename _MakeUniq<_Tp>::__array
32 make_unique(
size_t __num)
33 {
return unique_ptr<_Tp>(
new typename remove_extent<_Tp>::type[__num]()); }
36 template<
typename _Tp,
typename... _Args>
37 inline typename _MakeUniq<_Tp>::__invalid_type
38 make_unique(_Args&&...) =
delete;