/* * Copyright (C) 2024-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include template struct value_or_reference { std::optional _opt; const T& _ref; explicit value_or_reference(T&& v) : _opt(std::move(v)), _ref(*_opt) {} explicit value_or_reference(const T& v) : _ref(v) {} value_or_reference(value_or_reference&& o) : _opt(std::move(o._opt)), _ref(_opt ? *_opt : o._ref) {} value_or_reference(const value_or_reference& o) : _opt(o._opt), _ref(_opt ? *_opt : o._ref) {} const T& get() const { return _ref; } };