Furrent
result.hpp
Go to the documentation of this file.
1 
8 #pragma once
9 
10 #include <variant>
11 
12 namespace fur::util {
13 
17 template <typename R, typename E>
18 class Result {
19  std::variant<R, E> _inner;
20 
22  explicit Result(R&& result);
23 
24  explicit Result(E&& error);
25 
26  public:
27  Result(const Result&) = delete;
28  Result& operator=(const Result&) = delete;
29 
30  Result(Result&&) noexcept;
31  Result& operator=(Result&&) noexcept;
32 
34  [[nodiscard]] bool valid() const;
36  R& operator*();
37 
39  R* operator->();
41  const E& error() const;
42 
43  public:
45  static Result OK(R&& result);
46 
48  static Result ERROR(E&& error);
49 };
50 
51 struct Empty {};
52 
56 template <typename E>
58 
59 } // namespace fur::util
60 
61 #include <util/result.inl>
fur::util::Result::operator*
R & operator*()
Definition: result.inl:45
fur::util::Result::valid
bool valid() const
Definition: result.inl:40
fur::util::Result::ERROR
static Result ERROR(E &&error)
Creates an error result.
Definition: result.inl:35
fur::util::Result
Used to handle errors without using exceptions.
Definition: result.hpp:18
fur::util::Result::error
const E & error() const
Definition: result.inl:55
fur::util::Empty
Definition: result.hpp:51
fur::util::Result::operator=
Result & operator=(const Result &)=delete
fur::util::Result::OK
static Result OK(R &&result)
Creates an ok result.
Definition: result.inl:30
fur::util::Result::operator->
R * operator->()
Definition: result.inl:50
fur::util
Definition: result.hpp:12
result.inl