1 #pragma once 2 3 namespace c10 { 4 5 template <typename T> 6 class OptionalRef { 7 public: OptionalRef()8 OptionalRef() : data_(nullptr) {} OptionalRef(const T * data)9 OptionalRef(const T* data) : data_(data) { 10 TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_); 11 } OptionalRef(const T & data)12 OptionalRef(const T& data) : data_(&data) {} 13 has_value()14 bool has_value() const { 15 return data_ != nullptr; 16 } 17 get()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