36 requires(!std::same_as<std::decay_t<U>, Required> && std::constructible_from<T, U &&>)
38 : value_(std::forward<U>(value))
42 template <
typename... Args>
43 requires(
sizeof...(Args) >= 2 && std::constructible_from<T, Args && ...>)
45 : value_(std::forward<Args>(args)...)
48 Required(
const Required&) =
default;
49 Required& operator=(
const Required&) =
default;
50 Required(Required&&) =
default;
51 Required& operator=(Required&&) =
default;
54 constexpr T&
operator*() &
noexcept USERVER_IMPL_LIFETIME_BOUND {
return value_; }
57 constexpr const T&
operator*()
const&
noexcept USERVER_IMPL_LIFETIME_BOUND {
return value_; }
60 constexpr T&&
operator*() &&
noexcept {
return std::move(value_); }
63 constexpr T*
operator->()
noexcept USERVER_IMPL_LIFETIME_BOUND {
return std::addressof(value_); }
66 constexpr const T*
operator->()
const noexcept USERVER_IMPL_LIFETIME_BOUND {
return std::addressof(value_); }
69 constexpr operator T&() &
noexcept USERVER_IMPL_LIFETIME_BOUND {
return value_; }
72 constexpr operator const T&()
const&
noexcept USERVER_IMPL_LIFETIME_BOUND {
return value_; }
76 requires(!std::same_as<U, T> && !std::is_reference_v<U> && std::convertible_to<
const T&, U>)