3 #ifndef DUNE_FUNCTIONS_COMMON_OPTIONAL_HH 4 #define DUNE_FUNCTIONS_COMMON_OPTIONAL_HH 8 #include <dune/common/typeutilities.hh> 32 template<
class TT, disableCopyMove<Optional, TT> = 0>
43 p_ =
new (buffer_) T(std::move(other.value()));
52 p_ =
new (buffer_) T(other.
value());
70 template<
class TT, disableCopyMove<Optional, TT> = 0 >
74 *p_ = std::forward<T>(t);
76 p_ =
new (buffer_) T(std::forward<T>(t));
86 *
this = other.
value();
87 else if (
operator bool())
101 *
this = std::move(other.value());
102 else if (
operator bool())
111 explicit operator bool()
const 129 template<
class... Args >
134 p_ =
new (buffer_) T(std::forward<Args>(args)...);
149 alignas(T)
char buffer_[
sizeof(T)];
157 #endif // DUNE_FUNCTIONS_COMMON_OPTIONAL_HH Optional & operator=(const Optional &other)
Copy assignment from optional.
Definition: optional.hh:83
Optional & operator=(TT &&t)
Assignment.
Definition: optional.hh:71
void release()
Destruct internal T leaving *this in empty state.
Definition: optional.hh:138
Optional(TT &&t)
Construct internal T from given argument.
Definition: optional.hh:33
Definition: polynomial.hh:7
Optional()
Default constructor.
Definition: optional.hh:27
Optional(const Optional &other)
Copy constructor.
Definition: optional.hh:49
Optional & operator=(Optional &&other)
Move assignment from optional.
Definition: optional.hh:98
Optional(Optional &&other)
Move constructor.
Definition: optional.hh:40
A wrapper that can either contain an object of T or be empty.
Definition: optional.hh:22
~Optional()
Destructor.
Definition: optional.hh:58
void emplace(Args &&... args)
Construct internal T from given arguments.
Definition: optional.hh:130
T & value()
Get mutable reference to internal T.
Definition: optional.hh:123
const T & value() const
Get reference to internal T.
Definition: optional.hh:117