Iros
 
Loading...
Searching...
No Matches
erased_status_code.h
Go to the documentation of this file.
1#pragma once
2
9
10namespace di::vocab {
11template<typename T>
12class StatusCode<Erased<T>> : public detail::StatusCodeStorage<Erased<T>> {
13private:
15
16public:
17 using Domain = void;
18 using Value = T;
19
20 StatusCode() = default;
21 StatusCode(StatusCode const&) = delete;
22 StatusCode(StatusCode&&) = default;
23
24 template<typename Domain>
27 constexpr StatusCode(StatusCode<Domain> const& other)
28 : Base(in_place, other.m_domain, detail::erasure_cast<Value>(other.value())) {}
29
30 template<typename Domain>
33 constexpr StatusCode(StatusCode<Domain>&& other)
34 : Base(in_place, other.m_domain, detail::erasure_cast<Value>(other.value())) {}
35
36 template<typename U, typename... Args>
39 constexpr StatusCode(U&& v, Args&&... args)
40 : StatusCode(into_status_code(util::forward<U>(v), util::forward<Args>(args)...)) {}
41
42 auto operator=(StatusCode const&) -> StatusCode& = delete;
43 auto operator=(StatusCode&&) -> StatusCode& = default;
44
45 constexpr ~StatusCode() {
46 if (this->m_domain) {
47 // FIXME: investigate this sketchy warning generated by GCC on i686, but not x86_64.
48#pragma GCC diagnostic push
49#pragma GCC diagnostic ignored "-Warray-bounds"
50 this->domain().do_erased_destroy(*this, sizeof(*this));
51#pragma GCC diagnostic pop
52 }
53 }
54
55 constexpr auto value() const { return this->m_value; }
56
57private:
58 template<typename Domain>
59 friend class StatusCode;
60};
61}
Definition status_code_forward_declaration.h:11
constexpr StatusCode(StatusCode< Domain > const &other)
Definition erased_status_code.h:27
constexpr StatusCode(U &&v, Args &&... args)
Definition erased_status_code.h:39
StatusCode(StatusCode const &)=delete
friend class StatusCode
Definition erased_status_code.h:59
StatusCodeDomain const * m_domain
Definition void_status_code.h:58
auto operator=(StatusCode const &) -> StatusCode &=delete
constexpr StatusCode(StatusCode< Domain > &&other)
Definition erased_status_code.h:33
auto operator=(StatusCode &&) -> StatusCode &=default
T Value
Definition erased_status_code.h:18
StatusCode(StatusCode &&)=default
void Domain
Definition erased_status_code.h:17
constexpr ~StatusCode()
Definition erased_status_code.h:45
constexpr auto value() const
Definition erased_status_code.h:55
Definition status_code_storage.h:13
constexpr auto domain() const -> Domain const &
Definition status_code_storage.h:21
Value m_value
Definition status_code_storage.h:58
Definition into_status_code.h:26
Definition util.h:59
Definition erased_status_code.h:17
Definition status_code_erasable_into.h:18
constexpr auto erasure_cast(From const &from) -> To
Definition erasure_cast.h:9
Definition lazy.h:165
constexpr auto into_status_code
Definition into_status_code.h:17
constexpr auto in_place
Definition in_place.h:8
Definition erased.h:7