Iros
 
Loading...
Searching...
No Matches
unexpected.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/util.h"
5#include "di/types/in_place.h"
6#include "di/util/forward.h"
8#include "di/util/move.h"
10#include "di/util/swap.h"
11
12namespace di::vocab {
13template<typename E>
15public:
16 constexpr Unexpected(Unexpected const&) = default;
17 constexpr Unexpected(Unexpected&&) = default;
18
19 template<typename T = E>
22 constexpr explicit Unexpected(T&& error) : m_error(util::forward<T>(error)) {}
23
24 template<typename... Args>
25 requires(concepts::ConstructibleFrom<E, Args...>)
26 constexpr explicit Unexpected(types::InPlace, Args&&... args)
27 : m_error(types::in_place, util::forward<Args>(args)...) {}
28
29 template<typename T, typename... Args>
31 constexpr explicit Unexpected(types::InPlace, std::initializer_list<T> list, Args&&... args)
32 : m_error(types::in_place, list, util::forward<Args>(args)...) {}
33
34 constexpr auto error() & -> E& { return m_error.value(); }
35 constexpr auto error() const& -> E const& { return m_error.value(); }
36 constexpr auto error() && -> E&& { return util::move(m_error).value(); }
37 constexpr auto error() const&& -> E const&& { return util::move(m_error).value(); }
38
39private:
42 {
43 util::swap(a.m_error, b.m_error);
44 }
45
47};
48
49template<typename E>
51}
Definition rebindable_box.h:42
Definition unexpected.h:14
constexpr Unexpected(Unexpected &&)=default
constexpr Unexpected(T &&error)
Definition unexpected.h:22
constexpr Unexpected(types::InPlace, Args &&... args)
Definition unexpected.h:26
constexpr auto error() const &-> E const &
Definition unexpected.h:35
constexpr Unexpected(types::InPlace, std::initializer_list< T > list, Args &&... args)
Definition unexpected.h:31
constexpr auto error() &&-> E &&
Definition unexpected.h:36
constexpr auto error() &-> E &
Definition unexpected.h:34
constexpr friend void tag_invoke(types::Tag< util::swap >, Unexpected &a, Unexpected &b)
Definition unexpected.h:40
constexpr Unexpected(Unexpected const &)=default
constexpr auto error() const &&-> E const &&
Definition unexpected.h:37
Definition operations.h:11
Definition swap.h:31
constexpr auto in_place
Definition in_place.h:8
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr struct di::util::SwapFunction swap
Definition lazy.h:165
Unexpected(E &&) -> Unexpected< meta::UnwrapRefDecay< E > >
Definition in_place.h:4