Caffe2 - C++ API
A deep learning, cross platform ML framework
memory.h
1 #pragma once
2 
3 #include <memory>
4 
5 namespace torch {
6 
7 // Reference:
8 // https://github.com/llvm-mirror/libcxx/blob/master/include/memory#L3091
9 
10 template <typename T>
12  using value = std::unique_ptr<T>;
13 };
14 
15 template <typename T>
16 struct unique_type_for<T[]> {
17  using unbounded_array = std::unique_ptr<T[]>;
18 };
19 
20 template <typename T, size_t N>
21 struct unique_type_for<T[N]> {
22  using bounded_array = void;
23 };
24 
25 template <typename T, typename... Args>
26 typename unique_type_for<T>::value make_unique(Args&&... args) {
27  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
28 }
29 
30 template <typename T>
31 typename unique_type_for<T>::unbounded_array make_unique(size_t size) {
32  using U = typename std::remove_extent<T>::type;
33  return std::unique_ptr<T>(new U[size]());
34 }
35 
36 template <typename T, size_t N, typename... Args>
37 typename unique_type_for<T>::bounded_array make_unique(Args&&...) = delete;
38 } // namespace torch
Definition: jit_type.h:17