#pragma once namespace c10 { template class OptionalRef { public: OptionalRef() : data_(nullptr) {} OptionalRef(const T* data) : data_(data) { TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_); } OptionalRef(const T& data) : data_(&data) {} bool has_value() const { return data_ != nullptr; } const T& get() const { TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_); return *data_; } operator bool() const { return has_value(); } private: const T* data_; }; } // namespace c10