11 #if __cplusplus == 201103L
14 #include <type_traits>
20 typedef unique_ptr<T> _Single_object;
24 struct _Unique_if<T[]> {
25 typedef unique_ptr<T[]> _Unknown_bound;
28 template <
class T,
size_t N>
29 struct _Unique_if<T[N]> {
30 typedef void _Known_bound;
33 template <
class T,
class... Args>
34 typename _Unique_if<T>::_Single_object make_unique(Args&&... args) {
35 return unique_ptr<T>(
new T(std::forward<Args>(args)...));
39 typename _Unique_if<T>::_Unknown_bound make_unique(
size_t n) {
40 typedef typename remove_extent<T>::type U;
41 return unique_ptr<T>(
new U[n]());
44 template <
class T,
class... Args>
45 typename _Unique_if<T>::_Known_bound make_unique(Args&&...) =
delete;