10 ValueOrRef(std::reference_wrapper<T> ref) : is_pointer_(
true), variant_(&ref.get()) {}
21 : is_pointer_(other.is_pointer_),
22 variant_(other.is_pointer_ ? Variant(other.variant_.pointer) : Variant(std::move(other.variant_.value))) {}
24 T& value()
noexcept {
return is_pointer_ ? *variant_.pointer : variant_.value; }
26 const T& value()
const noexcept {
return is_pointer_ ? *variant_.pointer : variant_.value; }
29 ValueOrRef(T value) : is_pointer_(
false), variant_(std::move(value)) {}
32 Variant() : pointer(
nullptr) {}
33 Variant(T* ptr) : pointer(ptr) {}
34 Variant(T&& val) : value(std::move(val)) {}
40 const bool is_pointer_;