38 lines
873 B
C++
38 lines
873 B
C++
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#ifdef DXX_HAVE_CXX14_MAKE_UNIQUE
|
|
using std::make_unique;
|
|
#else
|
|
namespace detail {
|
|
template <typename T>
|
|
struct unique_enable
|
|
{
|
|
typedef std::unique_ptr<T> scalar_type;
|
|
};
|
|
|
|
template <typename T>
|
|
struct unique_enable<T[]>
|
|
{
|
|
typedef std::unique_ptr<T[]> vector_type;
|
|
typedef T element_type;
|
|
};
|
|
|
|
template <typename T, std::size_t N>
|
|
struct unique_enable<T[N]> {};
|
|
}
|
|
|
|
template <typename T, typename... Args>
|
|
static inline typename detail::unique_enable<T>::scalar_type make_unique(Args&&... args)
|
|
{
|
|
return typename detail::unique_enable<T>::scalar_type{new T(std::forward<Args>(args)...)};
|
|
}
|
|
|
|
template <typename T>
|
|
static inline typename detail::unique_enable<T>::vector_type make_unique(std::size_t N)
|
|
{
|
|
return typename detail::unique_enable<T>::vector_type{new typename detail::unique_enable<T>::element_type[N]()};
|
|
}
|
|
#endif
|