24 #if ((__cplusplus >= 201304L) || (defined(_MSC_VER) && _MSC_VER >= 1800))
25 #define HAVE_STD_MAKE_UNIQUE
28 #if !defined(HAVE_STD_MAKE_UNIQUE)
31 #include <type_traits>
40 typedef unique_ptr<T> single_object;
44 struct unique_if<T[]> {
45 typedef unique_ptr<T[]> unknown_bound;
48 template <
class T,
size_t N>
49 struct unique_if<T[N]> {
50 typedef void known_bound;
61 template <
class T,
class... Args>
62 typename unique_if<T>::single_object make_unique(Args&&... args) {
63 return unique_ptr<T>(
new T(std::forward<Args>(args)...));
73 typename unique_if<T>::unknown_bound make_unique(
size_t n) {
74 typedef typename remove_extent<T>::type U;
75 return unique_ptr<T>(
new U[n]());
78 template <
class T,
class... Args>
79 typename unique_if<T>::known_bound make_unique(Args&&...) =
delete;