17 template<
typename InlineStorage>
25 template<
typename InlineStorage>
29template<
size_t inline_size,
size_t inline_align>
50 template<
typename T,
typename... Args>
61 if (!vtable.empty()) {
62 auto const fp = vtable[
Manage {}];
69 template<concepts::VTableFor<Interface> VTable>
73 dest_vtable = source_vtable;
78 if (!vtable.empty()) {
79 auto const fp = vtable[
Manage {}];
88 return static_cast<T*
>(address());
93 return static_cast<T const*
>(address());
97 auto address() ->
void* {
return static_cast<void*
>(util::addressof(m_storage[0])); }
98 auto address() const ->
void const* {
return static_cast<void const*
>(util::addressof(m_storage[0])); }
100 alignas(inline_align)
di::Byte m_storage[inline_size];
104 template<
typename InlineStorage>
109 auto* b_value = b->template down_cast<T>();
Definition operations.h:11
Definition operations.h:43
Definition vtable_for.h:17
constexpr auto inline_storage_manage
Definition inline_storage.h:26
StorageCategory
Definition storage_category.h:4
@ MoveOnly
Definition storage_category.h:9
std::byte Byte
Definition byte.h:63
constexpr auto destroy_at
Definition destroy_at.h:24
constexpr auto construct_at
Definition construct_at.h:27
constexpr auto destroy
Definition destroy.h:35
Definition inline_storage.h:30
static constexpr void move_construct(concepts::VTableFor< Interface > auto &vtable, InlineStorage *dest, InlineStorage *source)
Definition inline_storage.h:59
meta::List< Manage > Interface
Definition inline_storage.h:33
static constexpr auto creation_is_fallible(InPlaceType< T >) -> bool
Definition inline_storage.h:38
auto down_cast() -> T *
Definition inline_storage.h:87
static constexpr void move_assign(VTable &dest_vtable, InlineStorage *dest, VTable &source_vtable, InlineStorage *source)
Definition inline_storage.h:70
void CreationResult
Definition inline_storage.h:43
auto down_cast() const -> T const *
Definition inline_storage.h:92
static constexpr void destroy(concepts::VTableFor< Interface > auto &vtable, InlineStorage *self)
Definition inline_storage.h:77
meta::Type< detail::InlineStorageManage< InlineStorage > > Manage
Definition inline_storage.h:32
auto operator=(InlineStorage const &) -> InlineStorage &=delete
InlineStorage(InlineStorage const &)=delete
static constexpr void init(InlineStorage *self, InPlaceType< T >, Args &&... args)
Definition inline_storage.h:53
static constexpr auto storage_category() -> StorageCategory
Definition inline_storage.h:35
constexpr InlineStorage()=default
Definition inline_storage.h:18
void operator()(T &, InlineStorage *) const
Definition inline_storage.h:106
Method< InlineStorageManage, void(This &, InlineStorage *)> Type
Definition inline_storage.h:19
Definition in_place_type.h:5