10namespace di::vocab::detail {
12requires(!concepts::LanguageVoid<T>)
13class StatusCodeStorage : public StatusCode<void> {
15 using Base = StatusCode<void>;
21 constexpr auto domain() const -> Domain const& {
23 return static_cast<Domain const&
>(*m_domain);
26 constexpr void clear() {
32 constexpr auto value() & -> Value& {
return m_value; }
33 constexpr auto value() const& -> Value const& {
return m_value; }
34 constexpr auto value() && -> Value&& {
return util::move(m_value); }
35 constexpr auto value() const&& -> Value const&& {
return util::move(m_value); }
38 StatusCodeStorage() =
default;
39 StatusCodeStorage(StatusCodeStorage
const&) =
default;
40 constexpr StatusCodeStorage(StatusCodeStorage&& other) : Base(other), m_value(util::
move(other.
value())) {
41 other.m_domain =
nullptr;
44 template<
typename... Args>
45 requires(concepts::ConstructibleFrom<Value, Args...>)
46 constexpr StatusCodeStorage(InPlace, StatusCodeDomain
const* domain, Args&&... args)
47 : Base(domain), m_value(util::forward<Args>(args)...) {}
49 auto operator=(StatusCodeStorage
const&) -> StatusCodeStorage& =
default;
50 constexpr auto operator=(StatusCodeStorage&& other) -> StatusCodeStorage& {
56 ~StatusCodeStorage() =
default;
#define DI_ASSERT(...)
Definition assert_bool.h:7
constexpr void clear(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:120
constexpr auto move
Definition move.h:38
constexpr auto value
Definition value.h:34
constexpr auto destroy_at
Definition destroy_at.h:24
constexpr auto construct_at
Definition construct_at.h:27
constexpr auto empty
Definition empty.h:45