mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-20 00:20:47 +00:00
28 lines
652 B
C++
28 lines
652 B
C++
/*
|
|
* Copyright (C) 2024-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.1
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <optional>
|
|
|
|
template <typename T>
|
|
struct value_or_reference {
|
|
std::optional<T> _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;
|
|
}
|
|
};
|