Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
helper.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file helper.h
1 #include <cstddef>
2 #include <memory>
3 #include <type_traits>
4 #include <utility>
5 
6 namespace std {
7  template<class T> struct _Unique_if {
8  typedef unique_ptr<T> _Single_object;
9  };
10 
11  template<class T> struct _Unique_if<T[]> {
12  typedef unique_ptr<T[]> _Unknown_bound;
13  };
14 
15  template<class T, size_t N> struct _Unique_if<T[N]> {
16  typedef void _Known_bound;
17  };
18 
19  template<class T, class... Args>
21  make_unique(Args&&... args) {
22  return unique_ptr<T>(new T(std::forward<Args>(args)...));
23  }
24 
25  template<class T>
26  typename _Unique_if<T>::_Unknown_bound
27  make_unique(size_t n) {
28  typedef typename remove_extent<T>::type U;
29  return unique_ptr<T>(new U[n]());
30  }
31 
32  template<class T, class... Args>
33  typename _Unique_if<T>::_Known_bound
34  make_unique(Args&&...) = delete;
35 }