5namespace cppgres::utils {
9 template <
typename... Args>
maybe_ref(Args &&...args) : data(std::forward<Args>(args)...) {}
11 maybe_ref(T &ref) : data(std::ref(ref)) {}
14 if (std::holds_alternative<T>(data))
15 return std::get<T>(data);
17 return std::get<std::reference_wrapper<T>>(data).get();
20 operator const T &()
const {
21 if (std::holds_alternative<T>(data))
22 return std::get<T>(data);
24 return std::get<std::reference_wrapper<T>>(data).get();
27 T *operator->() {
return &
operator T &(); }
28 const T *operator->()
const {
return &
operator const T &(); }
30 bool is_ref()
const {
return !std::holds_alternative<T>(data); }
33 std::variant<T, std::reference_wrapper<T>> data;
Definition: maybe_ref.hpp:7