21 #ifndef GNSS_SDR_GNSS_SDR_MAKE_UNIQUE_H 22 #define GNSS_SDR_GNSS_SDR_MAKE_UNIQUE_H 24 #if __cplusplus == 201103L 28 #include <type_traits> 42 typedef unique_ptr<T> _Single_object;
46 struct _Unique_if<T[]>
48 typedef unique_ptr<T[]> _Unknown_bound;
51 template <
class T,
size_t N>
52 struct _Unique_if<T[N]>
54 typedef void _Known_bound;
57 template <
class T,
class... Args>
58 typename _Unique_if<T>::_Single_object
59 make_unique(Args&&... args)
61 return unique_ptr<T>(
new T(std::forward<Args>(args)...));
65 typename _Unique_if<T>::_Unknown_bound
68 typedef typename remove_extent<T>::type U;
69 return unique_ptr<T>(
new U[n]());
72 template <
class T,
class... Args>
73 typename _Unique_if<T>::_Known_bound
74 make_unique(Args&&...) =
delete;
77 #endif // __cplusplus == 201103L 82 #endif // GNSS_SDR_GNSS_SDR_MAKE_UNIQUE_H