1#pragma once
2
3namespace c10 {
4
5template <typename T>
6class OptionalRef {
7 public:
8 OptionalRef() : data_(nullptr) {}
9 OptionalRef(const T* data) : data_(data) {
10 TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_);
11 }
12 OptionalRef(const T& data) : data_(&data) {}
13
14 bool has_value() const {
15 return data_ != nullptr;
16 }
17
18 const T& get() const {
19 TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_);
20 return *data_;
21 }
22
23 operator bool() const {
24 return has_value();
25 }
26
27 private:
28 const T* data_;
29};
30
31} // namespace c10
32