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