24 #ifndef GNSS_SDR_GNSS_SDR_MAKE_UNIQUE_H 25 #define GNSS_SDR_GNSS_SDR_MAKE_UNIQUE_H 27 #if __cplusplus == 201103L 31 #include <type_traits> 39 typedef unique_ptr<T> _Single_object;
43 struct _Unique_if<T[]>
45 typedef unique_ptr<T[]> _Unknown_bound;
48 template <
class T,
size_t N>
49 struct _Unique_if<T[N]>
51 typedef void _Known_bound;
54 template <
class T,
class... Args>
55 typename _Unique_if<T>::_Single_object
56 make_unique(Args&&... args)
58 return unique_ptr<T>(
new T(std::forward<Args>(args)...));
62 typename _Unique_if<T>::_Unknown_bound
65 typedef typename remove_extent<T>::type U;
66 return unique_ptr<T>(
new U[n]());
69 template <
class T,
class... Args>
70 typename _Unique_if<T>::_Known_bound
71 make_unique(Args&&...) =
delete;
74 #endif // __cplusplus == 201103L 76 #endif // GNSS_SDR_GNSS_SDR_MAKE_UNIQUE_H