8 #ifndef GIGA_UTILS_MAKE_UNIQUE_H_
9 #define GIGA_UTILS_MAKE_UNIQUE_H_
13 #include <type_traits>
18 typedef std::unique_ptr<T> _Single_object;
22 typedef std::unique_ptr<T[]> _Unknown_bound;
26 typedef void _Known_bound;
29 template<
class T,
class... Args>
30 typename _Unique_if<T>::_Single_object
31 make_unique(Args&&... args) {
32 return std::unique_ptr<T>(
new T(std::forward<Args>(args)...));
36 typename _Unique_if<T>::_Unknown_bound
37 make_unique(
size_t n) {
38 typedef typename std::remove_extent<T>::type U;
39 return std::unique_ptr<T>(
new U[n]());
42 template<
class T,
class... Args>
43 typename _Unique_if<T>::_Known_bound
44 make_unique(Args&&...) =
delete;
Definition: make_unique.h:17