23 for (
size_t i = 0; i <
sizeof(T); i++) {
42 return !self.m_has_value;
45 template<
typename Self>
52 if (self.m_has_value) {
55 self.m_has_value =
false;
58 template<
typename... Args>
62 self.m_has_value =
true;
65 bool m_has_value {
false };
Definition basic_optional_storage.h:19
auto operator=(BasicOptionalStorage &&) -> BasicOptionalStorage &=default
constexpr friend void tag_invoke(types::Tag< set_value >, BasicOptionalStorage &self, Args &&... args)
Definition basic_optional_storage.h:60
BasicOptionalStorage(BasicOptionalStorage const &)=default
~BasicOptionalStorage()=default
constexpr ~BasicOptionalStorage()
Definition basic_optional_storage.h:36
constexpr friend auto tag_invoke(types::Tag< get_value >, Self &&self) -> decltype(auto)
Definition basic_optional_storage.h:47
T m_value
Definition basic_optional_storage.h:67
BasicOptionalStorage(BasicOptionalStorage &&)=default
auto operator=(BasicOptionalStorage const &) -> BasicOptionalStorage &=default
Byte m_array[sizeof(T)]
Definition basic_optional_storage.h:68
constexpr friend void tag_invoke(types::Tag< set_nullopt >, BasicOptionalStorage &self)
Definition basic_optional_storage.h:51
constexpr BasicOptionalStorage(NullOpt)
Definition basic_optional_storage.h:21
constexpr friend auto tag_invoke(types::Tag< is_nullopt >, BasicOptionalStorage const &self) -> bool
Definition basic_optional_storage.h:41
Definition operations.h:11
std::byte Byte
Definition byte.h:63
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto forward_like(U &&value) -> decltype(auto)
Definition forward_like.h:8
constexpr auto destroy_at
Definition destroy_at.h:24
constexpr auto construct_at
Definition construct_at.h:27